@basic-ui/core 0.0.54 → 0.0.57
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 +364 -591
- package/build/cjs/index.js.map +1 -1
- package/build/esm/Accordion/Accordion.d.ts +9 -9
- package/build/esm/Accordion/Accordion.js +20 -29
- package/build/esm/Accordion/Accordion.js.map +1 -1
- package/build/esm/Accordion/AccordionBody.d.ts +6 -6
- package/build/esm/Accordion/AccordionBody.js +18 -32
- package/build/esm/Accordion/AccordionBody.js.map +1 -1
- package/build/esm/Accordion/AccordionHeader.d.ts +7 -7
- package/build/esm/Accordion/AccordionHeader.js +37 -74
- package/build/esm/Accordion/AccordionHeader.js.map +1 -1
- package/build/esm/Accordion/AccordionItem.d.ts +9 -9
- package/build/esm/Accordion/AccordionItem.js +19 -22
- package/build/esm/Accordion/AccordionItem.js.map +1 -1
- package/build/esm/Accordion/context.d.ts +19 -19
- package/build/esm/Accordion/context.js +16 -13
- 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/CheckBox/CheckBox.d.ts +7 -7
- package/build/esm/CheckBox/CheckBox.js +15 -25
- 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 +52 -59
- package/build/esm/ComboBox/Combobox.js.map +1 -1
- package/build/esm/ComboBox/ComboboxButton.d.ts +9 -9
- package/build/esm/ComboBox/ComboboxButton.js +23 -28
- package/build/esm/ComboBox/ComboboxButton.js.map +1 -1
- package/build/esm/ComboBox/ComboboxInput.d.ts +17 -17
- package/build/esm/ComboBox/ComboboxInput.js +67 -70
- package/build/esm/ComboBox/ComboboxInput.js.map +1 -1
- package/build/esm/ComboBox/ComboboxLabel.d.ts +7 -7
- package/build/esm/ComboBox/ComboboxLabel.js +15 -17
- package/build/esm/ComboBox/ComboboxLabel.js.map +1 -1
- package/build/esm/ComboBox/ComboboxList.d.ts +8 -8
- package/build/esm/ComboBox/ComboboxList.js +19 -20
- package/build/esm/ComboBox/ComboboxList.js.map +1 -1
- package/build/esm/ComboBox/ComboboxOption.d.ts +11 -11
- package/build/esm/ComboBox/ComboboxOption.js +41 -45
- package/build/esm/ComboBox/ComboboxOption.js.map +1 -1
- package/build/esm/ComboBox/ComboboxPopover.d.ts +9 -9
- package/build/esm/ComboBox/ComboboxPopover.js +22 -21
- 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 +5 -6
- package/build/esm/ComboBox/context.js.map +1 -1
- package/build/esm/ComboBox/hooks.d.ts +37 -37
- package/build/esm/ComboBox/hooks.js +175 -148
- 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 +3 -6
- 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/FocusLock/FocusLock.d.ts +9 -9
- package/build/esm/FocusLock/FocusLock.js +26 -32
- 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 +5 -7
- package/build/esm/FocusLock/tabUtils.js.map +1 -1
- package/build/esm/FocusLock/useFocusLock.d.ts +7 -7
- package/build/esm/FocusLock/useFocusLock.js +14 -19
- package/build/esm/FocusLock/useFocusLock.js.map +1 -1
- package/build/esm/List/List.d.ts +7 -7
- package/build/esm/List/List.js +9 -11
- package/build/esm/List/List.js.map +1 -1
- package/build/esm/List/ListItem.d.ts +7 -7
- package/build/esm/List/ListItem.js +9 -11
- package/build/esm/List/ListItem.js.map +1 -1
- package/build/esm/List/context.d.ts +4 -4
- package/build/esm/List/context.js +6 -6
- 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 +32 -37
- package/build/esm/Menu/ContextMenuTrigger.js.map +1 -1
- package/build/esm/Menu/Menu.d.ts +10 -10
- package/build/esm/Menu/Menu.js +33 -49
- package/build/esm/Menu/Menu.js.map +1 -1
- package/build/esm/Menu/MenuButton.d.ts +11 -11
- package/build/esm/Menu/MenuButton.js +28 -44
- package/build/esm/Menu/MenuButton.js.map +1 -1
- package/build/esm/Menu/MenuItem.d.ts +8 -8
- package/build/esm/Menu/MenuItem.js +29 -38
- package/build/esm/Menu/MenuItem.js.map +1 -1
- package/build/esm/Menu/MenuList.d.ts +7 -7
- package/build/esm/Menu/MenuList.js +61 -116
- package/build/esm/Menu/MenuList.js.map +1 -1
- package/build/esm/Menu/MenuPopover.d.ts +8 -8
- package/build/esm/Menu/MenuPopover.js +16 -19
- package/build/esm/Menu/MenuPopover.js.map +1 -1
- package/build/esm/Menu/context.d.ts +25 -25
- package/build/esm/Menu/context.js +14 -12
- 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 +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 +13 -18
- package/build/esm/Modal/Modal.js.map +1 -1
- package/build/esm/Modal/ModalBackdrop.d.ts +10 -10
- package/build/esm/Modal/ModalBackdrop.js +24 -33
- 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 +44 -60
- package/build/esm/Popper/Popper.js.map +1 -1
- package/build/esm/Popper/PopperArrow.d.ts +6 -6
- package/build/esm/Popper/PopperArrow.js +11 -16
- package/build/esm/Popper/PopperArrow.js.map +1 -1
- package/build/esm/Popper/context.d.ts +6 -6
- package/build/esm/Popper/context.js +3 -5
- 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 -7
- package/build/esm/Portal/Portal.js +9 -11
- package/build/esm/Portal/Portal.js.map +1 -1
- package/build/esm/Portal/PortalSelectorProvider.d.ts +8 -8
- package/build/esm/Portal/PortalSelectorProvider.js +6 -4
- package/build/esm/Portal/PortalSelectorProvider.js.map +1 -1
- package/build/esm/Portal/index.d.ts +2 -2
- package/build/esm/Portal/index.js.map +1 -1
- package/build/esm/RadioButton/RadioButton.d.ts +10 -10
- package/build/esm/RadioButton/RadioButton.js +17 -23
- package/build/esm/RadioButton/RadioButton.js.map +1 -1
- package/build/esm/RadioButton/RadioGroup.d.ts +12 -12
- package/build/esm/RadioButton/RadioGroup.js +19 -28
- package/build/esm/RadioButton/RadioGroup.js.map +1 -1
- package/build/esm/RadioButton/context.d.ts +9 -9
- package/build/esm/RadioButton/context.js +8 -6
- 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 +9 -11
- 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 +422 -489
- 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 +31 -59
- package/build/esm/Spinner/Spinner.js.map +1 -1
- package/build/esm/Spinner/SpinnerButton.d.ts +8 -8
- package/build/esm/Spinner/SpinnerButton.js +14 -19
- package/build/esm/Spinner/SpinnerButton.js.map +1 -1
- package/build/esm/Spinner/context.d.ts +12 -12
- package/build/esm/Spinner/context.js +8 -7
- 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 +32 -50
- package/build/esm/Tabs/Tab.js.map +1 -1
- package/build/esm/Tabs/TabList.d.ts +9 -9
- package/build/esm/Tabs/TabList.js +24 -34
- package/build/esm/Tabs/TabList.js.map +1 -1
- package/build/esm/Tabs/TabPanel.d.ts +8 -8
- package/build/esm/Tabs/TabPanel.js +16 -23
- package/build/esm/Tabs/TabPanel.js.map +1 -1
- package/build/esm/Tabs/TabPanels.d.ts +8 -8
- package/build/esm/Tabs/TabPanels.js +15 -20
- package/build/esm/Tabs/TabPanels.js.map +1 -1
- package/build/esm/Tabs/Tabs.d.ts +10 -10
- package/build/esm/Tabs/Tabs.js +17 -33
- package/build/esm/Tabs/Tabs.js.map +1 -1
- package/build/esm/Tabs/context.d.ts +17 -17
- package/build/esm/Tabs/context.js +16 -13
- 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 +20 -30
- 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 +95 -81
- package/build/esm/Tooltip/stateMachine.js.map +1 -1
- package/build/esm/Tooltip/useTooltip.d.ts +10 -10
- package/build/esm/Tooltip/useTooltip.js +38 -50
- 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 +3 -3
- package/build/esm/hooks/useAutoFocus.js.map +1 -1
- package/build/esm/hooks/useChildrenCounter.d.ts +7 -7
- package/build/esm/hooks/useChildrenCounter.js +6 -8
- package/build/esm/hooks/useChildrenCounter.js.map +1 -1
- package/build/esm/hooks/useControlledState.d.ts +3 -3
- package/build/esm/hooks/useControlledState.js +6 -16
- package/build/esm/hooks/useControlledState.js.map +1 -1
- package/build/esm/hooks/useFocusReturn.d.ts +2 -2
- package/build/esm/hooks/useFocusReturn.js +8 -12
- package/build/esm/hooks/useFocusReturn.js.map +1 -1
- package/build/esm/hooks/useFocusState.d.ts +11 -11
- package/build/esm/hooks/useFocusState.js +9 -15
- package/build/esm/hooks/useFocusState.js.map +1 -1
- package/build/esm/hooks/useGestureHandlers.d.ts +52 -52
- package/build/esm/hooks/useGestureHandlers.js +80 -100
- package/build/esm/hooks/useGestureHandlers.js.map +1 -1
- package/build/esm/hooks/useMeasure.d.ts +7 -7
- package/build/esm/hooks/useMeasure.js +7 -15
- package/build/esm/hooks/useMeasure.js.map +1 -1
- package/build/esm/hooks/useOnClickOutside.d.ts +2 -2
- package/build/esm/hooks/useOnClickOutside.js +4 -6
- package/build/esm/hooks/useOnClickOutside.js.map +1 -1
- package/build/esm/hooks/useOnKeyDown.d.ts +1 -1
- package/build/esm/hooks/useOnKeyDown.js +3 -4
- package/build/esm/hooks/useOnKeyDown.js.map +1 -1
- package/build/esm/hooks/useReducerMachine.d.ts +24 -24
- package/build/esm/hooks/useReducerMachine.js +15 -26
- package/build/esm/hooks/useReducerMachine.js.map +1 -1
- package/build/esm/hooks/useRemoveBodyScroll.d.ts +2 -2
- package/build/esm/hooks/useRemoveBodyScroll.js +9 -14
- package/build/esm/hooks/useRemoveBodyScroll.js.map +1 -1
- package/build/esm/hooks/useScope.d.ts +11 -11
- package/build/esm/hooks/useScope.js +12 -14
- package/build/esm/hooks/useScope.js.map +1 -1
- package/build/esm/hooks/useThrottle.d.ts +1 -1
- package/build/esm/hooks/useThrottle.js +5 -10
- package/build/esm/hooks/useThrottle.js.map +1 -1
- package/build/esm/index.d.ts +15 -15
- package/build/esm/index.js +4 -2
- package/build/esm/index.js.map +1 -1
- package/build/esm/styles.d.js +2 -0
- package/build/esm/styles.d.js.map +1 -0
- package/build/esm/utils/assign-ref.d.ts +3 -3
- package/build/esm/utils/assign-ref.js +3 -5
- package/build/esm/utils/assign-ref.js.map +1 -1
- 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 +13 -20
- 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 +5 -10
- 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 +0 -1
- package/build/esm/utils/get-circular-index.js.map +1 -1
- 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 +6 -6
- 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 +2 -5
- package/build/esm/utils/rubber-band-clamp.js.map +1 -1
- package/build/esm/utils/use-stable-callback.d.ts +16 -16
- package/build/esm/utils/use-stable-callback.js +24 -26
- 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 +2 -5
- package/build/esm/utils/wrap-event.js.map +1 -1
- package/build/tsconfig-build.tsbuildinfo +1 -1
- package/package.json +7 -11
- 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 +166 -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 +110 -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 +448 -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 +55 -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 +82 -83
- package/src/Menu/MenuButton.tsx +83 -83
- package/src/Menu/MenuComplex.story.tsx +58 -58
- package/src/Menu/MenuItem.tsx +87 -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 +262 -258
- package/src/Modal/Modal.tsx +48 -48
- package/src/Modal/ModalBackdrop.tsx +78 -78
- package/src/Modal/NavDrawer.story.tsx +161 -158
- package/src/Modal/index.ts +2 -2
- package/src/Modal/styles.css +46 -46
- package/src/Popper/Popper.story.tsx +279 -263
- package/src/Popper/Popper.tsx +1 -1
- 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/RadioButton/RadioButton.story.tsx +78 -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 +1115 -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 +53 -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/useControlledState.ts +1 -6
- package/src/hooks/useFocusReturn.ts +43 -43
- package/src/hooks/useFocusState.ts +30 -30
- package/src/hooks/useGestureHandlers.ts +282 -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 +38 -39
- package/src/hooks/useScope.ts +52 -52
- package/src/hooks/useThrottle.ts +19 -19
- package/src/index.ts +20 -20
- package/src/styles.d.ts +1 -0
- 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 +82 -78
- package/src/utils/rubber-band-clamp.ts +25 -25
- package/src/utils/use-stable-callback.ts +57 -58
- package/src/utils/wrap-event.ts +22 -22
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { ElementType, HTMLAttributes, KeyboardEvent, MouseEvent, ReactNode } from 'react';
|
|
2
|
-
export interface AccordionProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
|
|
3
|
-
as?: ElementType<any>;
|
|
4
|
-
innerAs?: ElementType<any>;
|
|
5
|
-
children?: ReactNode;
|
|
6
|
-
expandedIndex?: number;
|
|
7
|
-
onChange?: (e: KeyboardEvent<HTMLDivElement> | MouseEvent<HTMLDivElement>, index: number) => void;
|
|
8
|
-
}
|
|
9
|
-
export declare const Accordion: import("react").ForwardRefExoticComponent<AccordionProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
1
|
+
import type { ElementType, HTMLAttributes, KeyboardEvent, MouseEvent, ReactNode } from 'react';
|
|
2
|
+
export interface AccordionProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
|
|
3
|
+
as?: ElementType<any>;
|
|
4
|
+
innerAs?: ElementType<any>;
|
|
5
|
+
children?: ReactNode;
|
|
6
|
+
expandedIndex?: number;
|
|
7
|
+
onChange?: (e: KeyboardEvent<HTMLDivElement> | MouseEvent<HTMLDivElement>, index: number) => void;
|
|
8
|
+
}
|
|
9
|
+
export declare const Accordion: import("react").ForwardRefExoticComponent<AccordionProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -1,42 +1,33 @@
|
|
|
1
|
-
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
-
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
-
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
4
|
-
var _excluded = ["as", "expandedIndex", "onChange"];
|
|
5
1
|
import { forwardRef, useRef, useState } from 'react';
|
|
6
2
|
import { AccordionProvider } from './context';
|
|
7
3
|
import { useScope } from '../hooks';
|
|
8
4
|
import { assignMultipleRefs } from '../utils';
|
|
9
5
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
|
-
export
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
childrenHeaderHasFocus: childrenHeaderHasFocus,
|
|
27
|
-
setChildrenHeaderHasFocus: setChildrenHeaderHasFocus,
|
|
28
|
-
scope: scope,
|
|
29
|
-
expandedIndex: expandedIndex,
|
|
30
|
-
onChange: onChange
|
|
6
|
+
export const Accordion = /*#__PURE__*/forwardRef(function Accordion(props, forwardedRef) {
|
|
7
|
+
const {
|
|
8
|
+
as: Comp = 'div',
|
|
9
|
+
expandedIndex = -1,
|
|
10
|
+
onChange,
|
|
11
|
+
...otherProps
|
|
12
|
+
} = props;
|
|
13
|
+
const [childrenHeaderHasFocus, setChildrenHeaderHasFocus] = useState(false);
|
|
14
|
+
const ref = useRef(null);
|
|
15
|
+
const scope = useScope(ref);
|
|
16
|
+
const contextValue = {
|
|
17
|
+
childrenHeaderHasFocus,
|
|
18
|
+
setChildrenHeaderHasFocus,
|
|
19
|
+
scope,
|
|
20
|
+
expandedIndex,
|
|
21
|
+
onChange
|
|
31
22
|
};
|
|
32
23
|
return /*#__PURE__*/_jsx(AccordionProvider, {
|
|
33
24
|
value: contextValue,
|
|
34
|
-
children: /*#__PURE__*/_jsx(Comp,
|
|
35
|
-
ref: assignMultipleRefs(forwardedRef, ref)
|
|
36
|
-
|
|
25
|
+
children: /*#__PURE__*/_jsx(Comp, {
|
|
26
|
+
ref: assignMultipleRefs(forwardedRef, ref),
|
|
27
|
+
...otherProps,
|
|
37
28
|
"data-accordion-root": "",
|
|
38
29
|
"data-children-has-focus": childrenHeaderHasFocus
|
|
39
|
-
})
|
|
30
|
+
})
|
|
40
31
|
});
|
|
41
32
|
});
|
|
42
33
|
//# sourceMappingURL=Accordion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Accordion.js","names":["forwardRef","useRef","useState","AccordionProvider","useScope","assignMultipleRefs","Accordion","props","forwardedRef","as","Comp","expandedIndex","onChange","otherProps","childrenHeaderHasFocus","setChildrenHeaderHasFocus","ref","scope","contextValue"],"sources":["../../../src/Accordion/Accordion.tsx"],"sourcesContent":["import type {\
|
|
1
|
+
{"version":3,"file":"Accordion.js","names":["forwardRef","useRef","useState","AccordionProvider","useScope","assignMultipleRefs","jsx","_jsx","Accordion","props","forwardedRef","as","Comp","expandedIndex","onChange","otherProps","childrenHeaderHasFocus","setChildrenHeaderHasFocus","ref","scope","contextValue","value","children"],"sources":["../../../src/Accordion/Accordion.tsx"],"sourcesContent":["import type {\n ElementType,\n HTMLAttributes,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n} from 'react';\nimport { forwardRef, useRef, useState } from 'react';\n\nimport type { AccordionContextProps } from './context';\nimport { AccordionProvider } from './context';\nimport { useScope } from '../hooks';\nimport { assignMultipleRefs } from '../utils';\n\nexport interface AccordionProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n as?: ElementType<any>;\n innerAs?: ElementType<any>;\n children?: ReactNode;\n expandedIndex?: number;\n onChange?: (\n e: KeyboardEvent<HTMLDivElement> | MouseEvent<HTMLDivElement>,\n index: number\n ) => void;\n}\n\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(\n function Accordion(props, forwardedRef) {\n const {\n as: Comp = 'div',\n expandedIndex = -1,\n onChange,\n ...otherProps\n } = props;\n const [childrenHeaderHasFocus, setChildrenHeaderHasFocus] = useState(false);\n const ref = useRef<HTMLDivElement | null>(null);\n\n const scope = useScope(ref);\n\n const contextValue: AccordionContextProps = {\n childrenHeaderHasFocus,\n setChildrenHeaderHasFocus,\n scope,\n expandedIndex,\n onChange,\n };\n\n return (\n <AccordionProvider value={contextValue}>\n <Comp\n ref={assignMultipleRefs(forwardedRef, ref)}\n {...otherProps}\n data-accordion-root=\"\"\n data-children-has-focus={childrenHeaderHasFocus}\n />\n </AccordionProvider>\n );\n }\n);\n"],"mappings":"AAOA,SAASA,UAAU,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAGpD,SAASC,iBAAiB,QAAQ,WAAW;AAC7C,SAASC,QAAQ,QAAQ,UAAU;AACnC,SAASC,kBAAkB,QAAQ,UAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAc9C,OAAO,MAAMC,SAAS,gBAAGR,UAAU,CACjC,SAASQ,SAASA,CAACC,KAAK,EAAEC,YAAY,EAAE;EACtC,MAAM;IACJC,EAAE,EAAEC,IAAI,GAAG,KAAK;IAChBC,aAAa,GAAG,CAAC,CAAC;IAClBC,QAAQ;IACR,GAAGC;EACL,CAAC,GAAGN,KAAK;EACT,MAAM,CAACO,sBAAsB,EAAEC,yBAAyB,CAAC,GAAGf,QAAQ,CAAC,KAAK,CAAC;EAC3E,MAAMgB,GAAG,GAAGjB,MAAM,CAAwB,IAAI,CAAC;EAE/C,MAAMkB,KAAK,GAAGf,QAAQ,CAACc,GAAG,CAAC;EAE3B,MAAME,YAAmC,GAAG;IAC1CJ,sBAAsB;IACtBC,yBAAyB;IACzBE,KAAK;IACLN,aAAa;IACbC;EACF,CAAC;EAED,oBACEP,IAAA,CAACJ,iBAAiB;IAACkB,KAAK,EAAED,YAAa;IAAAE,QAAA,eACrCf,IAAA,CAACK,IAAI;MACHM,GAAG,EAAEb,kBAAkB,CAACK,YAAY,EAAEQ,GAAG,CAAE;MAAA,GACvCH,UAAU;MACd,uBAAoB,EAAE;MACtB,2BAAyBC;IAAuB,CACjD;EAAC,CACe,CAAC;AAExB,CACF,CAAC","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { HTMLAttributes, ElementType } from 'react';
|
|
2
|
-
export interface AccordionBodyProps extends HTMLAttributes<HTMLDivElement> {
|
|
3
|
-
as?: ElementType<any>;
|
|
4
|
-
innerAs?: ElementType<any>;
|
|
5
|
-
}
|
|
6
|
-
export declare const AccordionBody: import("react").ForwardRefExoticComponent<AccordionBodyProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
1
|
+
import type { HTMLAttributes, ElementType } from 'react';
|
|
2
|
+
export interface AccordionBodyProps extends HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
as?: ElementType<any>;
|
|
4
|
+
innerAs?: ElementType<any>;
|
|
5
|
+
}
|
|
6
|
+
export declare const AccordionBody: import("react").ForwardRefExoticComponent<AccordionBodyProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -1,50 +1,36 @@
|
|
|
1
|
-
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
-
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
-
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
4
|
-
var _excluded = ["as"];
|
|
5
1
|
import { forwardRef, useState, useEffect, useRef } from 'react';
|
|
6
2
|
import { useAccordionItemContext, useAccordionContext } from './context';
|
|
7
3
|
import { bodyScopeQuery as scopeQuery } from './scopeQuery';
|
|
8
4
|
import { assignMultipleRefs } from '../utils';
|
|
9
5
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
|
-
export
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
var _useState = useState(),
|
|
20
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
21
|
-
index = _useState2[0],
|
|
22
|
-
setIndex = _useState2[1];
|
|
23
|
-
|
|
6
|
+
export const AccordionBody = /*#__PURE__*/forwardRef(function AccordionBody(props, forwardedRef) {
|
|
7
|
+
const {
|
|
8
|
+
as: Comp = 'div',
|
|
9
|
+
...otherProps
|
|
10
|
+
} = props;
|
|
11
|
+
const accordionItemContext = useAccordionItemContext();
|
|
12
|
+
const accordionContext = useAccordionContext();
|
|
13
|
+
const ref = useRef(null);
|
|
14
|
+
const [index, setIndex] = useState();
|
|
24
15
|
if (!accordionItemContext) {
|
|
25
16
|
throw new Error('Missing parent <Accordion /> component');
|
|
26
17
|
}
|
|
27
|
-
|
|
28
|
-
useEffect(function () {
|
|
18
|
+
useEffect(() => {
|
|
29
19
|
if (accordionContext) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return e === ref.current;
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
setIndex(_index);
|
|
20
|
+
const allHeaders = accordionContext.scope.current.queryAllNodes(scopeQuery);
|
|
21
|
+
const index = allHeaders.findIndex(e => e === ref.current);
|
|
22
|
+
setIndex(index);
|
|
37
23
|
}
|
|
38
24
|
}, [accordionContext]);
|
|
39
|
-
|
|
40
|
-
return /*#__PURE__*/_jsx(Comp,
|
|
41
|
-
ref: assignMultipleRefs(forwardedRef, ref)
|
|
42
|
-
|
|
25
|
+
const expanded = Boolean(accordionItemContext.expanded || accordionContext && accordionContext.expandedIndex === index);
|
|
26
|
+
return /*#__PURE__*/_jsx(Comp, {
|
|
27
|
+
ref: assignMultipleRefs(forwardedRef, ref),
|
|
28
|
+
...otherProps,
|
|
43
29
|
"aria-labelledby": accordionItemContext.headerId,
|
|
44
30
|
id: accordionItemContext.bodyId,
|
|
45
31
|
role: "region",
|
|
46
32
|
"data-accordion-body": "",
|
|
47
33
|
hidden: expanded ? undefined : 'hidden'
|
|
48
|
-
})
|
|
34
|
+
});
|
|
49
35
|
});
|
|
50
36
|
//# sourceMappingURL=AccordionBody.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccordionBody.js","names":["forwardRef","useState","useEffect","useRef","useAccordionItemContext","useAccordionContext","bodyScopeQuery","scopeQuery","assignMultipleRefs","AccordionBody","props","forwardedRef","as","Comp","otherProps","accordionItemContext","accordionContext","ref","index","setIndex","Error","allHeaders","scope","current","queryAllNodes","findIndex","e","expanded","Boolean","expandedIndex","headerId","bodyId","undefined"],"sources":["../../../src/Accordion/AccordionBody.tsx"],"sourcesContent":["import type { HTMLAttributes, ElementType } from 'react';\
|
|
1
|
+
{"version":3,"file":"AccordionBody.js","names":["forwardRef","useState","useEffect","useRef","useAccordionItemContext","useAccordionContext","bodyScopeQuery","scopeQuery","assignMultipleRefs","jsx","_jsx","AccordionBody","props","forwardedRef","as","Comp","otherProps","accordionItemContext","accordionContext","ref","index","setIndex","Error","allHeaders","scope","current","queryAllNodes","findIndex","e","expanded","Boolean","expandedIndex","headerId","id","bodyId","role","hidden","undefined"],"sources":["../../../src/Accordion/AccordionBody.tsx"],"sourcesContent":["import type { HTMLAttributes, ElementType } from 'react';\nimport { forwardRef, useState, useEffect, useRef } from 'react';\n\nimport { useAccordionItemContext, useAccordionContext } from './context';\nimport { bodyScopeQuery as scopeQuery } from './scopeQuery';\nimport { assignMultipleRefs } from '../utils';\n\nexport interface AccordionBodyProps extends HTMLAttributes<HTMLDivElement> {\n as?: ElementType<any>;\n innerAs?: ElementType<any>;\n}\n\nexport const AccordionBody = forwardRef<HTMLDivElement, AccordionBodyProps>(\n function AccordionBody(props, forwardedRef) {\n const { as: Comp = 'div', ...otherProps } = props;\n const accordionItemContext = useAccordionItemContext();\n const accordionContext = useAccordionContext();\n const ref = useRef<HTMLDivElement | null>(null);\n const [index, setIndex] = useState<number>();\n\n if (!accordionItemContext) {\n throw new Error('Missing parent <Accordion /> component');\n }\n\n useEffect(() => {\n if (accordionContext) {\n const allHeaders =\n accordionContext.scope.current.queryAllNodes(scopeQuery);\n\n const index = allHeaders.findIndex((e) => e === ref.current);\n setIndex(index);\n }\n }, [accordionContext]);\n\n const expanded = Boolean(\n accordionItemContext.expanded ||\n (accordionContext && accordionContext.expandedIndex === index)\n );\n\n return (\n <Comp\n ref={assignMultipleRefs(forwardedRef, ref)}\n {...otherProps}\n aria-labelledby={accordionItemContext.headerId}\n id={accordionItemContext.bodyId}\n role=\"region\"\n data-accordion-body=\"\"\n hidden={expanded ? undefined : 'hidden'}\n />\n );\n }\n);\n"],"mappings":"AACA,SAASA,UAAU,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAE/D,SAASC,uBAAuB,EAAEC,mBAAmB,QAAQ,WAAW;AACxE,SAASC,cAAc,IAAIC,UAAU,QAAQ,cAAc;AAC3D,SAASC,kBAAkB,QAAQ,UAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAO9C,OAAO,MAAMC,aAAa,gBAAGX,UAAU,CACrC,SAASW,aAAaA,CAACC,KAAK,EAAEC,YAAY,EAAE;EAC1C,MAAM;IAAEC,EAAE,EAAEC,IAAI,GAAG,KAAK;IAAE,GAAGC;EAAW,CAAC,GAAGJ,KAAK;EACjD,MAAMK,oBAAoB,GAAGb,uBAAuB,CAAC,CAAC;EACtD,MAAMc,gBAAgB,GAAGb,mBAAmB,CAAC,CAAC;EAC9C,MAAMc,GAAG,GAAGhB,MAAM,CAAwB,IAAI,CAAC;EAC/C,MAAM,CAACiB,KAAK,EAAEC,QAAQ,CAAC,GAAGpB,QAAQ,CAAS,CAAC;EAE5C,IAAI,CAACgB,oBAAoB,EAAE;IACzB,MAAM,IAAIK,KAAK,CAAC,wCAAwC,CAAC;EAC3D;EAEApB,SAAS,CAAC,MAAM;IACd,IAAIgB,gBAAgB,EAAE;MACpB,MAAMK,UAAU,GACdL,gBAAgB,CAACM,KAAK,CAACC,OAAO,CAACC,aAAa,CAACnB,UAAU,CAAC;MAE1D,MAAMa,KAAK,GAAGG,UAAU,CAACI,SAAS,CAAEC,CAAC,IAAKA,CAAC,KAAKT,GAAG,CAACM,OAAO,CAAC;MAC5DJ,QAAQ,CAACD,KAAK,CAAC;IACjB;EACF,CAAC,EAAE,CAACF,gBAAgB,CAAC,CAAC;EAEtB,MAAMW,QAAQ,GAAGC,OAAO,CACtBb,oBAAoB,CAACY,QAAQ,IAC1BX,gBAAgB,IAAIA,gBAAgB,CAACa,aAAa,KAAKX,KAC5D,CAAC;EAED,oBACEV,IAAA,CAACK,IAAI;IACHI,GAAG,EAAEX,kBAAkB,CAACK,YAAY,EAAEM,GAAG,CAAE;IAAA,GACvCH,UAAU;IACd,mBAAiBC,oBAAoB,CAACe,QAAS;IAC/CC,EAAE,EAAEhB,oBAAoB,CAACiB,MAAO;IAChCC,IAAI,EAAC,QAAQ;IACb,uBAAoB,EAAE;IACtBC,MAAM,EAAEP,QAAQ,GAAGQ,SAAS,GAAG;EAAS,CACzC,CAAC;AAEN,CACF,CAAC","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { HTMLAttributes, ElementType, ReactNode } from 'react';
|
|
2
|
-
export interface AccordionHeaderProps extends HTMLAttributes<HTMLDivElement> {
|
|
3
|
-
as?: ElementType<any>;
|
|
4
|
-
innerAs?: ElementType<any>;
|
|
5
|
-
children?: ReactNode;
|
|
6
|
-
}
|
|
7
|
-
export declare const AccordionHeader: import("react").ForwardRefExoticComponent<AccordionHeaderProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
1
|
+
import type { HTMLAttributes, ElementType, ReactNode } from 'react';
|
|
2
|
+
export interface AccordionHeaderProps extends HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
as?: ElementType<any>;
|
|
4
|
+
innerAs?: ElementType<any>;
|
|
5
|
+
children?: ReactNode;
|
|
6
|
+
}
|
|
7
|
+
export declare const AccordionHeader: import("react").ForwardRefExoticComponent<AccordionHeaderProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -1,67 +1,46 @@
|
|
|
1
|
-
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
-
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
-
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
4
|
-
var _excluded = ["as", "onKeyDown", "onClick", "onFocus", "onBlur"];
|
|
5
1
|
import { forwardRef, useRef, useState, useEffect } from 'react';
|
|
6
2
|
import { wrapEvent, assignMultipleRefs, getCircularIndex } from '../utils';
|
|
7
3
|
import { useAccordionContext, useAccordionItemContext } from './context';
|
|
8
4
|
import { headerScopeQuery as scopeQuery } from './scopeQuery';
|
|
9
5
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
|
-
export
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
var _useState = useState(),
|
|
24
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
25
|
-
index = _useState2[0],
|
|
26
|
-
setIndex = _useState2[1];
|
|
27
|
-
|
|
6
|
+
export const AccordionHeader = /*#__PURE__*/forwardRef(function AccordionHeader(props, forwardedRef) {
|
|
7
|
+
const {
|
|
8
|
+
as: Comp = 'div',
|
|
9
|
+
onKeyDown,
|
|
10
|
+
onClick: onClickProp,
|
|
11
|
+
onFocus,
|
|
12
|
+
onBlur,
|
|
13
|
+
...otherProps
|
|
14
|
+
} = props;
|
|
15
|
+
const accordionContext = useAccordionContext();
|
|
16
|
+
const accordionItemContext = useAccordionItemContext();
|
|
17
|
+
const ref = useRef(null);
|
|
18
|
+
const [index, setIndex] = useState();
|
|
28
19
|
if (!accordionItemContext) {
|
|
29
20
|
throw new Error('Missing parent <Accordion /> component');
|
|
30
21
|
}
|
|
31
|
-
|
|
32
|
-
useEffect(function () {
|
|
22
|
+
useEffect(() => {
|
|
33
23
|
if (accordionContext) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return e === ref.current;
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
setIndex(_index);
|
|
24
|
+
const allHeaders = accordionContext.scope.current.queryAllNodes(scopeQuery) || [];
|
|
25
|
+
const index = allHeaders.findIndex(e => e === ref.current);
|
|
26
|
+
setIndex(index);
|
|
41
27
|
}
|
|
42
28
|
}, [accordionContext]);
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
29
|
+
const onClick = wrapEvent(onClickProp, e => {
|
|
30
|
+
let index = 0;
|
|
46
31
|
if (accordionItemContext.expanded) {
|
|
47
32
|
index = -1;
|
|
48
33
|
} else if (accordionContext) {
|
|
49
|
-
|
|
50
|
-
index = allHeaders.findIndex(
|
|
51
|
-
return e === ref.current;
|
|
52
|
-
});
|
|
53
|
-
|
|
34
|
+
const allHeaders = accordionContext.scope.current.queryAllNodes(scopeQuery) || [];
|
|
35
|
+
index = allHeaders.findIndex(e => e === ref.current);
|
|
54
36
|
if (index === accordionContext.expandedIndex) {
|
|
55
37
|
index = -1;
|
|
56
38
|
}
|
|
57
|
-
|
|
58
39
|
accordionContext.onChange && accordionContext.onChange(e, index);
|
|
59
40
|
}
|
|
60
|
-
|
|
61
41
|
accordionItemContext.onChange && accordionItemContext.onChange(e, index >= 0);
|
|
62
42
|
});
|
|
63
|
-
|
|
64
|
-
var handleKeyDown = function handleKeyDown(e) {
|
|
43
|
+
const handleKeyDown = e => {
|
|
65
44
|
switch (e.key) {
|
|
66
45
|
case 'Enter':
|
|
67
46
|
case ' ':
|
|
@@ -70,7 +49,6 @@ export var AccordionHeader = /*#__PURE__*/forwardRef(function AccordionHeader(pr
|
|
|
70
49
|
e.preventDefault();
|
|
71
50
|
break;
|
|
72
51
|
}
|
|
73
|
-
|
|
74
52
|
case 'ArrowUp':
|
|
75
53
|
case 'ArrowDown':
|
|
76
54
|
case 'Home':
|
|
@@ -79,49 +57,37 @@ export var AccordionHeader = /*#__PURE__*/forwardRef(function AccordionHeader(pr
|
|
|
79
57
|
if (!accordionContext) {
|
|
80
58
|
return;
|
|
81
59
|
}
|
|
82
|
-
|
|
83
|
-
var allHeaders = accordionContext.scope.current.queryAllNodes(scopeQuery);
|
|
60
|
+
const allHeaders = accordionContext.scope.current.queryAllNodes(scopeQuery);
|
|
84
61
|
e.preventDefault();
|
|
85
|
-
|
|
86
62
|
if (allHeaders.length === 0) {
|
|
87
63
|
return;
|
|
88
64
|
}
|
|
89
|
-
|
|
90
|
-
var nextIndex = allHeaders.findIndex(function (e) {
|
|
91
|
-
return e === ref.current;
|
|
92
|
-
});
|
|
93
|
-
|
|
65
|
+
let nextIndex = allHeaders.findIndex(e => e === ref.current);
|
|
94
66
|
switch (e.key) {
|
|
95
67
|
case 'ArrowUp':
|
|
96
68
|
nextIndex += -1;
|
|
97
69
|
break;
|
|
98
|
-
|
|
99
70
|
case 'ArrowDown':
|
|
100
71
|
nextIndex += +1;
|
|
101
72
|
break;
|
|
102
|
-
|
|
103
73
|
case 'Home':
|
|
104
74
|
nextIndex = 0;
|
|
105
75
|
break;
|
|
106
|
-
|
|
107
76
|
case 'End':
|
|
108
77
|
nextIndex = -1;
|
|
109
78
|
break;
|
|
110
|
-
}
|
|
111
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
112
|
-
|
|
79
|
+
}
|
|
113
80
|
|
|
81
|
+
// We're sure it will not be null, because we already checked for allHeaders.length > 0 above
|
|
114
82
|
nextIndex = getCircularIndex(nextIndex, allHeaders.length);
|
|
115
83
|
allHeaders[nextIndex] && allHeaders[nextIndex].focus();
|
|
116
84
|
break;
|
|
117
85
|
}
|
|
118
|
-
|
|
119
86
|
default:
|
|
120
87
|
return;
|
|
121
88
|
}
|
|
122
89
|
};
|
|
123
|
-
|
|
124
|
-
var handleFocus = function handleFocus() {
|
|
90
|
+
const handleFocus = () => {
|
|
125
91
|
if (accordionContext) {
|
|
126
92
|
if (!accordionContext.childrenHeaderHasFocus) {
|
|
127
93
|
// this is needed to avoid rerendering the parent and
|
|
@@ -130,25 +96,22 @@ export var AccordionHeader = /*#__PURE__*/forwardRef(function AccordionHeader(pr
|
|
|
130
96
|
}
|
|
131
97
|
}
|
|
132
98
|
};
|
|
133
|
-
|
|
134
|
-
var handleBlur = function handleBlur(e) {
|
|
99
|
+
const handleBlur = e => {
|
|
135
100
|
if (accordionContext) {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
return header === e.relatedTarget;
|
|
139
|
-
}) >= 0; // only remove focus flag if the focus went to some element
|
|
140
|
-
// that is not an accordion header
|
|
101
|
+
const allHeaders = accordionContext.scope.current.queryAllNodes(scopeQuery);
|
|
102
|
+
const newFocusIsHeader = allHeaders.findIndex(header => header === e.relatedTarget) >= 0;
|
|
141
103
|
|
|
104
|
+
// only remove focus flag if the focus went to some element
|
|
105
|
+
// that is not an accordion header
|
|
142
106
|
if (!newFocusIsHeader) {
|
|
143
107
|
accordionContext.setChildrenHeaderHasFocus(false);
|
|
144
108
|
}
|
|
145
109
|
}
|
|
146
110
|
};
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
}, otherProps), {}, {
|
|
111
|
+
const expanded = Boolean(accordionItemContext.expanded || accordionContext && accordionContext.expandedIndex === index);
|
|
112
|
+
return /*#__PURE__*/_jsx(Comp, {
|
|
113
|
+
ref: assignMultipleRefs(ref, forwardedRef),
|
|
114
|
+
...otherProps,
|
|
152
115
|
id: accordionItemContext.headerId,
|
|
153
116
|
"aria-controls": accordionItemContext.bodyId,
|
|
154
117
|
role: "button",
|
|
@@ -159,6 +122,6 @@ export var AccordionHeader = /*#__PURE__*/forwardRef(function AccordionHeader(pr
|
|
|
159
122
|
onBlur: wrapEvent(onBlur, handleBlur),
|
|
160
123
|
onClick: onClick,
|
|
161
124
|
"aria-expanded": String(expanded)
|
|
162
|
-
})
|
|
125
|
+
});
|
|
163
126
|
});
|
|
164
127
|
//# sourceMappingURL=AccordionHeader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccordionHeader.js","names":["forwardRef","useRef","useState","useEffect","wrapEvent","assignMultipleRefs","getCircularIndex","useAccordionContext","useAccordionItemContext","headerScopeQuery","scopeQuery","AccordionHeader","props","forwardedRef","as","Comp","onKeyDown","onClickProp","onClick","onFocus","onBlur","otherProps","accordionContext","accordionItemContext","ref","index","setIndex","Error","allHeaders","scope","current","queryAllNodes","findIndex","e","expanded","expandedIndex","onChange","handleKeyDown","key","preventDefault","length","nextIndex","focus","handleFocus","childrenHeaderHasFocus","setChildrenHeaderHasFocus","handleBlur","newFocusIsHeader","header","relatedTarget","Boolean","headerId","bodyId","String"],"sources":["../../../src/Accordion/AccordionHeader.tsx"],"sourcesContent":["import type {\r\n HTMLAttributes,\r\n ElementType,\r\n ReactNode,\r\n MouseEvent,\r\n KeyboardEvent,\r\n FocusEvent,\r\n} from 'react';\r\nimport { forwardRef, useRef, useState, useEffect } from 'react';\r\n\r\nimport { wrapEvent, assignMultipleRefs, getCircularIndex } from '../utils';\r\nimport { useAccordionContext, useAccordionItemContext } from './context';\r\nimport { headerScopeQuery as scopeQuery } from './scopeQuery';\r\n\r\nexport interface AccordionHeaderProps extends HTMLAttributes<HTMLDivElement> {\r\n as?: ElementType<any>;\r\n innerAs?: ElementType<any>;\r\n children?: ReactNode;\r\n}\r\n\r\nexport const AccordionHeader = forwardRef<HTMLDivElement, AccordionHeaderProps>(\r\n function AccordionHeader(props, forwardedRef) {\r\n const {\r\n as: Comp = 'div',\r\n onKeyDown,\r\n onClick: onClickProp,\r\n onFocus,\r\n onBlur,\r\n ...otherProps\r\n } = props;\r\n const accordionContext = useAccordionContext();\r\n const accordionItemContext = useAccordionItemContext();\r\n const ref = useRef<HTMLDivElement>();\r\n const [index, setIndex] = useState<number | undefined>();\r\n\r\n if (!accordionItemContext) {\r\n throw new Error('Missing parent <Accordion /> component');\r\n }\r\n\r\n useEffect(() => {\r\n if (accordionContext) {\r\n const allHeaders =\r\n accordionContext.scope.current.queryAllNodes(scopeQuery) || [];\r\n\r\n const index = allHeaders.findIndex((e) => e === ref.current);\r\n setIndex(index);\r\n }\r\n }, [accordionContext]);\r\n\r\n const onClick = wrapEvent(onClickProp, (e: MouseEvent<HTMLDivElement>) => {\r\n let index = 0;\r\n if (accordionItemContext.expanded) {\r\n index = -1;\r\n } else if (accordionContext) {\r\n const allHeaders =\r\n accordionContext.scope.current.queryAllNodes(scopeQuery) || [];\r\n\r\n index = allHeaders.findIndex((e) => e === ref.current);\r\n if (index === accordionContext.expandedIndex) {\r\n index = -1;\r\n }\r\n accordionContext.onChange && accordionContext.onChange(e, index);\r\n }\r\n\r\n accordionItemContext.onChange &&\r\n accordionItemContext.onChange(e, index >= 0);\r\n });\r\n\r\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\r\n switch (e.key) {\r\n case 'Enter':\r\n case ' ': {\r\n onClick(e as unknown as MouseEvent<HTMLDivElement>);\r\n e.preventDefault();\r\n break;\r\n }\r\n case 'ArrowUp':\r\n case 'ArrowDown':\r\n case 'Home':\r\n case 'End': {\r\n if (!accordionContext) {\r\n return;\r\n }\r\n const allHeaders =\r\n accordionContext.scope.current.queryAllNodes(scopeQuery);\r\n\r\n e.preventDefault();\r\n\r\n if (allHeaders.length === 0) {\r\n return;\r\n }\r\n\r\n let nextIndex = allHeaders.findIndex((e) => e === ref.current);\r\n switch (e.key) {\r\n case 'ArrowUp':\r\n nextIndex += -1;\r\n break;\r\n case 'ArrowDown':\r\n nextIndex += +1;\r\n break;\r\n case 'Home':\r\n nextIndex = 0;\r\n break;\r\n case 'End':\r\n nextIndex = -1;\r\n break;\r\n }\r\n\r\n // We're sure it will not be null, because we already checked for allHeaders.length > 0 above\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n nextIndex = getCircularIndex(nextIndex, allHeaders.length)!;\r\n allHeaders[nextIndex] && allHeaders[nextIndex].focus();\r\n break;\r\n }\r\n default:\r\n return;\r\n }\r\n };\r\n\r\n const handleFocus = () => {\r\n if (accordionContext) {\r\n if (!accordionContext.childrenHeaderHasFocus) {\r\n // this is needed to avoid rerendering the parent and\r\n // messing up with the internal count for children/parent count\r\n accordionContext.setChildrenHeaderHasFocus(true);\r\n }\r\n }\r\n };\r\n\r\n const handleBlur = (e: FocusEvent<HTMLDivElement>) => {\r\n if (accordionContext) {\r\n const allHeaders =\r\n accordionContext.scope.current.queryAllNodes(scopeQuery);\r\n const newFocusIsHeader =\r\n allHeaders.findIndex((header) => header === e.relatedTarget) >= 0;\r\n\r\n // only remove focus flag if the focus went to some element\r\n // that is not an accordion header\r\n if (!newFocusIsHeader) {\r\n accordionContext.setChildrenHeaderHasFocus(false);\r\n }\r\n }\r\n };\r\n\r\n const expanded = Boolean(\r\n accordionItemContext.expanded ||\r\n (accordionContext && accordionContext.expandedIndex === index)\r\n );\r\n\r\n return (\r\n <Comp\r\n ref={assignMultipleRefs(ref, forwardedRef)}\r\n {...otherProps}\r\n id={accordionItemContext.headerId}\r\n aria-controls={accordionItemContext.bodyId}\r\n role=\"button\"\r\n data-accordion-header=\"\"\r\n tabIndex=\"0\"\r\n onKeyDown={wrapEvent(onKeyDown, handleKeyDown)}\r\n onFocus={wrapEvent(onFocus, handleFocus)}\r\n onBlur={wrapEvent(onBlur, handleBlur)}\r\n onClick={onClick}\r\n aria-expanded={String(expanded)}\r\n />\r\n );\r\n }\r\n);\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AccordionHeader.js","names":["forwardRef","useRef","useState","useEffect","wrapEvent","assignMultipleRefs","getCircularIndex","useAccordionContext","useAccordionItemContext","headerScopeQuery","scopeQuery","jsx","_jsx","AccordionHeader","props","forwardedRef","as","Comp","onKeyDown","onClick","onClickProp","onFocus","onBlur","otherProps","accordionContext","accordionItemContext","ref","index","setIndex","Error","allHeaders","scope","current","queryAllNodes","findIndex","e","expanded","expandedIndex","onChange","handleKeyDown","key","preventDefault","length","nextIndex","focus","handleFocus","childrenHeaderHasFocus","setChildrenHeaderHasFocus","handleBlur","newFocusIsHeader","header","relatedTarget","Boolean","id","headerId","bodyId","role","tabIndex","String"],"sources":["../../../src/Accordion/AccordionHeader.tsx"],"sourcesContent":["import type {\n HTMLAttributes,\n ElementType,\n ReactNode,\n MouseEvent,\n KeyboardEvent,\n FocusEvent,\n} from 'react';\nimport { forwardRef, useRef, useState, useEffect } from 'react';\n\nimport { wrapEvent, assignMultipleRefs, getCircularIndex } from '../utils';\nimport { useAccordionContext, useAccordionItemContext } from './context';\nimport { headerScopeQuery as scopeQuery } from './scopeQuery';\n\nexport interface AccordionHeaderProps extends HTMLAttributes<HTMLDivElement> {\n as?: ElementType<any>;\n innerAs?: ElementType<any>;\n children?: ReactNode;\n}\n\nexport const AccordionHeader = forwardRef<HTMLDivElement, AccordionHeaderProps>(\n function AccordionHeader(props, forwardedRef) {\n const {\n as: Comp = 'div',\n onKeyDown,\n onClick: onClickProp,\n onFocus,\n onBlur,\n ...otherProps\n } = props;\n const accordionContext = useAccordionContext();\n const accordionItemContext = useAccordionItemContext();\n const ref = useRef<HTMLDivElement | null>(null);\n const [index, setIndex] = useState<number | undefined>();\n\n if (!accordionItemContext) {\n throw new Error('Missing parent <Accordion /> component');\n }\n\n useEffect(() => {\n if (accordionContext) {\n const allHeaders =\n accordionContext.scope.current.queryAllNodes(scopeQuery) || [];\n\n const index = allHeaders.findIndex((e) => e === ref.current);\n setIndex(index);\n }\n }, [accordionContext]);\n\n const onClick = wrapEvent(onClickProp, (e: MouseEvent<HTMLDivElement>) => {\n let index = 0;\n if (accordionItemContext.expanded) {\n index = -1;\n } else if (accordionContext) {\n const allHeaders =\n accordionContext.scope.current.queryAllNodes(scopeQuery) || [];\n\n index = allHeaders.findIndex((e) => e === ref.current);\n if (index === accordionContext.expandedIndex) {\n index = -1;\n }\n accordionContext.onChange && accordionContext.onChange(e, index);\n }\n\n accordionItemContext.onChange &&\n accordionItemContext.onChange(e, index >= 0);\n });\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n switch (e.key) {\n case 'Enter':\n case ' ': {\n onClick(e as unknown as MouseEvent<HTMLDivElement>);\n e.preventDefault();\n break;\n }\n case 'ArrowUp':\n case 'ArrowDown':\n case 'Home':\n case 'End': {\n if (!accordionContext) {\n return;\n }\n const allHeaders =\n accordionContext.scope.current.queryAllNodes(scopeQuery);\n\n e.preventDefault();\n\n if (allHeaders.length === 0) {\n return;\n }\n\n let nextIndex = allHeaders.findIndex((e) => e === ref.current);\n switch (e.key) {\n case 'ArrowUp':\n nextIndex += -1;\n break;\n case 'ArrowDown':\n nextIndex += +1;\n break;\n case 'Home':\n nextIndex = 0;\n break;\n case 'End':\n nextIndex = -1;\n break;\n }\n\n // We're sure it will not be null, because we already checked for allHeaders.length > 0 above\n nextIndex = getCircularIndex(nextIndex, allHeaders.length)!;\n allHeaders[nextIndex] && allHeaders[nextIndex].focus();\n break;\n }\n default:\n return;\n }\n };\n\n const handleFocus = () => {\n if (accordionContext) {\n if (!accordionContext.childrenHeaderHasFocus) {\n // this is needed to avoid rerendering the parent and\n // messing up with the internal count for children/parent count\n accordionContext.setChildrenHeaderHasFocus(true);\n }\n }\n };\n\n const handleBlur = (e: FocusEvent<HTMLDivElement>) => {\n if (accordionContext) {\n const allHeaders =\n accordionContext.scope.current.queryAllNodes(scopeQuery);\n const newFocusIsHeader =\n allHeaders.findIndex((header) => header === e.relatedTarget) >= 0;\n\n // only remove focus flag if the focus went to some element\n // that is not an accordion header\n if (!newFocusIsHeader) {\n accordionContext.setChildrenHeaderHasFocus(false);\n }\n }\n };\n\n const expanded = Boolean(\n accordionItemContext.expanded ||\n (accordionContext && accordionContext.expandedIndex === index)\n );\n\n return (\n <Comp\n ref={assignMultipleRefs(ref, forwardedRef)}\n {...otherProps}\n id={accordionItemContext.headerId}\n aria-controls={accordionItemContext.bodyId}\n role=\"button\"\n data-accordion-header=\"\"\n tabIndex=\"0\"\n onKeyDown={wrapEvent(onKeyDown, handleKeyDown)}\n onFocus={wrapEvent(onFocus, handleFocus)}\n onBlur={wrapEvent(onBlur, handleBlur)}\n onClick={onClick}\n aria-expanded={String(expanded)}\n />\n );\n }\n);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { HTMLAttributes, ElementType, ReactNode, KeyboardEvent, MouseEvent } from 'react';
|
|
2
|
-
export interface AccordionItemProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
|
|
3
|
-
as?: ElementType<any>;
|
|
4
|
-
innerAs?: ElementType<any>;
|
|
5
|
-
children?: ReactNode;
|
|
6
|
-
expanded?: boolean;
|
|
7
|
-
onChange?: (e: KeyboardEvent<HTMLDivElement> | MouseEvent<HTMLDivElement>, value: boolean) => void;
|
|
8
|
-
}
|
|
9
|
-
export declare const AccordionItem: import("react").ForwardRefExoticComponent<AccordionItemProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
1
|
+
import type { HTMLAttributes, ElementType, ReactNode, KeyboardEvent, MouseEvent } from 'react';
|
|
2
|
+
export interface AccordionItemProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
|
|
3
|
+
as?: ElementType<any>;
|
|
4
|
+
innerAs?: ElementType<any>;
|
|
5
|
+
children?: ReactNode;
|
|
6
|
+
expanded?: boolean;
|
|
7
|
+
onChange?: (e: KeyboardEvent<HTMLDivElement> | MouseEvent<HTMLDivElement>, value: boolean) => void;
|
|
8
|
+
}
|
|
9
|
+
export declare const AccordionItem: import("react").ForwardRefExoticComponent<AccordionItemProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -1,31 +1,28 @@
|
|
|
1
|
-
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
-
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
3
|
-
var _excluded = ["as", "expanded", "onChange"];
|
|
4
1
|
import { Fragment, forwardRef, useId } from 'react';
|
|
5
2
|
import { AccordionItemProvider } from './context';
|
|
6
3
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
onChange: onChange
|
|
4
|
+
export const AccordionItem = /*#__PURE__*/forwardRef(function AccordionItem(props, forwardedRef) {
|
|
5
|
+
const {
|
|
6
|
+
as: Comp = Fragment,
|
|
7
|
+
expanded = false,
|
|
8
|
+
onChange,
|
|
9
|
+
...otherProps
|
|
10
|
+
} = props;
|
|
11
|
+
const id = useId();
|
|
12
|
+
const headerId = id ? `accordion-header-${id}` : undefined;
|
|
13
|
+
const bodyId = id ? `accordion-body-${id}` : undefined;
|
|
14
|
+
const contextValue = {
|
|
15
|
+
headerId,
|
|
16
|
+
bodyId,
|
|
17
|
+
expanded,
|
|
18
|
+
onChange
|
|
23
19
|
};
|
|
24
20
|
return /*#__PURE__*/_jsx(AccordionItemProvider, {
|
|
25
21
|
value: contextValue,
|
|
26
|
-
children: /*#__PURE__*/_jsx(Comp,
|
|
27
|
-
ref: forwardedRef
|
|
28
|
-
|
|
22
|
+
children: /*#__PURE__*/_jsx(Comp, {
|
|
23
|
+
ref: forwardedRef,
|
|
24
|
+
...otherProps
|
|
25
|
+
})
|
|
29
26
|
});
|
|
30
27
|
});
|
|
31
28
|
//# sourceMappingURL=AccordionItem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccordionItem.js","names":["Fragment","forwardRef","useId","AccordionItemProvider","AccordionItem","props","forwardedRef","as","Comp","expanded","onChange","otherProps","id","headerId","undefined","bodyId","contextValue"],"sources":["../../../src/Accordion/AccordionItem.tsx"],"sourcesContent":["import type {\
|
|
1
|
+
{"version":3,"file":"AccordionItem.js","names":["Fragment","forwardRef","useId","AccordionItemProvider","jsx","_jsx","AccordionItem","props","forwardedRef","as","Comp","expanded","onChange","otherProps","id","headerId","undefined","bodyId","contextValue","value","children","ref"],"sources":["../../../src/Accordion/AccordionItem.tsx"],"sourcesContent":["import type {\n HTMLAttributes,\n ElementType,\n ReactNode,\n KeyboardEvent,\n MouseEvent,\n} from 'react';\nimport { Fragment, forwardRef, useId } from 'react';\n\nimport type { AccordionItemContextProps } from './context';\nimport { AccordionItemProvider } from './context';\n\nexport interface AccordionItemProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n as?: ElementType<any>;\n innerAs?: ElementType<any>;\n children?: ReactNode;\n expanded?: boolean;\n onChange?: (\n e: KeyboardEvent<HTMLDivElement> | MouseEvent<HTMLDivElement>,\n value: boolean\n ) => void;\n}\n\nexport const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(\n function AccordionItem(props, forwardedRef) {\n const {\n as: Comp = Fragment,\n expanded = false,\n onChange,\n ...otherProps\n } = props;\n const id = useId();\n\n const headerId = id ? `accordion-header-${id}` : undefined;\n const bodyId = id ? `accordion-body-${id}` : undefined;\n const contextValue: AccordionItemContextProps = {\n headerId,\n bodyId,\n expanded,\n onChange,\n };\n\n return (\n <AccordionItemProvider value={contextValue}>\n <Comp ref={forwardedRef} {...otherProps} />\n </AccordionItemProvider>\n );\n }\n);\n"],"mappings":"AAOA,SAASA,QAAQ,EAAEC,UAAU,EAAEC,KAAK,QAAQ,OAAO;AAGnD,SAASC,qBAAqB,QAAQ,WAAW;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAclD,OAAO,MAAMC,aAAa,gBAAGL,UAAU,CACrC,SAASK,aAAaA,CAACC,KAAK,EAAEC,YAAY,EAAE;EAC1C,MAAM;IACJC,EAAE,EAAEC,IAAI,GAAGV,QAAQ;IACnBW,QAAQ,GAAG,KAAK;IAChBC,QAAQ;IACR,GAAGC;EACL,CAAC,GAAGN,KAAK;EACT,MAAMO,EAAE,GAAGZ,KAAK,CAAC,CAAC;EAElB,MAAMa,QAAQ,GAAGD,EAAE,GAAG,oBAAoBA,EAAE,EAAE,GAAGE,SAAS;EAC1D,MAAMC,MAAM,GAAGH,EAAE,GAAG,kBAAkBA,EAAE,EAAE,GAAGE,SAAS;EACtD,MAAME,YAAuC,GAAG;IAC9CH,QAAQ;IACRE,MAAM;IACNN,QAAQ;IACRC;EACF,CAAC;EAED,oBACEP,IAAA,CAACF,qBAAqB;IAACgB,KAAK,EAAED,YAAa;IAAAE,QAAA,eACzCf,IAAA,CAACK,IAAI;MAACW,GAAG,EAAEb,YAAa;MAAA,GAAKK;IAAU,CAAG;EAAC,CACtB,CAAC;AAE5B,CACF,CAAC","ignoreList":[]}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import type { KeyboardEvent, MouseEvent } from 'react';
|
|
2
|
-
import type { Scope } from '../hooks/useScope';
|
|
3
|
-
export interface AccordionContextProps {
|
|
4
|
-
childrenHeaderHasFocus: boolean;
|
|
5
|
-
setChildrenHeaderHasFocus: (value: boolean) => void;
|
|
6
|
-
scope: Scope<HTMLElement>;
|
|
7
|
-
expandedIndex: number;
|
|
8
|
-
onChange?: (e: KeyboardEvent<HTMLDivElement> | MouseEvent<HTMLDivElement>, index: number) => void;
|
|
9
|
-
}
|
|
10
|
-
export declare const AccordionProvider: import("react").Provider<AccordionContextProps | null>;
|
|
11
|
-
export declare const useAccordionContext: () => AccordionContextProps | null;
|
|
12
|
-
export interface AccordionItemContextProps {
|
|
13
|
-
headerId: string | undefined;
|
|
14
|
-
bodyId: string | undefined;
|
|
15
|
-
expanded: boolean;
|
|
16
|
-
onChange?: (e: KeyboardEvent<HTMLDivElement> | MouseEvent<HTMLDivElement>, value: boolean) => void;
|
|
17
|
-
}
|
|
18
|
-
export declare const AccordionItemProvider: import("react").Provider<AccordionItemContextProps | null>;
|
|
19
|
-
export declare const useAccordionItemContext: () => AccordionItemContextProps | null;
|
|
1
|
+
import type { KeyboardEvent, MouseEvent } from 'react';
|
|
2
|
+
import type { Scope } from '../hooks/useScope';
|
|
3
|
+
export interface AccordionContextProps {
|
|
4
|
+
childrenHeaderHasFocus: boolean;
|
|
5
|
+
setChildrenHeaderHasFocus: (value: boolean) => void;
|
|
6
|
+
scope: Scope<HTMLElement>;
|
|
7
|
+
expandedIndex: number;
|
|
8
|
+
onChange?: (e: KeyboardEvent<HTMLDivElement> | MouseEvent<HTMLDivElement>, index: number) => void;
|
|
9
|
+
}
|
|
10
|
+
export declare const AccordionProvider: import("react").Provider<AccordionContextProps | null>;
|
|
11
|
+
export declare const useAccordionContext: () => AccordionContextProps | null;
|
|
12
|
+
export interface AccordionItemContextProps {
|
|
13
|
+
headerId: string | undefined;
|
|
14
|
+
bodyId: string | undefined;
|
|
15
|
+
expanded: boolean;
|
|
16
|
+
onChange?: (e: KeyboardEvent<HTMLDivElement> | MouseEvent<HTMLDivElement>, value: boolean) => void;
|
|
17
|
+
}
|
|
18
|
+
export declare const AccordionItemProvider: import("react").Provider<AccordionItemContextProps | null>;
|
|
19
|
+
export declare const useAccordionItemContext: () => AccordionItemContextProps | null;
|