@basic-ui/core 0.0.50 → 0.0.52
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 +106 -92
- package/build/cjs/index.js.map +1 -1
- package/build/esm/Accordion/Accordion.d.ts +9 -9
- package/build/esm/Accordion/Accordion.js.map +1 -1
- package/build/esm/Accordion/AccordionBody.d.ts +6 -6
- package/build/esm/Accordion/AccordionBody.js.map +1 -1
- package/build/esm/Accordion/AccordionHeader.d.ts +7 -7
- package/build/esm/Accordion/AccordionHeader.js.map +1 -1
- package/build/esm/Accordion/AccordionItem.d.ts +9 -9
- package/build/esm/Accordion/AccordionItem.js.map +1 -1
- package/build/esm/Accordion/context.d.ts +19 -19
- package/build/esm/Accordion/context.js.map +1 -1
- package/build/esm/Accordion/index.d.ts +4 -4
- package/build/esm/Accordion/index.js.map +1 -1
- package/build/esm/Accordion/scopeQuery.d.ts +2 -2
- package/build/esm/Accordion/scopeQuery.js.map +1 -1
- package/build/esm/CheckBox/CheckBox.d.ts +7 -7
- package/build/esm/CheckBox/CheckBox.js.map +1 -1
- package/build/esm/CheckBox/index.d.ts +1 -1
- package/build/esm/CheckBox/index.js.map +1 -1
- package/build/esm/ComboBox/Combobox.d.ts +18 -18
- package/build/esm/ComboBox/Combobox.js.map +1 -1
- package/build/esm/ComboBox/ComboboxButton.d.ts +9 -9
- package/build/esm/ComboBox/ComboboxButton.js.map +1 -1
- package/build/esm/ComboBox/ComboboxInput.d.ts +17 -17
- package/build/esm/ComboBox/ComboboxInput.js.map +1 -1
- package/build/esm/ComboBox/ComboboxLabel.d.ts +7 -7
- package/build/esm/ComboBox/ComboboxLabel.js.map +1 -1
- package/build/esm/ComboBox/ComboboxList.d.ts +8 -8
- package/build/esm/ComboBox/ComboboxList.js.map +1 -1
- package/build/esm/ComboBox/ComboboxOption.d.ts +11 -11
- package/build/esm/ComboBox/ComboboxOption.js.map +1 -1
- package/build/esm/ComboBox/ComboboxPopover.d.ts +9 -9
- package/build/esm/ComboBox/ComboboxPopover.js.map +1 -1
- package/build/esm/ComboBox/cities.d.ts +5 -5
- package/build/esm/ComboBox/cities.js.map +1 -1
- package/build/esm/ComboBox/context.d.ts +30 -30
- package/build/esm/ComboBox/context.js.map +1 -1
- package/build/esm/ComboBox/hooks.d.ts +37 -37
- package/build/esm/ComboBox/hooks.js.map +1 -1
- package/build/esm/ComboBox/index.d.ts +8 -8
- package/build/esm/ComboBox/index.js.map +1 -1
- package/build/esm/ComboBox/makeHash.d.ts +1 -1
- package/build/esm/ComboBox/makeHash.js.map +1 -1
- package/build/esm/ComboBox/scopeQuery.d.ts +1 -1
- package/build/esm/ComboBox/scopeQuery.js.map +1 -1
- package/build/esm/FocusLock/FocusLock.d.ts +9 -9
- package/build/esm/FocusLock/FocusLock.js.map +1 -1
- package/build/esm/FocusLock/index.d.ts +1 -1
- package/build/esm/FocusLock/index.js.map +1 -1
- package/build/esm/FocusLock/tabUtils.d.ts +3 -3
- package/build/esm/FocusLock/tabUtils.js.map +1 -1
- package/build/esm/FocusLock/useFocusLock.d.ts +7 -7
- package/build/esm/FocusLock/useFocusLock.js.map +1 -1
- package/build/esm/List/List.d.ts +7 -7
- package/build/esm/List/List.js.map +1 -1
- package/build/esm/List/ListItem.d.ts +7 -7
- package/build/esm/List/ListItem.js.map +1 -1
- package/build/esm/List/context.d.ts +4 -4
- package/build/esm/List/context.js.map +1 -1
- package/build/esm/List/index.d.ts +2 -2
- package/build/esm/List/index.js.map +1 -1
- package/build/esm/Menu/ContextMenuTrigger.d.ts +11 -11
- package/build/esm/Menu/ContextMenuTrigger.js.map +1 -1
- package/build/esm/Menu/Menu.d.ts +10 -10
- package/build/esm/Menu/Menu.js.map +1 -1
- package/build/esm/Menu/MenuButton.d.ts +11 -11
- package/build/esm/Menu/MenuButton.js.map +1 -1
- package/build/esm/Menu/MenuItem.d.ts +8 -8
- package/build/esm/Menu/MenuItem.js +1 -0
- package/build/esm/Menu/MenuItem.js.map +1 -1
- package/build/esm/Menu/MenuList.d.ts +7 -7
- package/build/esm/Menu/MenuList.js +17 -4
- package/build/esm/Menu/MenuList.js.map +1 -1
- package/build/esm/Menu/MenuPopover.d.ts +8 -8
- package/build/esm/Menu/MenuPopover.js.map +1 -1
- package/build/esm/Menu/context.d.ts +25 -25
- package/build/esm/Menu/context.js.map +1 -1
- package/build/esm/Menu/fixtures/countryList.d.ts +1 -1
- package/build/esm/Menu/fixtures/countryList.js.map +1 -1
- package/build/esm/Menu/index.d.ts +6 -6
- package/build/esm/Menu/index.js.map +1 -1
- package/build/esm/Menu/scope.d.ts +1 -1
- package/build/esm/Menu/scope.js.map +1 -1
- package/build/esm/Modal/Modal.d.ts +9 -9
- package/build/esm/Modal/Modal.js.map +1 -1
- package/build/esm/Modal/ModalBackdrop.d.ts +10 -10
- package/build/esm/Modal/ModalBackdrop.js.map +1 -1
- package/build/esm/Modal/index.d.ts +2 -2
- package/build/esm/Modal/index.js.map +1 -1
- package/build/esm/Popper/Popper.d.ts +35 -35
- package/build/esm/Popper/Popper.js.map +1 -1
- package/build/esm/Popper/PopperArrow.d.ts +6 -6
- package/build/esm/Popper/PopperArrow.js.map +1 -1
- package/build/esm/Popper/context.d.ts +6 -6
- package/build/esm/Popper/context.js.map +1 -1
- package/build/esm/Popper/index.d.ts +3 -3
- package/build/esm/Popper/index.js.map +1 -1
- package/build/esm/Portal/Portal.d.ts +6 -6
- package/build/esm/Portal/Portal.js.map +1 -1
- package/build/esm/Portal/index.d.ts +1 -1
- package/build/esm/Portal/index.js.map +1 -1
- package/build/esm/RadioButton/RadioButton.d.ts +10 -10
- package/build/esm/RadioButton/RadioButton.js.map +1 -1
- package/build/esm/RadioButton/RadioGroup.d.ts +12 -12
- package/build/esm/RadioButton/RadioGroup.js.map +1 -1
- package/build/esm/RadioButton/context.d.ts +9 -9
- package/build/esm/RadioButton/context.js.map +1 -1
- package/build/esm/RadioButton/index.d.ts +2 -2
- package/build/esm/RadioButton/index.js.map +1 -1
- package/build/esm/SkipNav/SkipNav.d.ts +7 -7
- package/build/esm/SkipNav/SkipNav.js.map +1 -1
- package/build/esm/SkipNav/index.d.ts +1 -1
- package/build/esm/SkipNav/index.js.map +1 -1
- package/build/esm/Slider/Slider.d.ts +197 -197
- package/build/esm/Slider/Slider.js +82 -82
- package/build/esm/Slider/Slider.js.map +1 -1
- package/build/esm/Slider/index.d.ts +1 -1
- package/build/esm/Slider/index.js.map +1 -1
- package/build/esm/Spinner/Spinner.d.ts +12 -12
- package/build/esm/Spinner/Spinner.js.map +1 -1
- package/build/esm/Spinner/SpinnerButton.d.ts +8 -8
- package/build/esm/Spinner/SpinnerButton.js.map +1 -1
- package/build/esm/Spinner/context.d.ts +12 -12
- package/build/esm/Spinner/context.js.map +1 -1
- package/build/esm/Spinner/index.d.ts +2 -2
- package/build/esm/Spinner/index.js.map +1 -1
- package/build/esm/Tabs/Tab.d.ts +7 -7
- package/build/esm/Tabs/Tab.js.map +1 -1
- package/build/esm/Tabs/TabList.d.ts +9 -9
- package/build/esm/Tabs/TabList.js.map +1 -1
- package/build/esm/Tabs/TabPanel.d.ts +8 -8
- package/build/esm/Tabs/TabPanel.js.map +1 -1
- package/build/esm/Tabs/TabPanels.d.ts +8 -8
- package/build/esm/Tabs/TabPanels.js.map +1 -1
- package/build/esm/Tabs/Tabs.d.ts +10 -10
- package/build/esm/Tabs/Tabs.js.map +1 -1
- package/build/esm/Tabs/context.d.ts +17 -17
- package/build/esm/Tabs/context.js.map +1 -1
- package/build/esm/Tabs/index.d.ts +5 -5
- package/build/esm/Tabs/index.js.map +1 -1
- package/build/esm/Tabs/scopeQuery.d.ts +1 -1
- package/build/esm/Tabs/scopeQuery.js.map +1 -1
- package/build/esm/Tooltip/Tooltip.d.ts +10 -10
- package/build/esm/Tooltip/Tooltip.js.map +1 -1
- package/build/esm/Tooltip/index.d.ts +1 -1
- package/build/esm/Tooltip/index.js.map +1 -1
- package/build/esm/Tooltip/stateMachine.d.ts +28 -28
- package/build/esm/Tooltip/stateMachine.js.map +1 -1
- package/build/esm/Tooltip/useTooltip.d.ts +10 -10
- package/build/esm/Tooltip/useTooltip.js.map +1 -1
- package/build/esm/hooks/index.d.ts +13 -13
- package/build/esm/hooks/index.js.map +1 -1
- package/build/esm/hooks/useAutoFocus.d.ts +2 -2
- package/build/esm/hooks/useAutoFocus.js.map +1 -1
- package/build/esm/hooks/useChildrenCounter.d.ts +7 -7
- package/build/esm/hooks/useChildrenCounter.js.map +1 -1
- package/build/esm/hooks/useControlledState.d.ts +3 -3
- package/build/esm/hooks/useControlledState.js +1 -1
- package/build/esm/hooks/useControlledState.js.map +1 -1
- package/build/esm/hooks/useFocusReturn.d.ts +2 -2
- package/build/esm/hooks/useFocusReturn.js.map +1 -1
- package/build/esm/hooks/useFocusState.d.ts +11 -11
- package/build/esm/hooks/useFocusState.js.map +1 -1
- package/build/esm/hooks/useGestureHandlers.d.ts +52 -52
- package/build/esm/hooks/useGestureHandlers.js.map +1 -1
- package/build/esm/hooks/useMeasure.d.ts +7 -7
- package/build/esm/hooks/useMeasure.js.map +1 -1
- package/build/esm/hooks/useOnClickOutside.d.ts +2 -2
- package/build/esm/hooks/useOnClickOutside.js.map +1 -1
- package/build/esm/hooks/useOnKeyDown.d.ts +1 -1
- package/build/esm/hooks/useOnKeyDown.js.map +1 -1
- package/build/esm/hooks/useReducerMachine.d.ts +24 -24
- package/build/esm/hooks/useReducerMachine.js.map +1 -1
- package/build/esm/hooks/useRemoveBodyScroll.d.ts +2 -2
- package/build/esm/hooks/useRemoveBodyScroll.js.map +1 -1
- package/build/esm/hooks/useScope.d.ts +11 -11
- package/build/esm/hooks/useScope.js.map +1 -1
- package/build/esm/hooks/useThrottle.d.ts +1 -1
- package/build/esm/hooks/useThrottle.js.map +1 -1
- package/build/esm/index.d.ts +15 -15
- package/build/esm/index.js.map +1 -1
- package/build/esm/utils/assign-ref.d.ts +3 -3
- package/build/esm/utils/assign-ref.js.map +1 -1
- package/build/esm/utils/can-use-dom.d.ts +1 -1
- package/build/esm/utils/can-use-dom.js.map +1 -1
- package/build/esm/utils/clamp.d.ts +1 -1
- package/build/esm/utils/clamp.js.map +1 -1
- package/build/esm/utils/context.d.ts +7 -7
- package/build/esm/utils/context.js.map +1 -1
- package/build/esm/utils/create-subscription.d.ts +4 -4
- package/build/esm/utils/create-subscription.js.map +1 -1
- package/build/esm/utils/get-circular-index.d.ts +1 -1
- package/build/esm/utils/get-circular-index.js.map +1 -1
- package/build/esm/utils/index.d.ts +10 -10
- package/build/esm/utils/index.js.map +1 -1
- package/build/esm/utils/is-right-click.d.ts +6 -6
- package/build/esm/utils/is-right-click.js +4 -4
- package/build/esm/utils/is-right-click.js.map +1 -1
- package/build/esm/utils/owner-document.d.ts +7 -7
- package/build/esm/utils/owner-document.js +5 -5
- package/build/esm/utils/owner-document.js.map +1 -1
- package/build/esm/utils/polymorphic.d.ts +39 -39
- package/build/esm/utils/polymorphic.js.map +1 -1
- package/build/esm/utils/rubber-band-clamp.d.ts +2 -2
- package/build/esm/utils/rubber-band-clamp.js.map +1 -1
- package/build/esm/utils/use-stable-callback.d.ts +16 -16
- package/build/esm/utils/use-stable-callback.js +16 -16
- package/build/esm/utils/use-stable-callback.js.map +1 -1
- package/build/esm/utils/wrap-event.d.ts +3 -3
- package/build/esm/utils/wrap-event.js.map +1 -1
- package/build/tsconfig-build.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/Accordion/Accordion.story.tsx +74 -74
- package/src/Accordion/Accordion.tsx +59 -59
- package/src/Accordion/AccordionBody.tsx +52 -52
- package/src/Accordion/AccordionHeader.tsx +167 -167
- package/src/Accordion/AccordionItem.tsx +50 -50
- package/src/Accordion/context.ts +37 -37
- package/src/Accordion/index.ts +4 -4
- package/src/Accordion/scopeQuery.ts +7 -7
- package/src/Accordion/styles.css +21 -21
- package/src/CheckBox/CheckBox.tsx +41 -41
- package/src/CheckBox/index.ts +1 -1
- package/src/ComboBox/ComboBox.story.tsx +120 -120
- package/src/ComboBox/Combobox.tsx +148 -148
- package/src/ComboBox/ComboboxButton.tsx +61 -61
- package/src/ComboBox/ComboboxInput.tsx +187 -187
- package/src/ComboBox/ComboboxLabel.tsx +33 -33
- package/src/ComboBox/ComboboxList.tsx +47 -47
- package/src/ComboBox/ComboboxOption.tsx +111 -111
- package/src/ComboBox/ComboboxPopover.tsx +64 -64
- package/src/ComboBox/cities.ts +23194 -23194
- package/src/ComboBox/context.ts +35 -35
- package/src/ComboBox/hooks.tsx +451 -451
- package/src/ComboBox/index.ts +8 -8
- package/src/ComboBox/makeHash.ts +19 -19
- package/src/ComboBox/scopeQuery.ts +6 -6
- package/src/ComboBox/styles.css +32 -32
- package/src/FocusLock/FocusLock.tsx +66 -66
- package/src/FocusLock/index.ts +1 -1
- package/src/FocusLock/tabUtils.ts +40 -40
- package/src/FocusLock/useFocusLock.ts +56 -56
- package/src/List/List.story.tsx +18 -18
- package/src/List/List.tsx +17 -17
- package/src/List/ListItem.tsx +23 -23
- package/src/List/context.ts +19 -19
- package/src/List/index.ts +2 -2
- package/src/Menu/ContextMenu.story.tsx +73 -73
- package/src/Menu/ContextMenuTrigger.tsx +76 -76
- package/src/Menu/Menu.story.tsx +160 -160
- package/src/Menu/Menu.tsx +83 -83
- package/src/Menu/MenuButton.tsx +83 -83
- package/src/Menu/MenuComplex.story.tsx +58 -58
- package/src/Menu/MenuItem.tsx +88 -87
- package/src/Menu/MenuList.tsx +254 -243
- package/src/Menu/MenuPopover.tsx +35 -35
- package/src/Menu/context.ts +44 -44
- package/src/Menu/fixtures/countryList.ts +198 -198
- package/src/Menu/index.ts +6 -6
- package/src/Menu/scope.ts +7 -7
- package/src/Menu/styles.css +42 -42
- package/src/Modal/Modal.story.tsx +258 -258
- package/src/Modal/Modal.tsx +48 -48
- package/src/Modal/ModalBackdrop.tsx +78 -78
- package/src/Modal/NavDrawer.story.tsx +158 -158
- package/src/Modal/index.ts +2 -2
- package/src/Modal/styles.css +46 -46
- package/src/Popper/Popper.story.tsx +263 -263
- package/src/Popper/Popper.tsx +154 -154
- package/src/Popper/PopperArrow.tsx +35 -35
- package/src/Popper/context.ts +10 -10
- package/src/Popper/index.ts +3 -3
- package/src/Popper/styles.css +60 -60
- package/src/Portal/Portal.tsx +20 -20
- package/src/Portal/index.ts +1 -1
- package/src/RadioButton/RadioButton.story.tsx +77 -77
- package/src/RadioButton/RadioButton.tsx +55 -55
- package/src/RadioButton/RadioGroup.tsx +60 -60
- package/src/RadioButton/context.ts +17 -17
- package/src/RadioButton/index.ts +2 -2
- package/src/SkipNav/SkipNav.tsx +16 -16
- package/src/SkipNav/index.tsx +1 -1
- package/src/Slider/Slider.story.tsx +45 -45
- package/src/Slider/Slider.tsx +1120 -1120
- package/src/Slider/index.ts +1 -1
- package/src/Slider/styles.css +131 -131
- package/src/Spinner/Spinner.story.tsx +31 -31
- package/src/Spinner/Spinner.tsx +117 -117
- package/src/Spinner/SpinnerButton.tsx +54 -54
- package/src/Spinner/context.ts +20 -20
- package/src/Spinner/index.ts +2 -2
- package/src/Spinner/styles.css +23 -23
- package/src/Tabs/Tab.story.tsx +80 -80
- package/src/Tabs/Tab.tsx +136 -136
- package/src/Tabs/TabList.tsx +71 -71
- package/src/Tabs/TabPanel.tsx +53 -53
- package/src/Tabs/TabPanels.tsx +30 -30
- package/src/Tabs/Tabs.tsx +46 -46
- package/src/Tabs/context.ts +30 -30
- package/src/Tabs/index.tsx +5 -5
- package/src/Tabs/scopeQuery.ts +6 -6
- package/src/Tooltip/Tooltip.story.tsx +61 -61
- package/src/Tooltip/Tooltip.tsx +50 -50
- package/src/Tooltip/index.ts +1 -1
- package/src/Tooltip/stateMachine.ts +192 -192
- package/src/Tooltip/styles.css +17 -17
- package/src/Tooltip/useTooltip.ts +136 -136
- package/src/hooks/index.ts +13 -13
- package/src/hooks/useAutoFocus.ts +22 -22
- package/src/hooks/useChildrenCounter.ts +51 -51
- package/src/hooks/useControlledState.ts +3 -3
- package/src/hooks/useFocusReturn.ts +43 -43
- package/src/hooks/useFocusState.ts +30 -30
- package/src/hooks/useGestureHandlers.ts +286 -286
- package/src/hooks/useMeasure.ts +33 -33
- package/src/hooks/useOnClickOutside.ts +32 -32
- package/src/hooks/useOnKeyDown.ts +19 -19
- package/src/hooks/useReducerMachine.ts +60 -60
- package/src/hooks/useRemoveBodyScroll.ts +39 -39
- package/src/hooks/useScope.ts +52 -52
- package/src/hooks/useThrottle.ts +19 -19
- package/src/index.ts +20 -20
- package/src/utils/assign-ref.ts +27 -27
- package/src/utils/can-use-dom.ts +7 -7
- package/src/utils/clamp.ts +3 -3
- package/src/utils/context.tsx +48 -48
- package/src/utils/create-subscription.ts +16 -16
- package/src/utils/get-circular-index.ts +7 -7
- package/src/utils/index.ts +10 -10
- package/src/utils/is-right-click.ts +14 -14
- package/src/utils/owner-document.ts +13 -13
- package/src/utils/polymorphic.ts +78 -78
- package/src/utils/rubber-band-clamp.ts +25 -25
- package/src/utils/use-stable-callback.ts +58 -58
- package/src/utils/wrap-event.ts +22 -22
|
@@ -1,258 +1,258 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
2
|
-
import { useSpring, animated } from 'react-spring';
|
|
3
|
-
|
|
4
|
-
import { Modal, ModalBackdrop } from './';
|
|
5
|
-
import { Portal } from '../Portal';
|
|
6
|
-
import './styles.css';
|
|
7
|
-
|
|
8
|
-
export default {
|
|
9
|
-
title: 'components/Modal',
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
const LoremIpsum = ({ numOfParagraphs = 20 }) => {
|
|
13
|
-
const content = [];
|
|
14
|
-
|
|
15
|
-
for (let i = 0; i < numOfParagraphs; i++) {
|
|
16
|
-
content.push(
|
|
17
|
-
<p key={`paragraph_${i}`}>
|
|
18
|
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
|
|
19
|
-
vestibulum sapien nec mauris placerat, et facilisis massa placerat.
|
|
20
|
-
Curabitur sagittis condimentum lectus vel aliquam. Sed ultrices, metus
|
|
21
|
-
sed suscipit venenatis, metus lectus vestibulum neque, eget sodales
|
|
22
|
-
justo sapien in ante. In a neque mollis, volutpat est a, vehicula lacus.
|
|
23
|
-
Praesent lectus justo, tempor a laoreet in, consectetur nec sapien.
|
|
24
|
-
Phasellus non venenatis erat. Maecenas eget mi sodales, euismod tortor
|
|
25
|
-
vitae, ultricies quam. Sed varius nunc id tincidunt porttitor. Morbi
|
|
26
|
-
lectus massa, malesuada at lorem ut, semper volutpat orci. Donec mauris
|
|
27
|
-
eros, faucibus ut egestas a, ultricies vel tortor. Phasellus mi lectus,
|
|
28
|
-
consectetur a risus at, faucibus porttitor ligula. Maecenas felis eros,
|
|
29
|
-
porttitor vel placerat eget, malesuada ac leo. Cras a eros id dui
|
|
30
|
-
porttitor ullamcorper sit amet quis lorem.
|
|
31
|
-
</p>
|
|
32
|
-
);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
return <>{content}</>;
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
const Wrapper = ({ children }) => {
|
|
39
|
-
return (
|
|
40
|
-
<div style={{ maxWidth: 900, margin: '0 auto' }}>
|
|
41
|
-
<div
|
|
42
|
-
style={{
|
|
43
|
-
boxSizing: 'border-box',
|
|
44
|
-
display: 'flex',
|
|
45
|
-
alignItems: 'flex-start',
|
|
46
|
-
padding: '96px 48px',
|
|
47
|
-
justifyContent: 'space-around',
|
|
48
|
-
width: '100%',
|
|
49
|
-
position: 'relative',
|
|
50
|
-
}}
|
|
51
|
-
>
|
|
52
|
-
<a href="#" onClick={(e) => e.preventDefault()}>
|
|
53
|
-
Link
|
|
54
|
-
</a>
|
|
55
|
-
<div style={{ minHeight: 120, width: 100 }}>{children}</div>
|
|
56
|
-
<a href="#" onClick={(e) => e.preventDefault()}>
|
|
57
|
-
Link
|
|
58
|
-
</a>
|
|
59
|
-
</div>
|
|
60
|
-
<div>
|
|
61
|
-
<LoremIpsum />
|
|
62
|
-
</div>
|
|
63
|
-
<div
|
|
64
|
-
style={{
|
|
65
|
-
boxSizing: 'border-box',
|
|
66
|
-
display: 'flex',
|
|
67
|
-
alignItems: 'flex-start',
|
|
68
|
-
padding: '96px 48px',
|
|
69
|
-
justifyContent: 'space-around',
|
|
70
|
-
width: '100%',
|
|
71
|
-
position: 'relative',
|
|
72
|
-
}}
|
|
73
|
-
>
|
|
74
|
-
<a href="#" onClick={(e) => e.preventDefault()}>
|
|
75
|
-
Link
|
|
76
|
-
</a>
|
|
77
|
-
<div style={{ minHeight: 120, width: 100 }}>{children}</div>
|
|
78
|
-
<a href="#" onClick={(e) => e.preventDefault()}>
|
|
79
|
-
Link
|
|
80
|
-
</a>
|
|
81
|
-
</div>
|
|
82
|
-
</div>
|
|
83
|
-
);
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
const SimpleModalControlledExample = () => {
|
|
87
|
-
const [open, setOpen] = useState(false);
|
|
88
|
-
|
|
89
|
-
const handleClose = () => {
|
|
90
|
-
setOpen(false);
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
return (
|
|
94
|
-
<>
|
|
95
|
-
<button id="open-modal" onClick={() => setOpen(!open)}>
|
|
96
|
-
Open modal
|
|
97
|
-
</button>
|
|
98
|
-
{open && (
|
|
99
|
-
<Portal>
|
|
100
|
-
<ModalBackdrop onClose={handleClose}>
|
|
101
|
-
<Modal trapFocus={true}>
|
|
102
|
-
<button>Start button</button>
|
|
103
|
-
<LoremIpsum />
|
|
104
|
-
<button>End button</button>
|
|
105
|
-
</Modal>
|
|
106
|
-
</ModalBackdrop>
|
|
107
|
-
</Portal>
|
|
108
|
-
)}
|
|
109
|
-
</>
|
|
110
|
-
);
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
const NestedModalControlledExample = () => {
|
|
114
|
-
const [open, setOpen] = useState(false);
|
|
115
|
-
const [open2, setOpen2] = useState(false);
|
|
116
|
-
|
|
117
|
-
return (
|
|
118
|
-
<>
|
|
119
|
-
<button id="open-modal" onClick={() => setOpen(!open)}>
|
|
120
|
-
Open modal
|
|
121
|
-
</button>
|
|
122
|
-
{open && (
|
|
123
|
-
<Portal>
|
|
124
|
-
<ModalBackdrop onClose={() => setOpen(false)}>
|
|
125
|
-
<Modal trapFocus={true}>
|
|
126
|
-
<button id="open-another-modal" onClick={() => setOpen2(true)}>
|
|
127
|
-
Open another modal
|
|
128
|
-
</button>
|
|
129
|
-
{open2 && (
|
|
130
|
-
<Portal>
|
|
131
|
-
<ModalBackdrop onClose={() => setOpen2(false)}>
|
|
132
|
-
<Modal trapFocus={true}>
|
|
133
|
-
<LoremIpsum numOfParagraphs={1} />
|
|
134
|
-
<button onClick={() => setOpen2(false)}>Close</button>
|
|
135
|
-
</Modal>
|
|
136
|
-
</ModalBackdrop>
|
|
137
|
-
</Portal>
|
|
138
|
-
)}
|
|
139
|
-
<LoremIpsum numOfParagraphs={1} />
|
|
140
|
-
<button
|
|
141
|
-
autoFocus
|
|
142
|
-
id="close-button"
|
|
143
|
-
onClick={() => setOpen(false)}
|
|
144
|
-
>
|
|
145
|
-
Close
|
|
146
|
-
</button>
|
|
147
|
-
</Modal>
|
|
148
|
-
</ModalBackdrop>
|
|
149
|
-
</Portal>
|
|
150
|
-
)}
|
|
151
|
-
</>
|
|
152
|
-
);
|
|
153
|
-
};
|
|
154
|
-
|
|
155
|
-
const SimpleModalControlledAnimatedExample = () => {
|
|
156
|
-
const [open, setOpen] = useState(false);
|
|
157
|
-
const [pointerEvents, setPointerEvents] = useState('none');
|
|
158
|
-
const [{ scale, opacity }, set] = useSpring(() => ({
|
|
159
|
-
scale: 0.97,
|
|
160
|
-
opacity: 0,
|
|
161
|
-
}));
|
|
162
|
-
|
|
163
|
-
const handleClose = () => {
|
|
164
|
-
const t = Date.now();
|
|
165
|
-
setPointerEvents('none');
|
|
166
|
-
set({
|
|
167
|
-
scale: 0.97,
|
|
168
|
-
opacity: 0,
|
|
169
|
-
config: {
|
|
170
|
-
mass: 1,
|
|
171
|
-
tension: 1600,
|
|
172
|
-
friction: 50,
|
|
173
|
-
clamp: true,
|
|
174
|
-
},
|
|
175
|
-
onRest: () => {
|
|
176
|
-
console.log('Close in: ', Date.now() - t);
|
|
177
|
-
setOpen(false);
|
|
178
|
-
},
|
|
179
|
-
});
|
|
180
|
-
};
|
|
181
|
-
|
|
182
|
-
const handleOpen = () => {
|
|
183
|
-
const t = Date.now();
|
|
184
|
-
setOpen(true);
|
|
185
|
-
setPointerEvents('auto');
|
|
186
|
-
set({
|
|
187
|
-
scale: 1,
|
|
188
|
-
opacity: 1,
|
|
189
|
-
config: {
|
|
190
|
-
mass: 1,
|
|
191
|
-
tension: 1050,
|
|
192
|
-
friction: 50,
|
|
193
|
-
clamp: true,
|
|
194
|
-
},
|
|
195
|
-
onRest: () => {
|
|
196
|
-
console.log('Opened in: ', Date.now() - t);
|
|
197
|
-
},
|
|
198
|
-
});
|
|
199
|
-
};
|
|
200
|
-
|
|
201
|
-
return (
|
|
202
|
-
<>
|
|
203
|
-
<button id="open-modal" onClick={handleOpen}>
|
|
204
|
-
Open modal
|
|
205
|
-
</button>
|
|
206
|
-
{open && (
|
|
207
|
-
<Portal>
|
|
208
|
-
<animated.div
|
|
209
|
-
style={{
|
|
210
|
-
opacity,
|
|
211
|
-
position: 'fixed',
|
|
212
|
-
boxSizing: 'border-box',
|
|
213
|
-
top: '0',
|
|
214
|
-
left: '0',
|
|
215
|
-
right: '0',
|
|
216
|
-
bottom: '0',
|
|
217
|
-
backgroundColor: 'rgba(0, 0, 0, 0.3)',
|
|
218
|
-
pointerEvents: 'none',
|
|
219
|
-
}}
|
|
220
|
-
/>
|
|
221
|
-
<ModalBackdrop onClose={handleClose} style={{ pointerEvents }}>
|
|
222
|
-
<Modal
|
|
223
|
-
as={animated.div}
|
|
224
|
-
style={{
|
|
225
|
-
transform: scale.to((x: number) => `scale(${x}, ${x * x})`),
|
|
226
|
-
opacity,
|
|
227
|
-
transformOrigin: 'center top',
|
|
228
|
-
}}
|
|
229
|
-
>
|
|
230
|
-
<button>Start button</button>
|
|
231
|
-
Hello world
|
|
232
|
-
<LoremIpsum />
|
|
233
|
-
<button>End button</button>
|
|
234
|
-
</Modal>
|
|
235
|
-
</ModalBackdrop>
|
|
236
|
-
</Portal>
|
|
237
|
-
)}
|
|
238
|
-
</>
|
|
239
|
-
);
|
|
240
|
-
};
|
|
241
|
-
|
|
242
|
-
export const SimpleModalControlled = () => (
|
|
243
|
-
<Wrapper>
|
|
244
|
-
<SimpleModalControlledExample />
|
|
245
|
-
</Wrapper>
|
|
246
|
-
);
|
|
247
|
-
|
|
248
|
-
export const NestedModalControlled = () => (
|
|
249
|
-
<Wrapper>
|
|
250
|
-
<NestedModalControlledExample />
|
|
251
|
-
</Wrapper>
|
|
252
|
-
);
|
|
253
|
-
|
|
254
|
-
export const SimpleModalControlledAnimated = () => (
|
|
255
|
-
<Wrapper>
|
|
256
|
-
<SimpleModalControlledAnimatedExample />
|
|
257
|
-
</Wrapper>
|
|
258
|
-
);
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import { useSpring, animated } from 'react-spring';
|
|
3
|
+
|
|
4
|
+
import { Modal, ModalBackdrop } from './';
|
|
5
|
+
import { Portal } from '../Portal';
|
|
6
|
+
import './styles.css';
|
|
7
|
+
|
|
8
|
+
export default {
|
|
9
|
+
title: 'components/Modal',
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const LoremIpsum = ({ numOfParagraphs = 20 }) => {
|
|
13
|
+
const content = [];
|
|
14
|
+
|
|
15
|
+
for (let i = 0; i < numOfParagraphs; i++) {
|
|
16
|
+
content.push(
|
|
17
|
+
<p key={`paragraph_${i}`}>
|
|
18
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
|
|
19
|
+
vestibulum sapien nec mauris placerat, et facilisis massa placerat.
|
|
20
|
+
Curabitur sagittis condimentum lectus vel aliquam. Sed ultrices, metus
|
|
21
|
+
sed suscipit venenatis, metus lectus vestibulum neque, eget sodales
|
|
22
|
+
justo sapien in ante. In a neque mollis, volutpat est a, vehicula lacus.
|
|
23
|
+
Praesent lectus justo, tempor a laoreet in, consectetur nec sapien.
|
|
24
|
+
Phasellus non venenatis erat. Maecenas eget mi sodales, euismod tortor
|
|
25
|
+
vitae, ultricies quam. Sed varius nunc id tincidunt porttitor. Morbi
|
|
26
|
+
lectus massa, malesuada at lorem ut, semper volutpat orci. Donec mauris
|
|
27
|
+
eros, faucibus ut egestas a, ultricies vel tortor. Phasellus mi lectus,
|
|
28
|
+
consectetur a risus at, faucibus porttitor ligula. Maecenas felis eros,
|
|
29
|
+
porttitor vel placerat eget, malesuada ac leo. Cras a eros id dui
|
|
30
|
+
porttitor ullamcorper sit amet quis lorem.
|
|
31
|
+
</p>
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return <>{content}</>;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const Wrapper = ({ children }) => {
|
|
39
|
+
return (
|
|
40
|
+
<div style={{ maxWidth: 900, margin: '0 auto' }}>
|
|
41
|
+
<div
|
|
42
|
+
style={{
|
|
43
|
+
boxSizing: 'border-box',
|
|
44
|
+
display: 'flex',
|
|
45
|
+
alignItems: 'flex-start',
|
|
46
|
+
padding: '96px 48px',
|
|
47
|
+
justifyContent: 'space-around',
|
|
48
|
+
width: '100%',
|
|
49
|
+
position: 'relative',
|
|
50
|
+
}}
|
|
51
|
+
>
|
|
52
|
+
<a href="#" onClick={(e) => e.preventDefault()}>
|
|
53
|
+
Link
|
|
54
|
+
</a>
|
|
55
|
+
<div style={{ minHeight: 120, width: 100 }}>{children}</div>
|
|
56
|
+
<a href="#" onClick={(e) => e.preventDefault()}>
|
|
57
|
+
Link
|
|
58
|
+
</a>
|
|
59
|
+
</div>
|
|
60
|
+
<div>
|
|
61
|
+
<LoremIpsum />
|
|
62
|
+
</div>
|
|
63
|
+
<div
|
|
64
|
+
style={{
|
|
65
|
+
boxSizing: 'border-box',
|
|
66
|
+
display: 'flex',
|
|
67
|
+
alignItems: 'flex-start',
|
|
68
|
+
padding: '96px 48px',
|
|
69
|
+
justifyContent: 'space-around',
|
|
70
|
+
width: '100%',
|
|
71
|
+
position: 'relative',
|
|
72
|
+
}}
|
|
73
|
+
>
|
|
74
|
+
<a href="#" onClick={(e) => e.preventDefault()}>
|
|
75
|
+
Link
|
|
76
|
+
</a>
|
|
77
|
+
<div style={{ minHeight: 120, width: 100 }}>{children}</div>
|
|
78
|
+
<a href="#" onClick={(e) => e.preventDefault()}>
|
|
79
|
+
Link
|
|
80
|
+
</a>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const SimpleModalControlledExample = () => {
|
|
87
|
+
const [open, setOpen] = useState(false);
|
|
88
|
+
|
|
89
|
+
const handleClose = () => {
|
|
90
|
+
setOpen(false);
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
return (
|
|
94
|
+
<>
|
|
95
|
+
<button id="open-modal" onClick={() => setOpen(!open)}>
|
|
96
|
+
Open modal
|
|
97
|
+
</button>
|
|
98
|
+
{open && (
|
|
99
|
+
<Portal>
|
|
100
|
+
<ModalBackdrop onClose={handleClose}>
|
|
101
|
+
<Modal trapFocus={true}>
|
|
102
|
+
<button>Start button</button>
|
|
103
|
+
<LoremIpsum />
|
|
104
|
+
<button>End button</button>
|
|
105
|
+
</Modal>
|
|
106
|
+
</ModalBackdrop>
|
|
107
|
+
</Portal>
|
|
108
|
+
)}
|
|
109
|
+
</>
|
|
110
|
+
);
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
const NestedModalControlledExample = () => {
|
|
114
|
+
const [open, setOpen] = useState(false);
|
|
115
|
+
const [open2, setOpen2] = useState(false);
|
|
116
|
+
|
|
117
|
+
return (
|
|
118
|
+
<>
|
|
119
|
+
<button id="open-modal" onClick={() => setOpen(!open)}>
|
|
120
|
+
Open modal
|
|
121
|
+
</button>
|
|
122
|
+
{open && (
|
|
123
|
+
<Portal>
|
|
124
|
+
<ModalBackdrop onClose={() => setOpen(false)}>
|
|
125
|
+
<Modal trapFocus={true}>
|
|
126
|
+
<button id="open-another-modal" onClick={() => setOpen2(true)}>
|
|
127
|
+
Open another modal
|
|
128
|
+
</button>
|
|
129
|
+
{open2 && (
|
|
130
|
+
<Portal>
|
|
131
|
+
<ModalBackdrop onClose={() => setOpen2(false)}>
|
|
132
|
+
<Modal trapFocus={true}>
|
|
133
|
+
<LoremIpsum numOfParagraphs={1} />
|
|
134
|
+
<button onClick={() => setOpen2(false)}>Close</button>
|
|
135
|
+
</Modal>
|
|
136
|
+
</ModalBackdrop>
|
|
137
|
+
</Portal>
|
|
138
|
+
)}
|
|
139
|
+
<LoremIpsum numOfParagraphs={1} />
|
|
140
|
+
<button
|
|
141
|
+
autoFocus
|
|
142
|
+
id="close-button"
|
|
143
|
+
onClick={() => setOpen(false)}
|
|
144
|
+
>
|
|
145
|
+
Close
|
|
146
|
+
</button>
|
|
147
|
+
</Modal>
|
|
148
|
+
</ModalBackdrop>
|
|
149
|
+
</Portal>
|
|
150
|
+
)}
|
|
151
|
+
</>
|
|
152
|
+
);
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const SimpleModalControlledAnimatedExample = () => {
|
|
156
|
+
const [open, setOpen] = useState(false);
|
|
157
|
+
const [pointerEvents, setPointerEvents] = useState('none');
|
|
158
|
+
const [{ scale, opacity }, set] = useSpring(() => ({
|
|
159
|
+
scale: 0.97,
|
|
160
|
+
opacity: 0,
|
|
161
|
+
}));
|
|
162
|
+
|
|
163
|
+
const handleClose = () => {
|
|
164
|
+
const t = Date.now();
|
|
165
|
+
setPointerEvents('none');
|
|
166
|
+
set({
|
|
167
|
+
scale: 0.97,
|
|
168
|
+
opacity: 0,
|
|
169
|
+
config: {
|
|
170
|
+
mass: 1,
|
|
171
|
+
tension: 1600,
|
|
172
|
+
friction: 50,
|
|
173
|
+
clamp: true,
|
|
174
|
+
},
|
|
175
|
+
onRest: () => {
|
|
176
|
+
console.log('Close in: ', Date.now() - t);
|
|
177
|
+
setOpen(false);
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
const handleOpen = () => {
|
|
183
|
+
const t = Date.now();
|
|
184
|
+
setOpen(true);
|
|
185
|
+
setPointerEvents('auto');
|
|
186
|
+
set({
|
|
187
|
+
scale: 1,
|
|
188
|
+
opacity: 1,
|
|
189
|
+
config: {
|
|
190
|
+
mass: 1,
|
|
191
|
+
tension: 1050,
|
|
192
|
+
friction: 50,
|
|
193
|
+
clamp: true,
|
|
194
|
+
},
|
|
195
|
+
onRest: () => {
|
|
196
|
+
console.log('Opened in: ', Date.now() - t);
|
|
197
|
+
},
|
|
198
|
+
});
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
return (
|
|
202
|
+
<>
|
|
203
|
+
<button id="open-modal" onClick={handleOpen}>
|
|
204
|
+
Open modal
|
|
205
|
+
</button>
|
|
206
|
+
{open && (
|
|
207
|
+
<Portal>
|
|
208
|
+
<animated.div
|
|
209
|
+
style={{
|
|
210
|
+
opacity,
|
|
211
|
+
position: 'fixed',
|
|
212
|
+
boxSizing: 'border-box',
|
|
213
|
+
top: '0',
|
|
214
|
+
left: '0',
|
|
215
|
+
right: '0',
|
|
216
|
+
bottom: '0',
|
|
217
|
+
backgroundColor: 'rgba(0, 0, 0, 0.3)',
|
|
218
|
+
pointerEvents: 'none',
|
|
219
|
+
}}
|
|
220
|
+
/>
|
|
221
|
+
<ModalBackdrop onClose={handleClose} style={{ pointerEvents }}>
|
|
222
|
+
<Modal
|
|
223
|
+
as={animated.div}
|
|
224
|
+
style={{
|
|
225
|
+
transform: scale.to((x: number) => `scale(${x}, ${x * x})`),
|
|
226
|
+
opacity,
|
|
227
|
+
transformOrigin: 'center top',
|
|
228
|
+
}}
|
|
229
|
+
>
|
|
230
|
+
<button>Start button</button>
|
|
231
|
+
Hello world
|
|
232
|
+
<LoremIpsum />
|
|
233
|
+
<button>End button</button>
|
|
234
|
+
</Modal>
|
|
235
|
+
</ModalBackdrop>
|
|
236
|
+
</Portal>
|
|
237
|
+
)}
|
|
238
|
+
</>
|
|
239
|
+
);
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
export const SimpleModalControlled = () => (
|
|
243
|
+
<Wrapper>
|
|
244
|
+
<SimpleModalControlledExample />
|
|
245
|
+
</Wrapper>
|
|
246
|
+
);
|
|
247
|
+
|
|
248
|
+
export const NestedModalControlled = () => (
|
|
249
|
+
<Wrapper>
|
|
250
|
+
<NestedModalControlledExample />
|
|
251
|
+
</Wrapper>
|
|
252
|
+
);
|
|
253
|
+
|
|
254
|
+
export const SimpleModalControlledAnimated = () => (
|
|
255
|
+
<Wrapper>
|
|
256
|
+
<SimpleModalControlledAnimatedExample />
|
|
257
|
+
</Wrapper>
|
|
258
|
+
);
|
package/src/Modal/Modal.tsx
CHANGED
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
CSSProperties,
|
|
3
|
-
ElementType,
|
|
4
|
-
HTMLAttributes,
|
|
5
|
-
ReactNode,
|
|
6
|
-
} from 'react';
|
|
7
|
-
import { forwardRef, useRef } from 'react';
|
|
8
|
-
|
|
9
|
-
import { useAutoFocus, useFocusReturn, useRemoveBodyScroll } from '../hooks';
|
|
10
|
-
import { FocusLock } from '../FocusLock';
|
|
11
|
-
import { assignMultipleRefs } from '../utils';
|
|
12
|
-
|
|
13
|
-
export interface ModalProps extends HTMLAttributes<HTMLDivElement> {
|
|
14
|
-
as?: ElementType<any>;
|
|
15
|
-
innerAs?: ElementType<any>;
|
|
16
|
-
children?: ReactNode;
|
|
17
|
-
style?: CSSProperties;
|
|
18
|
-
trapFocus?: boolean;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export const Modal = forwardRef<HTMLDivElement, ModalProps>(
|
|
22
|
-
(
|
|
23
|
-
{ as: Comp = 'div', children, trapFocus = true, style = {}, ...otherProps },
|
|
24
|
-
ref
|
|
25
|
-
) => {
|
|
26
|
-
const modalRef = useRef<HTMLDivElement>(null);
|
|
27
|
-
|
|
28
|
-
useFocusReturn(trapFocus, modalRef);
|
|
29
|
-
useRemoveBodyScroll(trapFocus, modalRef);
|
|
30
|
-
useAutoFocus(trapFocus, modalRef);
|
|
31
|
-
|
|
32
|
-
return (
|
|
33
|
-
<FocusLock childRef={modalRef} enabled={trapFocus}>
|
|
34
|
-
<Comp
|
|
35
|
-
ref={assignMultipleRefs(ref, modalRef)}
|
|
36
|
-
data-modal-container=""
|
|
37
|
-
role="dialog"
|
|
38
|
-
aria-modal="true"
|
|
39
|
-
style={style}
|
|
40
|
-
tabIndex={-1}
|
|
41
|
-
{...otherProps}
|
|
42
|
-
>
|
|
43
|
-
{children}
|
|
44
|
-
</Comp>
|
|
45
|
-
</FocusLock>
|
|
46
|
-
);
|
|
47
|
-
}
|
|
48
|
-
);
|
|
1
|
+
import type {
|
|
2
|
+
CSSProperties,
|
|
3
|
+
ElementType,
|
|
4
|
+
HTMLAttributes,
|
|
5
|
+
ReactNode,
|
|
6
|
+
} from 'react';
|
|
7
|
+
import { forwardRef, useRef } from 'react';
|
|
8
|
+
|
|
9
|
+
import { useAutoFocus, useFocusReturn, useRemoveBodyScroll } from '../hooks';
|
|
10
|
+
import { FocusLock } from '../FocusLock';
|
|
11
|
+
import { assignMultipleRefs } from '../utils';
|
|
12
|
+
|
|
13
|
+
export interface ModalProps extends HTMLAttributes<HTMLDivElement> {
|
|
14
|
+
as?: ElementType<any>;
|
|
15
|
+
innerAs?: ElementType<any>;
|
|
16
|
+
children?: ReactNode;
|
|
17
|
+
style?: CSSProperties;
|
|
18
|
+
trapFocus?: boolean;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const Modal = forwardRef<HTMLDivElement, ModalProps>(
|
|
22
|
+
(
|
|
23
|
+
{ as: Comp = 'div', children, trapFocus = true, style = {}, ...otherProps },
|
|
24
|
+
ref
|
|
25
|
+
) => {
|
|
26
|
+
const modalRef = useRef<HTMLDivElement>(null);
|
|
27
|
+
|
|
28
|
+
useFocusReturn(trapFocus, modalRef);
|
|
29
|
+
useRemoveBodyScroll(trapFocus, modalRef);
|
|
30
|
+
useAutoFocus(trapFocus, modalRef);
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<FocusLock childRef={modalRef} enabled={trapFocus}>
|
|
34
|
+
<Comp
|
|
35
|
+
ref={assignMultipleRefs(ref, modalRef)}
|
|
36
|
+
data-modal-container=""
|
|
37
|
+
role="dialog"
|
|
38
|
+
aria-modal="true"
|
|
39
|
+
style={style}
|
|
40
|
+
tabIndex={-1}
|
|
41
|
+
{...otherProps}
|
|
42
|
+
>
|
|
43
|
+
{children}
|
|
44
|
+
</Comp>
|
|
45
|
+
</FocusLock>
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
);
|