@flightlesslabs/dodo-ui 0.6.5 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +32 -9
- package/dist/index.js +12 -2
- package/dist/stories/Home.mdx +4 -6
- package/dist/stories/components/Form/Button/Button.stories.svelte +16 -37
- package/dist/stories/components/Form/Button/Button.svelte +45 -47
- package/dist/stories/components/Form/Button/Button.svelte.d.ts +16 -12
- package/dist/stories/components/Form/Button/Color/Color.stories.svelte +23 -48
- package/dist/stories/components/Form/Button/Events/Events.stories.svelte +1 -7
- package/dist/stories/components/Form/Button/IconButton/IconButton.stories.svelte +4 -12
- package/dist/stories/components/Form/Button/Roundness/Roundness.stories.svelte +5 -31
- package/dist/stories/components/Form/Button/Size/Size.stories.svelte +3 -9
- package/dist/stories/components/Form/Button/Variant/Variant.stories.svelte +5 -8
- package/dist/stories/components/Form/FormControl/FormControl.stories.svelte +11 -12
- package/dist/stories/components/Form/FormControl/FormControl.svelte +6 -8
- package/dist/stories/components/Form/FormControl/FormControl.svelte.d.ts +1 -1
- package/dist/stories/components/Form/Label/Label.stories.svelte +1 -11
- package/dist/stories/components/Form/Label/Label.svelte +6 -5
- package/dist/stories/components/Form/Label/Label.svelte.d.ts +1 -3
- package/dist/stories/components/Form/Message/Color/Color.stories.svelte +9 -9
- package/dist/stories/components/Form/Message/Message.stories.svelte +5 -13
- package/dist/stories/components/Form/Message/Message.svelte +5 -7
- package/dist/stories/components/Form/Message/Message.svelte.d.ts +4 -6
- package/dist/stories/components/Form/Message/Size/Size.stories.svelte +3 -5
- package/dist/stories/components/Form/PasswordInput/Events/Events.stories.svelte +8 -72
- package/dist/stories/components/Form/PasswordInput/PasswordInput.stories.svelte +5 -3
- package/dist/stories/components/Form/PasswordInput/PasswordInput.svelte +26 -33
- package/dist/stories/components/Form/PasswordInput/PasswordInput.svelte.d.ts +6 -5
- package/dist/stories/components/Form/PasswordInput/Roundness/Roundness.stories.svelte +4 -4
- package/dist/stories/components/Form/PasswordInput/WithIcon/WithIcon.stories.svelte +2 -2
- package/dist/stories/components/Form/Select/Customize/Customize.stories.svelte +120 -0
- package/dist/stories/components/Form/Select/Customize/Customize.stories.svelte.d.ts +18 -0
- package/dist/stories/components/Form/Select/Events/Events.stories.svelte +138 -0
- package/dist/stories/components/Form/Select/Options/OptionFormat.mdx +40 -0
- package/dist/stories/components/Form/Select/Roundness/Roundness.stories.svelte +28 -0
- package/dist/stories/components/Form/Select/Roundness/Roundness.stories.svelte.d.ts +18 -0
- package/dist/stories/components/Form/Select/Select.stories.svelte +114 -0
- package/dist/stories/components/Form/Select/Select.stories.svelte.d.ts +22 -0
- package/dist/stories/components/Form/Select/Select.svelte +285 -0
- package/dist/stories/components/Form/Select/Select.svelte.d.ts +87 -0
- package/dist/stories/components/Form/Select/Size/Size.stories.svelte +24 -0
- package/dist/stories/components/Form/Select/Size/Size.stories.svelte.d.ts +18 -0
- package/dist/stories/components/Form/Select/WithIcon/WithIcon.stories.svelte +39 -0
- package/dist/stories/components/Form/Select/WithIcon/WithIcon.stories.svelte.d.ts +18 -0
- package/dist/stories/components/Form/TextInput/Events/Events.stories.svelte +7 -63
- package/dist/stories/components/Form/TextInput/Roundness/Roundness.stories.svelte +4 -4
- package/dist/stories/components/Form/TextInput/TextInput.stories.svelte +6 -4
- package/dist/stories/components/Form/TextInput/TextInput.svelte +18 -30
- package/dist/stories/components/Form/TextInput/TextInput.svelte.d.ts +10 -5
- package/dist/stories/components/Form/TextInput/WithIcon/WithIcon.stories.svelte +4 -4
- package/dist/stories/components/Layout/Menu/Menu.stories.svelte +65 -0
- package/dist/stories/components/Layout/Menu/Menu.stories.svelte.d.ts +21 -0
- package/dist/stories/components/Layout/Menu/Menu.svelte +30 -0
- package/dist/stories/components/Layout/Menu/Menu.svelte.d.ts +23 -0
- package/dist/stories/components/Layout/Menu/MenuItem/MenuItem.stories.svelte +30 -0
- package/dist/stories/components/Layout/Menu/MenuItem/MenuItem.stories.svelte.d.ts +21 -0
- package/dist/stories/components/Layout/Menu/MenuItem/MenuItem.svelte +164 -0
- package/dist/stories/components/Layout/Menu/MenuItem/MenuItem.svelte.d.ts +49 -0
- package/dist/stories/components/Layout/Menu/MenuItem/Size/Size.stories.svelte +16 -0
- package/dist/stories/components/Layout/Menu/MenuItem/Type/Type.stories.svelte +21 -0
- package/dist/stories/components/{Form/SimpleSelect/WithIcon/WithIcon.stories.svelte.d.ts → Layout/Menu/MenuItem/Type/Type.stories.svelte.d.ts} +3 -3
- package/dist/stories/components/Layout/Menu/Size/Size.stories.svelte +37 -0
- package/dist/stories/components/{Form/SimpleSelect/Roundness/Roundness.stories.svelte.d.ts → Layout/Menu/Size/Size.stories.svelte.d.ts} +3 -3
- package/dist/stories/components/Layout/Paper/Color/Color.stories.svelte +63 -0
- package/dist/stories/components/Layout/Paper/Color/Color.stories.svelte.d.ts +26 -0
- package/dist/stories/components/Layout/Paper/Paper.stories.svelte +25 -16
- package/dist/stories/components/Layout/Paper/Paper.svelte +211 -14
- package/dist/stories/components/Layout/Paper/Paper.svelte.d.ts +20 -9
- package/dist/stories/components/Layout/Paper/Roundness/Roundness.stories.svelte +8 -13
- package/dist/stories/components/Layout/Paper/Shadow/Shadow.stories.svelte +6 -24
- package/dist/stories/components/Layout/Paper/utils/scss/mixins.scss +46 -0
- package/dist/stories/components/Layout/Separator/Color/Color.stories.svelte +19 -0
- package/dist/stories/components/Layout/Separator/Color/Color.stories.svelte.d.ts +26 -0
- package/dist/stories/components/Layout/Separator/Separator.stories.svelte +26 -0
- package/dist/stories/components/Layout/Separator/Separator.stories.svelte.d.ts +21 -0
- package/dist/stories/components/Layout/Separator/Separator.svelte +66 -0
- package/dist/stories/components/Layout/Separator/Separator.svelte.d.ts +22 -0
- package/dist/stories/components/Layout/Separator/utils/scss/mixins.scss +24 -0
- package/dist/stories/developer tools/Intro.mdx +2 -0
- package/dist/stories/developer tools/components/DynamicInput/DynamicInput.stories.svelte +49 -0
- package/dist/stories/{components/Form/SimpleSelect/SimpleSelect.stories.svelte.d.ts → developer tools/components/DynamicInput/DynamicInput.stories.svelte.d.ts } +5 -7
- package/dist/stories/developer tools/components/DynamicInput/DynamicInput.svelte +92 -0
- package/dist/stories/developer tools/components/DynamicInput/DynamicInput.svelte.d.ts +60 -0
- package/{src/lib/stories/components/Form/TextInput/Size/Size.stories.svelte → dist/stories/developer tools/components/DynamicInput/Size/Size.stories.svelte } +4 -4
- package/dist/stories/developer tools/components/DynamicInput/Size/Size.stories.svelte.d.ts +26 -0
- package/dist/stories/developer tools/components/InputEnclosure/InputEnclosure.stories.svelte +5 -5
- package/dist/stories/developer tools/components/InputEnclosure/InputEnclosure.svelte +19 -15
- package/dist/stories/developer tools/components/InputEnclosure/InputEnclosure.svelte.d.ts +4 -3
- package/dist/stories/developer tools/components/InputEnclosure/Roundness/Roundness.stories.svelte +4 -4
- package/dist/stories/developer tools/components/InputEnclosure/WithIcon/WithIcon.stories.svelte +4 -4
- package/dist/stories/developer tools/components/Popper/Popper.stories.svelte +119 -0
- package/dist/stories/developer tools/components/Popper/Popper.stories.svelte.d.ts +21 -0
- package/dist/stories/developer tools/components/Popper/Popper.svelte +77 -0
- package/dist/stories/developer tools/components/Popper/Popper.svelte.d.ts +50 -0
- package/dist/stories/developer tools/components/Popper/PopperPopup/PopperPopup.stories.svelte +60 -0
- package/dist/stories/developer tools/components/Popper/PopperPopup/PopperPopup.stories.svelte.d.ts +21 -0
- package/dist/stories/developer tools/components/Popper/PopperPopup/PopperPopup.svelte +66 -0
- package/dist/stories/developer tools/components/Popper/PopperPopup/PopperPopup.svelte.d.ts +34 -0
- package/dist/stories/developer tools/components/Popper/PopperPopup/utils/getPopupPosition.d.ts +21 -0
- package/dist/stories/developer tools/components/Popper/PopperPopup/utils/getPopupPosition.js +62 -0
- package/dist/stories/developer tools/components/Popper/Positions/AutoPosition/AutoPosition.stories.svelte +89 -0
- package/dist/stories/developer tools/components/Popper/Positions/AutoPosition/AutoPosition.stories.svelte.d.ts +18 -0
- package/dist/stories/developer tools/components/Popper/Positions/Positions.stories.svelte +111 -0
- package/dist/stories/developer tools/components/Popper/Positions/Positions.stories.svelte.d.ts +18 -0
- package/dist/stories/developer tools/components/UtilityButton/Size/Size.stories.svelte +6 -8
- package/dist/stories/developer tools/components/UtilityButton/UtilityButton.stories.svelte +4 -7
- package/dist/stories/developer tools/components/UtilityButton/UtilityButton.svelte +8 -5
- package/dist/stories/developer tools/components/UtilityButton/UtilityButton.svelte.d.ts +2 -2
- package/dist/stories/developer tools/directives/clickOutside/clickOutside.d.ts +3 -0
- package/dist/stories/developer tools/directives/clickOutside/clickOutside.js +14 -0
- package/dist/stories/developer tools/directives/clickOutside/index.mdx +25 -0
- package/dist/stories/{philosophy/Colors/Colors.mdx → developer tools/philosophy/Colors/Colors.mdx } +2 -2
- package/dist/stories/{philosophy/Colors/Swatches/Palette.svelte → developer tools/philosophy/Colors/Swatches/Palette.svelte } +1 -1
- package/dist/stories/{philosophy/Colors/Swatches/Swatch.svelte → developer tools/philosophy/Colors/Swatches/Swatch.svelte } +1 -1
- package/dist/stories/{philosophy/Colors/Swatches/Swatches.svelte → developer tools/philosophy/Colors/Swatches/Swatches.svelte } +1 -1
- package/dist/stories/{philosophy/Colors/utils/color.js → developer tools/philosophy/Colors/utils/color.js } +1 -1
- package/dist/stories/{philosophy/Themes.mdx → developer tools/philosophy/Themes.mdx } +1 -1
- package/dist/styles/_colors.css +44 -44
- package/dist/styles/_components.css +6 -3
- package/dist/styles/_shadow.css +13 -20
- package/dist/styles/_space.css +7 -0
- package/dist/styles/_z-index.css +9 -0
- package/dist/styles/global.css +2 -0
- package/dist/types/colors.d.ts +7 -0
- package/dist/types/colors.js +10 -0
- package/dist/types/position.d.ts +4 -0
- package/dist/types/position.js +2 -0
- package/dist/types/roundness.d.ts +3 -0
- package/dist/types/roundness.js +1 -0
- package/dist/types/shadow.d.ts +3 -0
- package/dist/types/shadow.js +1 -0
- package/dist/types/size.d.ts +3 -0
- package/dist/types/size.js +1 -0
- package/dist/types/weight.d.ts +3 -0
- package/dist/types/weight.js +1 -0
- package/package.json +26 -24
- package/src/lib/index.ts +61 -15
- package/src/lib/stories/components/Form/Button/Button.svelte +39 -36
- package/src/lib/stories/components/Form/FormControl/FormControl.svelte +9 -11
- package/src/lib/stories/components/Form/Label/Label.svelte +5 -8
- package/src/lib/stories/components/Form/Message/Message.svelte +11 -16
- package/src/lib/stories/components/Form/PasswordInput/PasswordInput.svelte +50 -50
- package/src/lib/stories/components/Form/Select/Select.svelte +501 -0
- package/src/lib/stories/components/Form/TextInput/TextInput.svelte +43 -60
- package/src/lib/stories/components/Layout/Menu/Menu.svelte +65 -0
- package/src/lib/stories/components/Layout/Menu/MenuItem/MenuItem.svelte +268 -0
- package/src/lib/stories/components/Layout/Paper/Paper.svelte +154 -27
- package/src/lib/stories/components/Layout/Paper/utils/scss/mixins.scss +46 -0
- package/src/lib/stories/components/Layout/Separator/Separator.svelte +96 -0
- package/src/lib/stories/components/Layout/Separator/utils/scss/mixins.scss +24 -0
- package/src/lib/stories/developer tools/components/DynamicInput/DynamicInput.svelte +195 -0
- package/src/lib/stories/developer tools/components/InputEnclosure/InputEnclosure.svelte +22 -18
- package/src/lib/stories/developer tools/components/Popper/Popper.svelte +159 -0
- package/src/lib/stories/developer tools/components/Popper/PopperPopup/PopperPopup.svelte +120 -0
- package/src/lib/stories/developer tools/components/Popper/PopperPopup/utils/getPopupPosition.ts +87 -0
- package/src/lib/stories/developer tools/components/UtilityButton/UtilityButton.svelte +8 -6
- package/src/lib/stories/developer tools/directives/clickOutside/clickOutside.ts +17 -0
- package/src/lib/stories/{philosophy/Colors/Swatches/Palette.svelte → developer tools/philosophy/Colors/Swatches/Palette.svelte } +1 -1
- package/src/lib/stories/{philosophy/Colors/Swatches/Swatch.svelte → developer tools/philosophy/Colors/Swatches/Swatch.svelte } +1 -1
- package/src/lib/stories/{philosophy/Colors/Swatches/Swatches.svelte → developer tools/philosophy/Colors/Swatches/Swatches.svelte } +1 -1
- package/src/lib/stories/{philosophy/Colors/utils/color.ts → developer tools/philosophy/Colors/utils/color.ts } +1 -1
- package/src/lib/styles/_colors.css +44 -44
- package/src/lib/styles/_components.css +6 -3
- package/src/lib/styles/_shadow.css +13 -20
- package/src/lib/styles/_space.css +7 -0
- package/src/lib/styles/_z-index.css +9 -0
- package/src/lib/styles/global.css +2 -0
- package/src/lib/types/colors.ts +16 -0
- package/src/lib/types/position.ts +5 -0
- package/src/lib/types/roundness.ts +3 -0
- package/src/lib/types/shadow.ts +3 -0
- package/src/lib/types/size.ts +3 -0
- package/src/lib/types/weight.ts +3 -0
- package/dist/stories/components/Form/SimpleSelect/Events/Events.stories.svelte +0 -74
- package/dist/stories/components/Form/SimpleSelect/Roundness/Roundness.stories.svelte +0 -24
- package/dist/stories/components/Form/SimpleSelect/SimpleSelect.stories.svelte +0 -59
- package/dist/stories/components/Form/SimpleSelect/SimpleSelect.svelte +0 -69
- package/dist/stories/components/Form/SimpleSelect/SimpleSelect.svelte.d.ts +0 -50
- package/dist/stories/components/Form/SimpleSelect/Size/Size.stories.svelte +0 -20
- package/dist/stories/components/Form/SimpleSelect/WithIcon/WithIcon.stories.svelte +0 -36
- package/dist/types.d.ts +0 -5
- package/dist/types.js +0 -1
- package/src/lib/stories/Home.mdx +0 -61
- package/src/lib/stories/assets/dark-theme-toggle.png +0 -0
- package/src/lib/stories/components/Form/Button/Button.stories.svelte +0 -82
- package/src/lib/stories/components/Form/Button/Color/Color.stories.svelte +0 -68
- package/src/lib/stories/components/Form/Button/Events/Events.stories.svelte +0 -42
- package/src/lib/stories/components/Form/Button/IconButton/IconButton.stories.svelte +0 -51
- package/src/lib/stories/components/Form/Button/Roundness/Roundness.stories.svelte +0 -49
- package/src/lib/stories/components/Form/Button/Size/Size.stories.svelte +0 -22
- package/src/lib/stories/components/Form/Button/Variant/Variant.stories.svelte +0 -21
- package/src/lib/stories/components/Form/FormControl/FormControl.stories.svelte +0 -29
- package/src/lib/stories/components/Form/Label/Label.stories.svelte +0 -23
- package/src/lib/stories/components/Form/Message/Color/Color.stories.svelte +0 -36
- package/src/lib/stories/components/Form/Message/Message.stories.svelte +0 -35
- package/src/lib/stories/components/Form/Message/Size/Size.stories.svelte +0 -24
- package/src/lib/stories/components/Form/PasswordInput/Events/Events.stories.svelte +0 -174
- package/src/lib/stories/components/Form/PasswordInput/PasswordInput.stories.svelte +0 -57
- package/src/lib/stories/components/Form/PasswordInput/Roundness/Roundness.stories.svelte +0 -20
- package/src/lib/stories/components/Form/PasswordInput/Size/Size.stories.svelte +0 -16
- package/src/lib/stories/components/Form/PasswordInput/WithIcon/WithIcon.stories.svelte +0 -31
- package/src/lib/stories/components/Form/SimpleSelect/Events/Events.stories.svelte +0 -79
- package/src/lib/stories/components/Form/SimpleSelect/Roundness/Roundness.stories.svelte +0 -24
- package/src/lib/stories/components/Form/SimpleSelect/SimpleSelect.stories.svelte +0 -64
- package/src/lib/stories/components/Form/SimpleSelect/SimpleSelect.svelte +0 -159
- package/src/lib/stories/components/Form/SimpleSelect/Size/Size.stories.svelte +0 -20
- package/src/lib/stories/components/Form/SimpleSelect/WithIcon/WithIcon.stories.svelte +0 -36
- package/src/lib/stories/components/Form/TextInput/Events/Events.stories.svelte +0 -153
- package/src/lib/stories/components/Form/TextInput/Roundness/Roundness.stories.svelte +0 -21
- package/src/lib/stories/components/Form/TextInput/TextInput.stories.svelte +0 -41
- package/src/lib/stories/components/Form/TextInput/WithIcon/WithIcon.stories.svelte +0 -47
- package/src/lib/stories/components/Layout/Paper/Paper.stories.svelte +0 -41
- package/src/lib/stories/components/Layout/Paper/Roundness/Roundness.stories.svelte +0 -30
- package/src/lib/stories/components/Layout/Paper/Shadow/Shadow.stories.svelte +0 -42
- package/src/lib/stories/developer tools/Intro.mdx +0 -7
- package/src/lib/stories/developer tools/components/InputEnclosure/InputEnclosure.stories.svelte +0 -38
- package/src/lib/stories/developer tools/components/InputEnclosure/Roundness/Roundness.stories.svelte +0 -20
- package/src/lib/stories/developer tools/components/InputEnclosure/Size/Size.stories.svelte +0 -16
- package/src/lib/stories/developer tools/components/InputEnclosure/WithIcon/WithIcon.stories.svelte +0 -47
- package/src/lib/stories/developer tools/components/UtilityButton/Size/Size.stories.svelte +0 -27
- package/src/lib/stories/developer tools/components/UtilityButton/UtilityButton.stories.svelte +0 -33
- package/src/lib/stories/philosophy/Colors/Colors.mdx +0 -43
- package/src/lib/stories/philosophy/Colors/Colors.stories.svelte +0 -22
- package/src/lib/stories/philosophy/Colors/Opacity.stories.svelte +0 -11
- package/src/lib/stories/philosophy/Themes.mdx +0 -23
- package/src/lib/types.ts +0 -6
- /package/dist/stories/components/Form/{SimpleSelect → Select}/Events/Events.stories.svelte.d.ts +0 -0
- /package/dist/stories/components/{Form/SimpleSelect → Layout/Menu/MenuItem}/Size/Size.stories.svelte.d.ts +0 -0
- /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Colors.stories.svelte +0 -0
- /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Colors.stories.svelte.d.ts +0 -0
- /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Colors.svelte +0 -0
- /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Colors.svelte.d.ts +0 -0
- /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Opacity.stories.svelte +0 -0
- /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Opacity.stories.svelte.d.ts +0 -0
- /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Opacity.svelte +0 -0
- /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Opacity.svelte.d.ts +0 -0
- /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Swatches/Palette.svelte.d.ts +0 -0
- /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Swatches/Swatch.svelte.d.ts +0 -0
- /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Swatches/Swatches.svelte.d.ts +0 -0
- /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/utils/color.d.ts +0 -0
- /package/src/lib/stories/{philosophy → developer tools/philosophy}/Colors/Colors.svelte +0 -0
- /package/src/lib/stories/{philosophy → developer tools/philosophy}/Colors/Opacity.svelte +0 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
<script module lang="ts">import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
2
|
+
import { Menu, MenuItem, Popper } from '../../../../index.js';
|
|
3
|
+
import Button from '../../../components/Form/Button/Button.svelte';
|
|
4
|
+
import { positionXArray, positionYArray } from '../../../../types/position.js';
|
|
5
|
+
export const storyPopperArgTypes = {
|
|
6
|
+
popupPositionX: {
|
|
7
|
+
control: { type: 'select' },
|
|
8
|
+
options: positionXArray,
|
|
9
|
+
},
|
|
10
|
+
popupPositionY: {
|
|
11
|
+
control: { type: 'select' },
|
|
12
|
+
options: positionYArray,
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
// More on how to set up stories at: https://storybook.js.org/docs/writing-stories
|
|
16
|
+
const { Story } = defineMeta({
|
|
17
|
+
component: Popper,
|
|
18
|
+
tags: ['autodocs'],
|
|
19
|
+
argTypes: storyPopperArgTypes,
|
|
20
|
+
parameters: {
|
|
21
|
+
docs: {
|
|
22
|
+
story: {
|
|
23
|
+
height: '200px',
|
|
24
|
+
inline: false,
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
let open = $state(false);
|
|
30
|
+
</script>
|
|
31
|
+
|
|
32
|
+
<Story name="Default" args={{ open, onClickOutside: () => (open = false) }} asChild>
|
|
33
|
+
<Popper {open} onClickOutside={() => (open = false)}>
|
|
34
|
+
<Button onclick={() => (open = true)}>Click to see Popup</Button>
|
|
35
|
+
{#snippet popupChildren()}
|
|
36
|
+
<Menu>
|
|
37
|
+
<MenuItem>One</MenuItem>
|
|
38
|
+
<MenuItem>Two</MenuItem>
|
|
39
|
+
<MenuItem>Three</MenuItem>
|
|
40
|
+
</Menu>
|
|
41
|
+
{/snippet}
|
|
42
|
+
</Popper>
|
|
43
|
+
</Story>
|
|
44
|
+
|
|
45
|
+
<Story name="MenuOpen" args={{ open: true }} asChild>
|
|
46
|
+
<Popper open>
|
|
47
|
+
Hello! how are you doing?
|
|
48
|
+
{#snippet popupChildren()}
|
|
49
|
+
<Menu>
|
|
50
|
+
<MenuItem>One</MenuItem>
|
|
51
|
+
<MenuItem>Two</MenuItem>
|
|
52
|
+
<MenuItem>Three</MenuItem>
|
|
53
|
+
</Menu>
|
|
54
|
+
{/snippet}
|
|
55
|
+
</Popper>
|
|
56
|
+
</Story>
|
|
57
|
+
|
|
58
|
+
<Story
|
|
59
|
+
name="CustomPaperProps"
|
|
60
|
+
args={{
|
|
61
|
+
open: true,
|
|
62
|
+
paperProps: {
|
|
63
|
+
color: 'primary',
|
|
64
|
+
},
|
|
65
|
+
}}
|
|
66
|
+
asChild
|
|
67
|
+
>
|
|
68
|
+
<Popper
|
|
69
|
+
open
|
|
70
|
+
paperProps={{
|
|
71
|
+
color: 'primary',
|
|
72
|
+
}}
|
|
73
|
+
>
|
|
74
|
+
Hello! how are you doing?
|
|
75
|
+
{#snippet popupChildren()}
|
|
76
|
+
<Menu>
|
|
77
|
+
<MenuItem>One</MenuItem>
|
|
78
|
+
<MenuItem>Two</MenuItem>
|
|
79
|
+
<MenuItem>Three</MenuItem>
|
|
80
|
+
</Menu>
|
|
81
|
+
{/snippet}
|
|
82
|
+
</Popper>
|
|
83
|
+
</Story>
|
|
84
|
+
|
|
85
|
+
<Story name="FullWidth" asChild>
|
|
86
|
+
<Popper {open} fullWidth onClickOutside={() => (open = false)}>
|
|
87
|
+
<Button onclick={() => (open = true)}>Click to see Popup</Button>
|
|
88
|
+
|
|
89
|
+
{#snippet popupChildren()}
|
|
90
|
+
<Menu>
|
|
91
|
+
<MenuItem>One</MenuItem>
|
|
92
|
+
<MenuItem>Two</MenuItem>
|
|
93
|
+
<MenuItem>Three</MenuItem>
|
|
94
|
+
</Menu>
|
|
95
|
+
{/snippet}
|
|
96
|
+
</Popper>
|
|
97
|
+
</Story>
|
|
98
|
+
|
|
99
|
+
<Story
|
|
100
|
+
name="CustomPopup"
|
|
101
|
+
args={{
|
|
102
|
+
open,
|
|
103
|
+
onClickOutside: () => (open = false),
|
|
104
|
+
}}
|
|
105
|
+
asChild
|
|
106
|
+
>
|
|
107
|
+
<Popper {open} onClickOutside={() => (open = false)}>
|
|
108
|
+
<Button onclick={() => (open = true)}>Click to see Popup</Button>
|
|
109
|
+
|
|
110
|
+
{#snippet customPopup(popperLocation)}
|
|
111
|
+
{#if open}
|
|
112
|
+
<Menu>
|
|
113
|
+
<MenuItem>{popperLocation?.height}</MenuItem>
|
|
114
|
+
<MenuItem>{popperLocation?.width}</MenuItem>
|
|
115
|
+
</Menu>
|
|
116
|
+
{/if}
|
|
117
|
+
{/snippet}
|
|
118
|
+
</Popper>
|
|
119
|
+
</Story>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { StoryBookArgTypes } from '../../../../storybook-types.js';
|
|
2
|
+
import { Popper } from '../../../../index.js';
|
|
3
|
+
export declare const storyPopperArgTypes: StoryBookArgTypes;
|
|
4
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
5
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
6
|
+
$$bindings?: Bindings;
|
|
7
|
+
} & Exports;
|
|
8
|
+
(internal: unknown, props: {
|
|
9
|
+
$$events?: Events;
|
|
10
|
+
$$slots?: Slots;
|
|
11
|
+
}): Exports & {
|
|
12
|
+
$set?: any;
|
|
13
|
+
$on?: any;
|
|
14
|
+
};
|
|
15
|
+
z_$$bindings?: Bindings;
|
|
16
|
+
}
|
|
17
|
+
declare const Popper: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
18
|
+
[evt: string]: CustomEvent<any>;
|
|
19
|
+
}, {}, {}, string>;
|
|
20
|
+
type Popper = InstanceType<typeof Popper>;
|
|
21
|
+
export default Popper;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
<script lang="ts" module>import PopperPopup from './PopperPopup/PopperPopup.svelte';
|
|
2
|
+
import { clickOutside } from '../../directives/clickOutside/clickOutside.js';
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<script lang="ts">"use strict";
|
|
6
|
+
let { children, popupChildren, id, class: className = '', ref = $bindable(), open = false, popupRef = $bindable(), paperProps, popupMaxHeight, popupWidth, popupClass, popupPositionX, popupPositionY, popupOffsetX, popupOffsetY, onClickOutside = () => { }, customPopup, popperHeightForVerticalPosition, lockPoistions, fullWidth = false, } = $props();
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
8
|
+
let customPopupTyped = customPopup;
|
|
9
|
+
let popperContainerRef = $state();
|
|
10
|
+
let popperLocation = $state();
|
|
11
|
+
function capturePopperLocation() {
|
|
12
|
+
if (!popperContainerRef) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
popperLocation = popperContainerRef.getBoundingClientRect();
|
|
16
|
+
}
|
|
17
|
+
$effect(() => {
|
|
18
|
+
if (!popperContainerRef) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
capturePopperLocation();
|
|
22
|
+
window.addEventListener('resize', capturePopperLocation);
|
|
23
|
+
return () => {
|
|
24
|
+
window.removeEventListener('resize', capturePopperLocation);
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<div
|
|
30
|
+
class:fullWidth
|
|
31
|
+
class={['dodo-ui-Popper', className].join(' ')}
|
|
32
|
+
bind:this={ref}
|
|
33
|
+
{id}
|
|
34
|
+
use:clickOutside={onClickOutside}
|
|
35
|
+
>
|
|
36
|
+
<div class="PopperContainer" bind:this={popperContainerRef}>
|
|
37
|
+
{#if children}
|
|
38
|
+
{@render children()}
|
|
39
|
+
{/if}
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
{#if customPopupTyped}
|
|
43
|
+
{@render customPopupTyped(popperLocation)}
|
|
44
|
+
{:else if open && popperLocation}
|
|
45
|
+
<PopperPopup
|
|
46
|
+
{popperLocation}
|
|
47
|
+
{paperProps}
|
|
48
|
+
{popupMaxHeight}
|
|
49
|
+
{popupWidth}
|
|
50
|
+
{popupPositionX}
|
|
51
|
+
{popupPositionY}
|
|
52
|
+
{popupOffsetX}
|
|
53
|
+
{popupOffsetY}
|
|
54
|
+
{popperHeightForVerticalPosition}
|
|
55
|
+
{lockPoistions}
|
|
56
|
+
class={popupClass}
|
|
57
|
+
>
|
|
58
|
+
{#if popupChildren}
|
|
59
|
+
{@render popupChildren()}
|
|
60
|
+
{/if}
|
|
61
|
+
</PopperPopup>
|
|
62
|
+
{/if}
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
<style>.dodo-ui-Popper {
|
|
66
|
+
position: relative;
|
|
67
|
+
display: inline-flex;
|
|
68
|
+
flex-wrap: wrap;
|
|
69
|
+
}
|
|
70
|
+
.dodo-ui-Popper.fullWidth {
|
|
71
|
+
display: flex;
|
|
72
|
+
width: 100%;
|
|
73
|
+
}
|
|
74
|
+
.dodo-ui-Popper.fullWidth .PopperContainer {
|
|
75
|
+
display: block;
|
|
76
|
+
width: 100%;
|
|
77
|
+
}</style>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { PaperProps } from '../../../components/Layout/Paper/Paper.svelte';
|
|
3
|
+
import type { PositionX, PositionY } from '../../../../types/position.js';
|
|
4
|
+
export interface PopperProps {
|
|
5
|
+
/** Popper contents goes here */
|
|
6
|
+
children?: Snippet;
|
|
7
|
+
/** Popper ref */
|
|
8
|
+
ref?: HTMLDivElement;
|
|
9
|
+
/** Id */
|
|
10
|
+
id?: string;
|
|
11
|
+
/** Title (for tooltip) */
|
|
12
|
+
title?: string;
|
|
13
|
+
/** Custom css class*/
|
|
14
|
+
class?: string;
|
|
15
|
+
/** Open popper */
|
|
16
|
+
open?: boolean;
|
|
17
|
+
/** Full width Popper? */
|
|
18
|
+
fullWidth?: boolean;
|
|
19
|
+
/** PopperPopup ref */
|
|
20
|
+
popupRef?: HTMLDivElement;
|
|
21
|
+
/** PopperPopup contents goes here */
|
|
22
|
+
popupChildren?: Snippet;
|
|
23
|
+
/** PaperProps: Paper component props for PopperPopup */
|
|
24
|
+
paperProps?: Partial<PaperProps>;
|
|
25
|
+
/** PopperPopup Max height. Use css compatible value */
|
|
26
|
+
popupMaxHeight?: string;
|
|
27
|
+
/** PopperPopup Width. Use css compatible value */
|
|
28
|
+
popupWidth?: string;
|
|
29
|
+
/** popup Custom css class*/
|
|
30
|
+
popupClass?: string;
|
|
31
|
+
/** Popup stick horizontally */
|
|
32
|
+
popupPositionX?: PositionX;
|
|
33
|
+
/** Popup stick vertically */
|
|
34
|
+
popupPositionY?: PositionY;
|
|
35
|
+
/** vertical offset/gap between Popup and content */
|
|
36
|
+
popupOffsetY?: number;
|
|
37
|
+
/** Horizontal offset/gap between Popup and content */
|
|
38
|
+
popupOffsetX?: number;
|
|
39
|
+
/** Lock positions, disable auto top, bottom position based */
|
|
40
|
+
lockPoistions?: boolean;
|
|
41
|
+
/** Popper Height For Vertical Position, default 300 */
|
|
42
|
+
popperHeightForVerticalPosition?: number;
|
|
43
|
+
/** Click Outside event */
|
|
44
|
+
onClickOutside?: () => void;
|
|
45
|
+
/** Custom Popup */
|
|
46
|
+
customPopup?: (popperLocation?: DOMRect) => Snippet;
|
|
47
|
+
}
|
|
48
|
+
declare const Popper: import("svelte").Component<PopperProps, {}, "ref" | "popupRef">;
|
|
49
|
+
type Popper = ReturnType<typeof Popper>;
|
|
50
|
+
export default Popper;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<script module lang="ts">import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
2
|
+
import { Menu, MenuItem, PopperPopup } from '../../../../../index.js';
|
|
3
|
+
import { positionXArray, positionYArray } from '../../../../../types/position.js';
|
|
4
|
+
export const storyPopperPopupArgTypes = {
|
|
5
|
+
popupPositionX: {
|
|
6
|
+
control: { type: 'select' },
|
|
7
|
+
options: positionXArray,
|
|
8
|
+
},
|
|
9
|
+
popupPositionY: {
|
|
10
|
+
control: { type: 'select' },
|
|
11
|
+
options: positionYArray,
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
// More on how to set up stories at: https://storybook.js.org/docs/writing-stories
|
|
15
|
+
const { Story } = defineMeta({
|
|
16
|
+
component: PopperPopup,
|
|
17
|
+
tags: ['autodocs'],
|
|
18
|
+
argTypes: storyPopperPopupArgTypes,
|
|
19
|
+
parameters: {
|
|
20
|
+
docs: {
|
|
21
|
+
story: {
|
|
22
|
+
height: '200px',
|
|
23
|
+
inline: false,
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
</script>
|
|
29
|
+
|
|
30
|
+
<Story name="Default" asChild>
|
|
31
|
+
<PopperPopup>
|
|
32
|
+
<Menu>
|
|
33
|
+
<MenuItem>One</MenuItem>
|
|
34
|
+
<MenuItem>Two</MenuItem>
|
|
35
|
+
<MenuItem>Three</MenuItem>
|
|
36
|
+
</Menu>
|
|
37
|
+
</PopperPopup>
|
|
38
|
+
</Story>
|
|
39
|
+
|
|
40
|
+
<Story
|
|
41
|
+
name="CustomPaperProps"
|
|
42
|
+
args={{
|
|
43
|
+
paperProps: {
|
|
44
|
+
color: 'primary',
|
|
45
|
+
},
|
|
46
|
+
}}
|
|
47
|
+
asChild
|
|
48
|
+
>
|
|
49
|
+
<PopperPopup
|
|
50
|
+
paperProps={{
|
|
51
|
+
color: 'primary',
|
|
52
|
+
}}
|
|
53
|
+
>
|
|
54
|
+
<Menu>
|
|
55
|
+
<MenuItem>One</MenuItem>
|
|
56
|
+
<MenuItem>Two</MenuItem>
|
|
57
|
+
<MenuItem>Three</MenuItem>
|
|
58
|
+
</Menu>
|
|
59
|
+
</PopperPopup>
|
|
60
|
+
</Story>
|
package/dist/stories/developer tools/components/Popper/PopperPopup/PopperPopup.stories.svelte.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { StoryBookArgTypes } from '../../../../../storybook-types.js';
|
|
2
|
+
import { PopperPopup } from '../../../../../index.js';
|
|
3
|
+
export declare const storyPopperPopupArgTypes: StoryBookArgTypes;
|
|
4
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
5
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
6
|
+
$$bindings?: Bindings;
|
|
7
|
+
} & Exports;
|
|
8
|
+
(internal: unknown, props: {
|
|
9
|
+
$$events?: Events;
|
|
10
|
+
$$slots?: Slots;
|
|
11
|
+
}): Exports & {
|
|
12
|
+
$set?: any;
|
|
13
|
+
$on?: any;
|
|
14
|
+
};
|
|
15
|
+
z_$$bindings?: Bindings;
|
|
16
|
+
}
|
|
17
|
+
declare const PopperPopup: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
18
|
+
[evt: string]: CustomEvent<any>;
|
|
19
|
+
}, {}, {}, string>;
|
|
20
|
+
type PopperPopup = InstanceType<typeof PopperPopup>;
|
|
21
|
+
export default PopperPopup;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<script lang="ts" module>import { Paper } from '../../../../../index.js';
|
|
2
|
+
import { getPopupPosition } from './utils/getPopupPosition.js';
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<script lang="ts">"use strict";
|
|
6
|
+
let { children, paperProps = {}, class: className = '', popupWidth: width, popupMaxHeight: maxHeight, popupPositionX: positionX = 'left', popupPositionY: positionY = 'bottom', popperLocation, ref = $bindable(), popupOffsetX: offsetX = 0, popupOffsetY: offsetY = 12, popperHeightForVerticalPosition = 100, lockPoistions = false, } = $props();
|
|
7
|
+
const popperWidth = $derived(width || '100%');
|
|
8
|
+
const popupMaxHeight = $derived(maxHeight || '400px');
|
|
9
|
+
let left = $state(null);
|
|
10
|
+
let right = $state(null);
|
|
11
|
+
let top = $state(null);
|
|
12
|
+
let bottom = $state(null);
|
|
13
|
+
$effect(() => {
|
|
14
|
+
const values = getPopupPosition({
|
|
15
|
+
positionX,
|
|
16
|
+
positionY,
|
|
17
|
+
height: popperLocation?.height || 0,
|
|
18
|
+
width: popperLocation?.width || 0,
|
|
19
|
+
top: popperLocation?.top || 0,
|
|
20
|
+
bottom: popperLocation?.bottom || 0,
|
|
21
|
+
left: popperLocation?.left || 0,
|
|
22
|
+
right: popperLocation?.right || 0,
|
|
23
|
+
offsetX: offsetX,
|
|
24
|
+
offsetY: offsetY,
|
|
25
|
+
popperHeight: popperHeightForVerticalPosition,
|
|
26
|
+
lockPoistions,
|
|
27
|
+
});
|
|
28
|
+
left = values.left;
|
|
29
|
+
right = values.right;
|
|
30
|
+
top = values.top;
|
|
31
|
+
bottom = values.bottom;
|
|
32
|
+
});
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<div
|
|
36
|
+
class={[
|
|
37
|
+
'dodo-ui-PopperPopup',
|
|
38
|
+
`positionX--${positionX}`,
|
|
39
|
+
`positionY--${positionY}`,
|
|
40
|
+
className,
|
|
41
|
+
].join(' ')}
|
|
42
|
+
bind:this={ref}
|
|
43
|
+
style={`width: ${popperWidth};
|
|
44
|
+
${left !== null ? `left: ${left}px;` : ''}
|
|
45
|
+
${right !== null ? `right: ${right}px;` : ''}
|
|
46
|
+
${top !== null ? `top: ${top}px;` : ''}
|
|
47
|
+
${bottom !== null ? `bottom: ${bottom}px;` : ''}
|
|
48
|
+
${positionX === 'center' ? `margin: auto;` : ''}
|
|
49
|
+
`}
|
|
50
|
+
>
|
|
51
|
+
<Paper shadow={3} {...paperProps}>
|
|
52
|
+
<section style={`max-height: ${popupMaxHeight};`}>
|
|
53
|
+
{#if children}
|
|
54
|
+
{@render children()}
|
|
55
|
+
{/if}
|
|
56
|
+
</section>
|
|
57
|
+
</Paper>
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<style>.dodo-ui-PopperPopup {
|
|
61
|
+
position: absolute;
|
|
62
|
+
z-index: var(--dodo-ui-z-index-4);
|
|
63
|
+
}
|
|
64
|
+
.dodo-ui-PopperPopup section {
|
|
65
|
+
overflow: auto;
|
|
66
|
+
}</style>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { PaperProps } from '../../../../components/Layout/Paper/Paper.svelte';
|
|
2
|
+
import type { PositionX, PositionY } from '../../../../../types/position.js';
|
|
3
|
+
import type { Snippet } from 'svelte';
|
|
4
|
+
export interface PopperPopupProps {
|
|
5
|
+
/** Popup contents goes here*/
|
|
6
|
+
children?: Snippet;
|
|
7
|
+
/** Popup ref */
|
|
8
|
+
ref?: HTMLDivElement;
|
|
9
|
+
/** PaperProps: Paper component props */
|
|
10
|
+
paperProps?: Partial<PaperProps>;
|
|
11
|
+
/** Max height. Use css compatible value */
|
|
12
|
+
popupMaxHeight?: string;
|
|
13
|
+
/** popup Width. Use css compatible value */
|
|
14
|
+
popupWidth?: string;
|
|
15
|
+
/** Custom css class */
|
|
16
|
+
class?: string;
|
|
17
|
+
/** Position of Popper content */
|
|
18
|
+
popperLocation?: DOMRect;
|
|
19
|
+
/** Popup stick horizontally */
|
|
20
|
+
popupPositionX?: PositionX;
|
|
21
|
+
/** Popup stick vertically */
|
|
22
|
+
popupPositionY?: PositionY;
|
|
23
|
+
/** vertical offset/gap between Popup and content */
|
|
24
|
+
popupOffsetY?: number;
|
|
25
|
+
/** Horizontal offset/gap between Popup and content */
|
|
26
|
+
popupOffsetX?: number;
|
|
27
|
+
/** Lock positions, disable auto top, bottom position based */
|
|
28
|
+
lockPoistions?: boolean;
|
|
29
|
+
/** Popper Height For Vertical Position, default 300 */
|
|
30
|
+
popperHeightForVerticalPosition?: number;
|
|
31
|
+
}
|
|
32
|
+
declare const PopperPopup: import("svelte").Component<PopperPopupProps, {}, "ref">;
|
|
33
|
+
type PopperPopup = ReturnType<typeof PopperPopup>;
|
|
34
|
+
export default PopperPopup;
|
package/dist/stories/developer tools/components/Popper/PopperPopup/utils/getPopupPosition.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { PositionX, PositionY } from '../../../../../../types/position.js';
|
|
2
|
+
export interface GetPopupPositionProps {
|
|
3
|
+
positionX: PositionX;
|
|
4
|
+
positionY: PositionY;
|
|
5
|
+
height: number;
|
|
6
|
+
width: number;
|
|
7
|
+
top: number;
|
|
8
|
+
bottom: number;
|
|
9
|
+
left: number;
|
|
10
|
+
right: number;
|
|
11
|
+
offsetX?: number;
|
|
12
|
+
offsetY?: number;
|
|
13
|
+
popperHeight: number;
|
|
14
|
+
lockPoistions: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function getPopupPosition(props: GetPopupPositionProps): {
|
|
17
|
+
left: number | null;
|
|
18
|
+
right: number | null;
|
|
19
|
+
top: number | null;
|
|
20
|
+
bottom: number | null;
|
|
21
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { browser } from '$app/environment';
|
|
2
|
+
export function getPopupPosition(props) {
|
|
3
|
+
let left = null;
|
|
4
|
+
let right = null;
|
|
5
|
+
let top = null;
|
|
6
|
+
let bottom = null;
|
|
7
|
+
// exit if not browser
|
|
8
|
+
if (!browser) {
|
|
9
|
+
return {
|
|
10
|
+
left,
|
|
11
|
+
right,
|
|
12
|
+
top,
|
|
13
|
+
bottom,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
const innerHeight = window.innerHeight;
|
|
17
|
+
const gapBottom = innerHeight - props.bottom;
|
|
18
|
+
const popperHeight = props.popperHeight;
|
|
19
|
+
const offsetX = props.offsetX ? props.offsetX : 0;
|
|
20
|
+
const offsetY = props.offsetY ? props.offsetY : 0;
|
|
21
|
+
const positionX = props.positionX;
|
|
22
|
+
let positionY = props.positionY;
|
|
23
|
+
if (!props.lockPoistions) {
|
|
24
|
+
if (positionY === 'top' && props.top < popperHeight + offsetY) {
|
|
25
|
+
positionY = 'bottom';
|
|
26
|
+
}
|
|
27
|
+
else if (positionY === 'bottom' && gapBottom < popperHeight + offsetY) {
|
|
28
|
+
positionY = 'top';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
switch (positionX) {
|
|
32
|
+
case 'left':
|
|
33
|
+
left = offsetX;
|
|
34
|
+
right = null;
|
|
35
|
+
break;
|
|
36
|
+
case 'center':
|
|
37
|
+
left = 0;
|
|
38
|
+
right = 0;
|
|
39
|
+
break;
|
|
40
|
+
case 'right':
|
|
41
|
+
left = null;
|
|
42
|
+
right = offsetX;
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
switch (positionY) {
|
|
46
|
+
case 'top':
|
|
47
|
+
case 'middle':
|
|
48
|
+
top = null;
|
|
49
|
+
bottom = props.height + offsetY;
|
|
50
|
+
break;
|
|
51
|
+
case 'bottom':
|
|
52
|
+
top = props.height + offsetY;
|
|
53
|
+
bottom = null;
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
left,
|
|
58
|
+
right,
|
|
59
|
+
top,
|
|
60
|
+
bottom,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
<script module lang="ts">import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
2
|
+
import { Menu, MenuItem, Popper } from '../../../../../../index.js';
|
|
3
|
+
import Button from '../../../../../components/Form/Button/Button.svelte';
|
|
4
|
+
import { storyPopperArgTypes } from '../../Popper.stories.svelte';
|
|
5
|
+
// More on how to set up stories at: https://storybook.js.org/docs/writing-stories
|
|
6
|
+
const { Story } = defineMeta({
|
|
7
|
+
component: Popper,
|
|
8
|
+
tags: ['autodocs'],
|
|
9
|
+
argTypes: storyPopperArgTypes,
|
|
10
|
+
parameters: {
|
|
11
|
+
docs: {
|
|
12
|
+
story: {
|
|
13
|
+
height: '200px',
|
|
14
|
+
inline: false,
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
let open = $state(false);
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<!-- Positions will auto adjust depending on the space on top and bottom -->
|
|
23
|
+
<Story
|
|
24
|
+
name="PositionAutoAdjust"
|
|
25
|
+
args={{ open, onClickOutside: () => (open = false), popupPositionY: 'top' }}
|
|
26
|
+
asChild
|
|
27
|
+
>
|
|
28
|
+
<Popper {open} onClickOutside={() => (open = false)} popupPositionY="top">
|
|
29
|
+
<Button onclick={() => (open = true)}>Click to see Popup</Button>
|
|
30
|
+
{#snippet popupChildren()}
|
|
31
|
+
<Menu>
|
|
32
|
+
<MenuItem>One</MenuItem>
|
|
33
|
+
<MenuItem>Two</MenuItem>
|
|
34
|
+
<MenuItem>Three</MenuItem>
|
|
35
|
+
</Menu>
|
|
36
|
+
{/snippet}
|
|
37
|
+
</Popper>
|
|
38
|
+
</Story>
|
|
39
|
+
|
|
40
|
+
<!-- Positions will not auto adjust if you use `lockPoistions` -->
|
|
41
|
+
<Story
|
|
42
|
+
name="LockPoistions"
|
|
43
|
+
args={{
|
|
44
|
+
open,
|
|
45
|
+
onClickOutside: () => (open = false),
|
|
46
|
+
popupPositionY: 'top',
|
|
47
|
+
lockPoistions: true,
|
|
48
|
+
}}
|
|
49
|
+
asChild
|
|
50
|
+
>
|
|
51
|
+
<Popper {open} lockPoistions onClickOutside={() => (open = false)} popupPositionY="top">
|
|
52
|
+
<Button onclick={() => (open = true)}>Click to see Popup</Button>
|
|
53
|
+
{#snippet popupChildren()}
|
|
54
|
+
<Menu>
|
|
55
|
+
<MenuItem>One</MenuItem>
|
|
56
|
+
<MenuItem>Two</MenuItem>
|
|
57
|
+
<MenuItem>Three</MenuItem>
|
|
58
|
+
</Menu>
|
|
59
|
+
{/snippet}
|
|
60
|
+
</Popper>
|
|
61
|
+
</Story>
|
|
62
|
+
|
|
63
|
+
<!-- you can also adjust `popperHeightForVerticalPosition` to achive the same -->
|
|
64
|
+
<Story
|
|
65
|
+
name="HeightForVerticalPosition"
|
|
66
|
+
args={{
|
|
67
|
+
open,
|
|
68
|
+
onClickOutside: () => (open = false),
|
|
69
|
+
popupPositionY: 'top',
|
|
70
|
+
popperHeightForVerticalPosition: 3,
|
|
71
|
+
}}
|
|
72
|
+
asChild
|
|
73
|
+
>
|
|
74
|
+
<Popper
|
|
75
|
+
{open}
|
|
76
|
+
onClickOutside={() => (open = false)}
|
|
77
|
+
popupPositionY="top"
|
|
78
|
+
popperHeightForVerticalPosition={3}
|
|
79
|
+
>
|
|
80
|
+
<Button onclick={() => (open = true)}>Click to see Popup</Button>
|
|
81
|
+
{#snippet popupChildren()}
|
|
82
|
+
<Menu>
|
|
83
|
+
<MenuItem>One</MenuItem>
|
|
84
|
+
<MenuItem>Two</MenuItem>
|
|
85
|
+
<MenuItem>Three</MenuItem>
|
|
86
|
+
</Menu>
|
|
87
|
+
{/snippet}
|
|
88
|
+
</Popper>
|
|
89
|
+
</Story>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
2
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
3
|
+
$$bindings?: Bindings;
|
|
4
|
+
} & Exports;
|
|
5
|
+
(internal: unknown, props: {
|
|
6
|
+
$$events?: Events;
|
|
7
|
+
$$slots?: Slots;
|
|
8
|
+
}): Exports & {
|
|
9
|
+
$set?: any;
|
|
10
|
+
$on?: any;
|
|
11
|
+
};
|
|
12
|
+
z_$$bindings?: Bindings;
|
|
13
|
+
}
|
|
14
|
+
declare const AutoPosition: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
15
|
+
[evt: string]: CustomEvent<any>;
|
|
16
|
+
}, {}, {}, string>;
|
|
17
|
+
type AutoPosition = InstanceType<typeof AutoPosition>;
|
|
18
|
+
export default AutoPosition;
|