@flightlesslabs/dodo-ui 0.11.0 → 0.11.1

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.
Files changed (171) hide show
  1. package/dist/stories/components/Form/DatePicker/DatePicker.svelte +1 -11
  2. package/dist/stories/developer tools/components/Popper/Popper.stories.svelte +16 -0
  3. package/dist/stories/developer tools/components/Popper/Popper.svelte +10 -14
  4. package/dist/stories/developer tools/components/Popper/Popper.svelte.d.ts +2 -0
  5. package/dist/stories/developer tools/components/Popper/PopperPopup/PopperPopup.svelte +25 -11
  6. package/dist/stories/developer tools/components/Popper/PopperPopup/PopperPopup.svelte.d.ts +2 -0
  7. package/dist/stories/developer tools/components/Popper/PopperPopup/utils/getPopupPosition.d.ts +10 -8
  8. package/dist/stories/developer tools/components/Popper/PopperPopup/utils/getPopupPosition.js +40 -23
  9. package/package.json +19 -21
  10. package/src/lib/stories/Home.mdx +59 -0
  11. package/src/lib/stories/assets/dark-theme-toggle.png +0 -0
  12. package/src/lib/stories/components/Form/Button/Button.stories.svelte +61 -0
  13. package/src/lib/stories/components/Form/Button/Color/Color.stories.svelte +43 -0
  14. package/src/lib/stories/components/Form/Button/Events/Events.stories.svelte +36 -0
  15. package/src/lib/stories/components/Form/Button/IconButton/IconButton.stories.svelte +43 -0
  16. package/src/lib/stories/components/Form/Button/Roundness/Roundness.stories.svelte +23 -0
  17. package/src/lib/stories/components/Form/Button/Size/Size.stories.svelte +16 -0
  18. package/src/lib/stories/components/Form/Button/Variant/Variant.stories.svelte +18 -0
  19. package/src/lib/stories/components/Form/DatePicker/Color/Color.stories.svelte +47 -0
  20. package/src/lib/stories/components/Form/DatePicker/Controls/Controls.stories.svelte +58 -0
  21. package/src/lib/stories/components/Form/DatePicker/Customize/Customize.stories.svelte +167 -0
  22. package/src/lib/stories/components/Form/DatePicker/DatePicker.stories.svelte +107 -0
  23. package/src/lib/stories/components/Form/DatePicker/DatePicker.svelte +1 -13
  24. package/src/lib/stories/components/Form/DatePicker/Events/Events.stories.svelte +147 -0
  25. package/src/lib/stories/components/Form/DatePicker/FilterDates/FilterDates.stories.svelte +61 -0
  26. package/src/lib/stories/components/Form/DatePicker/Positions/AutoPosition/AutoPosition.stories.svelte +46 -0
  27. package/src/lib/stories/components/Form/DatePicker/Positions/Positions.stories.svelte +57 -0
  28. package/src/lib/stories/components/Form/DatePicker/Roundness/Roundness.stories.svelte +38 -0
  29. package/src/lib/stories/components/Form/DatePicker/Size/Size.stories.svelte +41 -0
  30. package/src/lib/stories/components/Form/DatePicker/WithIcon/WithIcon.stories.svelte +41 -0
  31. package/src/lib/stories/components/Form/FormControl/FormControl.stories.svelte +28 -0
  32. package/src/lib/stories/components/Form/Label/Label.stories.svelte +13 -0
  33. package/src/lib/stories/components/Form/Message/Color/Color.stories.svelte +36 -0
  34. package/src/lib/stories/components/Form/Message/Message.stories.svelte +27 -0
  35. package/src/lib/stories/components/Form/Message/Size/Size.stories.svelte +22 -0
  36. package/src/lib/stories/components/Form/NumericInput/Events/Events.stories.svelte +134 -0
  37. package/src/lib/stories/components/Form/NumericInput/NumericInput.stories.svelte +84 -0
  38. package/src/lib/stories/components/Form/NumericInput/Validation/Validation.stories.svelte +87 -0
  39. package/src/lib/stories/components/Form/PasswordInput/Events/Events.stories.svelte +132 -0
  40. package/src/lib/stories/components/Form/PasswordInput/PasswordInput.stories.svelte +58 -0
  41. package/src/lib/stories/components/Form/PasswordInput/Roundness/Roundness.stories.svelte +20 -0
  42. package/src/lib/stories/components/Form/PasswordInput/Size/Size.stories.svelte +16 -0
  43. package/src/lib/stories/components/Form/PasswordInput/WithIcon/WithIcon.stories.svelte +31 -0
  44. package/src/lib/stories/components/Form/Select/Customize/Customize.stories.svelte +139 -0
  45. package/src/lib/stories/components/Form/Select/DropDownArrow/DropDownArrow.stories.svelte +63 -0
  46. package/src/lib/stories/components/Form/Select/Events/Events.stories.svelte +174 -0
  47. package/src/lib/stories/components/Form/Select/Options/OptionFormat.mdx +40 -0
  48. package/src/lib/stories/components/Form/Select/Positions/AutoPosition/AutoPosition.stories.svelte +58 -0
  49. package/src/lib/stories/components/Form/Select/Positions/Positions.stories.svelte +87 -0
  50. package/src/lib/stories/components/Form/Select/Roundness/Roundness.stories.svelte +32 -0
  51. package/src/lib/stories/components/Form/Select/Select.stories.svelte +125 -0
  52. package/src/lib/stories/components/Form/Select/Size/Size.stories.svelte +28 -0
  53. package/src/lib/stories/components/Form/Select/WithIcon/WithIcon.stories.svelte +43 -0
  54. package/src/lib/stories/components/Form/TextInput/Events/Events.stories.svelte +125 -0
  55. package/src/lib/stories/components/Form/TextInput/Roundness/Roundness.stories.svelte +21 -0
  56. package/src/lib/stories/components/Form/TextInput/Size/Size.stories.svelte +17 -0
  57. package/src/lib/stories/components/Form/TextInput/TextInput.stories.svelte +43 -0
  58. package/src/lib/stories/components/Form/TextInput/WithIcon/WithIcon.stories.svelte +47 -0
  59. package/src/lib/stories/components/Info/Calendar/Calendar.stories.svelte +121 -0
  60. package/src/lib/stories/components/Info/Calendar/Color/Color.stories.svelte +23 -0
  61. package/src/lib/stories/components/Info/Calendar/Controls/Controls.stories.svelte +26 -0
  62. package/src/lib/stories/components/Info/Calendar/Customize/Customize.stories.svelte +160 -0
  63. package/src/lib/stories/components/Info/Calendar/Events/Events.stories.svelte +122 -0
  64. package/src/lib/stories/components/Info/Calendar/FilterDates/FilterDates.stories.svelte +70 -0
  65. package/src/lib/stories/components/Info/Calendar/Size/Size.stories.svelte +20 -0
  66. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/CalendarControls.stories.svelte +36 -0
  67. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/CalendarMonthSelector/CalendarMonthSelector.stories.svelte +58 -0
  68. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/CalendarMonthSelector/Color/Color.stories.svelte +23 -0
  69. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/CalendarMonthSelector/Customize/Customize.stories.svelte +30 -0
  70. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/CalendarMonthSelector/Events/Events.stories.svelte +25 -0
  71. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/CalendarMonthSelector/NameTypes/NameTypes.stories.svelte +25 -0
  72. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/CalendarMonthSelector/Roundness/Roundness.stories.svelte +26 -0
  73. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/CalendarMonthSelector/Size/Size.stories.svelte +20 -0
  74. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/CalendarNavigation/CalendarNavigation.stories.svelte +36 -0
  75. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/CalendarNavigation/Color/Color.stories.svelte +19 -0
  76. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/CalendarNavigation/Customize/Customize.stories.svelte +33 -0
  77. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/CalendarNavigation/Events/Events.stories.svelte +37 -0
  78. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/CalendarNavigation/Size/Size.stories.svelte +16 -0
  79. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/CalendarYearSelector/CalendarYearSelector.stories.svelte +58 -0
  80. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/CalendarYearSelector/Color/Color.stories.svelte +23 -0
  81. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/CalendarYearSelector/Customize/Customize.stories.svelte +30 -0
  82. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/CalendarYearSelector/Events/Events.stories.svelte +25 -0
  83. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/CalendarYearSelector/Roundness/Roundness.stories.svelte +26 -0
  84. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/CalendarYearSelector/Size/Size.stories.svelte +20 -0
  85. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/Color/Color.stories.svelte +23 -0
  86. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/Controls/Controls.stories.svelte +21 -0
  87. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/Customize/Customize.stories.svelte +69 -0
  88. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/Events/Events.stories.svelte +61 -0
  89. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarControls/Size/Size.stories.svelte +20 -0
  90. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarDatesChart/CalendarDateChip/CalendarDateChip.stories.svelte +75 -0
  91. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarDatesChart/CalendarDateChip/Color/Color.stories.svelte +41 -0
  92. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarDatesChart/CalendarDateChip/Customize/Customize.stories.svelte +45 -0
  93. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarDatesChart/CalendarDateChip/Events/Events.stories.svelte +28 -0
  94. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarDatesChart/CalendarDateChip/Roundness/Roundness.stories.svelte +31 -0
  95. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarDatesChart/CalendarDateChip/Size/Size.stories.svelte +24 -0
  96. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarDatesChart/CalendarDateChip/SpecialChips/SpecialChips.stories.svelte +96 -0
  97. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarDatesChart/CalendarDatesChart.stories.svelte +104 -0
  98. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarDatesChart/CalendarWeek/CalendarWeek.stories.svelte +38 -0
  99. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarDatesChart/CalendarWeek/Customize/Customize.stories.svelte +32 -0
  100. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarDatesChart/CalendarWeek/NameTypes/NameTypes.stories.svelte +28 -0
  101. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarDatesChart/CalendarWeek/Size/Size.stories.svelte +16 -0
  102. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarDatesChart/Color/Color.stories.svelte +23 -0
  103. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarDatesChart/Customize/Customize.stories.svelte +68 -0
  104. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarDatesChart/Events/Events.stories.svelte +24 -0
  105. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarDatesChart/Size/Size.stories.svelte +20 -0
  106. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarMonthList/CalendarMonthChip/CalendarMonthChip.stories.svelte +40 -0
  107. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarMonthList/CalendarMonthChip/Color/Color.stories.svelte +29 -0
  108. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarMonthList/CalendarMonthChip/Customize/Customize.stories.svelte +33 -0
  109. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarMonthList/CalendarMonthChip/Events/Events.stories.svelte +23 -0
  110. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarMonthList/CalendarMonthChip/Roundness/Roundness.stories.svelte +26 -0
  111. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarMonthList/CalendarMonthChip/Size/Size.stories.svelte +19 -0
  112. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarMonthList/CalendarMonthList.stories.svelte +45 -0
  113. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarMonthList/Color/Color.stories.svelte +22 -0
  114. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarMonthList/Customize/Customize.stories.svelte +36 -0
  115. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarMonthList/Events/Events.stories.svelte +33 -0
  116. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarMonthList/Size/Size.stories.svelte +19 -0
  117. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarYearList/CalendarYearChip/CalendarYearChip.stories.svelte +41 -0
  118. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarYearList/CalendarYearChip/Color/Color.stories.svelte +30 -0
  119. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarYearList/CalendarYearChip/Customize/Customize.stories.svelte +33 -0
  120. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarYearList/CalendarYearChip/Events/Events.stories.svelte +24 -0
  121. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarYearList/CalendarYearChip/Roundness/Roundness.stories.svelte +27 -0
  122. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarYearList/CalendarYearChip/Size/Size.stories.svelte +20 -0
  123. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarYearList/CalendarYearList.stories.svelte +39 -0
  124. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarYearList/Color/Color.stories.svelte +23 -0
  125. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarYearList/Customize/Customize.stories.svelte +36 -0
  126. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarYearList/Events/Events.stories.svelte +24 -0
  127. package/src/lib/stories/components/Info/Calendar/SubComponents/CalendarYearList/Size/Size.stories.svelte +20 -0
  128. package/src/lib/stories/components/Info/Calendar/utils/createDateOfMonth/index.mdx +121 -0
  129. package/src/lib/stories/components/Info/Calendar/utils/getDatesOfMonth/index.mdx +37 -0
  130. package/src/lib/stories/components/Layout/Menu/DynamicMenu/Customize/Customize.stories.svelte +30 -0
  131. package/src/lib/stories/components/Layout/Menu/DynamicMenu/DynamicMenu.stories.svelte +56 -0
  132. package/src/lib/stories/components/Layout/Menu/DynamicMenu/Events/Events.stories.svelte +48 -0
  133. package/src/lib/stories/components/Layout/Menu/DynamicMenu/KeybaordNavigation/KeybaordNavigation.stories.svelte +29 -0
  134. package/src/lib/stories/components/Layout/Menu/DynamicMenu/Options/OptionFormat.mdx +72 -0
  135. package/src/lib/stories/components/Layout/Menu/Menu.stories.svelte +69 -0
  136. package/src/lib/stories/components/Layout/Menu/MenuItem/MenuItem.stories.svelte +34 -0
  137. package/src/lib/stories/components/Layout/Menu/MenuItem/Size/Size.stories.svelte +16 -0
  138. package/src/lib/stories/components/Layout/Menu/MenuItem/Type/Type.stories.svelte +21 -0
  139. package/src/lib/stories/components/Layout/Menu/Size/Size.stories.svelte +37 -0
  140. package/src/lib/stories/components/Layout/Paper/Color/Color.stories.svelte +63 -0
  141. package/src/lib/stories/components/Layout/Paper/Paper.stories.svelte +50 -0
  142. package/src/lib/stories/components/Layout/Paper/Roundness/Roundness.stories.svelte +25 -0
  143. package/src/lib/stories/components/Layout/Paper/Shadow/Shadow.stories.svelte +24 -0
  144. package/src/lib/stories/components/Layout/Separator/Color/Color.stories.svelte +19 -0
  145. package/src/lib/stories/components/Layout/Separator/Separator.stories.svelte +30 -0
  146. package/src/lib/stories/developer tools/Intro.mdx +9 -0
  147. package/src/lib/stories/developer tools/components/DynamicInput/DynamicInput.stories.svelte +53 -0
  148. package/src/lib/stories/developer tools/components/DynamicInput/Events/Events.stories.svelte +121 -0
  149. package/src/lib/stories/developer tools/components/DynamicInput/Size/Size.stories.svelte +17 -0
  150. package/src/lib/stories/developer tools/components/InputEnclosure/InputEnclosure.stories.svelte +38 -0
  151. package/src/lib/stories/developer tools/components/InputEnclosure/Roundness/Roundness.stories.svelte +20 -0
  152. package/src/lib/stories/developer tools/components/InputEnclosure/Size/Size.stories.svelte +16 -0
  153. package/src/lib/stories/developer tools/components/InputEnclosure/WithIcon/WithIcon.stories.svelte +47 -0
  154. package/src/lib/stories/developer tools/components/Popper/Popper.stories.svelte +140 -0
  155. package/src/lib/stories/developer tools/components/Popper/Popper.svelte +13 -14
  156. package/src/lib/stories/developer tools/components/Popper/PopperPopup/PopperPopup.stories.svelte +64 -0
  157. package/src/lib/stories/developer tools/components/Popper/PopperPopup/PopperPopup.svelte +36 -10
  158. package/src/lib/stories/developer tools/components/Popper/PopperPopup/utils/getPopupPosition.ts +45 -31
  159. package/src/lib/stories/developer tools/components/Popper/Positions/AutoPosition/AutoPosition.stories.svelte +92 -0
  160. package/src/lib/stories/developer tools/components/Popper/Positions/Positions.stories.svelte +114 -0
  161. package/src/lib/stories/developer tools/components/UtilityButton/Size/Size.stories.svelte +25 -0
  162. package/src/lib/stories/developer tools/components/UtilityButton/UtilityButton.stories.svelte +30 -0
  163. package/src/lib/stories/developer tools/directives/clickOutside/index.mdx +25 -0
  164. package/src/lib/stories/developer tools/helpers/Numbers/cleanNumericString/index.mdx +20 -0
  165. package/src/lib/stories/developer tools/helpers/Numbers/isValidNumberValue/index.mdx +71 -0
  166. package/src/lib/stories/developer tools/helpers/Time/getMoment/index.mdx +45 -0
  167. package/src/lib/stories/developer tools/helpers/logger/index.mdx +63 -0
  168. package/src/lib/stories/developer tools/philosophy/Colors/Colors.mdx +43 -0
  169. package/src/lib/stories/developer tools/philosophy/Colors/Colors.stories.svelte +22 -0
  170. package/src/lib/stories/developer tools/philosophy/Colors/Opacity.stories.svelte +11 -0
  171. package/src/lib/stories/developer tools/philosophy/Themes.mdx +23 -0
@@ -0,0 +1,140 @@
1
+ <script module lang="ts">
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import type { StoryBookArgTypes } from '$lib/storybook-types.js';
4
+ import { Menu, MenuItem, Popper } from '$lib/index.js';
5
+ import Button from '$lib/stories/components/Form/Button/Button.svelte';
6
+ import { positionXArray, positionYArray } from '$lib/types/position.js';
7
+
8
+ export const storyPopperArgTypes: StoryBookArgTypes = {
9
+ popupPositionX: {
10
+ control: { type: 'select' },
11
+ options: positionXArray,
12
+ },
13
+ popupPositionY: {
14
+ control: { type: 'select' },
15
+ options: positionYArray,
16
+ },
17
+ };
18
+
19
+ // More on how to set up stories at: https://storybook.js.org/docs/writing-stories
20
+ const { Story } = defineMeta({
21
+ component: Popper,
22
+ tags: ['autodocs'],
23
+ argTypes: storyPopperArgTypes,
24
+ parameters: {
25
+ docs: {
26
+ story: {
27
+ height: '200px',
28
+ inline: false,
29
+ },
30
+ },
31
+ },
32
+ });
33
+
34
+ let open = $state(false);
35
+ </script>
36
+
37
+ <Story name="Default" args={{ open, onClickOutside: () => (open = false) }} asChild>
38
+ <Popper {open} onClickOutside={() => (open = false)}>
39
+ <Button onclick={() => (open = true)}>Click to see Popup</Button>
40
+ {#snippet popupChildren()}
41
+ <Menu>
42
+ <MenuItem>One</MenuItem>
43
+ <MenuItem>Two</MenuItem>
44
+ <MenuItem>Three</MenuItem>
45
+ </Menu>
46
+ {/snippet}
47
+ </Popper>
48
+ </Story>
49
+
50
+ <Story name="MenuOpen" args={{ open: true }} asChild>
51
+ <Popper open>
52
+ Hello! how are you doing?
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
+ <Story
64
+ name="CustomPaperProps"
65
+ args={{
66
+ open: true,
67
+ paperProps: {
68
+ color: 'primary',
69
+ },
70
+ }}
71
+ asChild
72
+ >
73
+ <Popper
74
+ open
75
+ paperProps={{
76
+ color: 'primary',
77
+ }}
78
+ >
79
+ Hello! how are you doing?
80
+ {#snippet popupChildren()}
81
+ <Menu>
82
+ <MenuItem>One</MenuItem>
83
+ <MenuItem>Two</MenuItem>
84
+ <MenuItem>Three</MenuItem>
85
+ </Menu>
86
+ {/snippet}
87
+ </Popper>
88
+ </Story>
89
+
90
+ <!-- Expand the Popper to full width -->
91
+ <Story name="FullWidth" asChild>
92
+ <Popper {open} fullWidth onClickOutside={() => (open = false)}>
93
+ <Button onclick={() => (open = true)}>Click to see Popup</Button>
94
+
95
+ {#snippet popupChildren()}
96
+ <Menu>
97
+ <MenuItem>One</MenuItem>
98
+ <MenuItem>Two</MenuItem>
99
+ <MenuItem>Three</MenuItem>
100
+ </Menu>
101
+ {/snippet}
102
+ </Popper>
103
+ </Story>
104
+
105
+ <!-- Expand the Popper to full width but not the popup -->
106
+ <Story name="PopupFullWidthFalse" asChild>
107
+ <Popper {open} fullWidth popupFullWidth={false} onClickOutside={() => (open = false)}>
108
+ <Button onclick={() => (open = true)}>Click to see Popup</Button>
109
+
110
+ {#snippet popupChildren()}
111
+ <Menu>
112
+ <MenuItem>One</MenuItem>
113
+ <MenuItem>Two</MenuItem>
114
+ <MenuItem>Three</MenuItem>
115
+ </Menu>
116
+ {/snippet}
117
+ </Popper>
118
+ </Story>
119
+
120
+ <Story
121
+ name="CustomPopup"
122
+ args={{
123
+ open,
124
+ onClickOutside: () => (open = false),
125
+ }}
126
+ asChild
127
+ >
128
+ <Popper {open} onClickOutside={() => (open = false)}>
129
+ <Button onclick={() => (open = true)}>Click to see Popup</Button>
130
+
131
+ {#snippet customPopup(popperLocation)}
132
+ {#if open}
133
+ <Menu>
134
+ <MenuItem>{popperLocation?.height}</MenuItem>
135
+ <MenuItem>{popperLocation?.width}</MenuItem>
136
+ </Menu>
137
+ {/if}
138
+ {/snippet}
139
+ </Popper>
140
+ </Story>
@@ -20,6 +20,8 @@
20
20
  open?: boolean;
21
21
  /** Full width Popper? */
22
22
  fullWidth?: boolean;
23
+ /** override Full width for Popup? */
24
+ popupFullWidth?: boolean;
23
25
  /** PopperPopup ref */
24
26
  popupRef?: HTMLDivElement;
25
27
  /** PopperPopup contents goes here */
@@ -73,24 +75,26 @@
73
75
  popperHeightForVerticalPosition,
74
76
  lockPoistions,
75
77
  fullWidth = false,
78
+ popupFullWidth: popupFullWidthRaw,
76
79
  }: PopperProps = $props();
77
80
 
81
+ const popupFullWidth = $derived(popupFullWidthRaw !== undefined ? popupFullWidthRaw : fullWidth);
82
+
78
83
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
79
84
  let customPopupTyped = customPopup as any;
80
85
 
81
- let popperContainerRef = $state<HTMLDivElement>();
82
86
  let popperLocation = $state<DOMRect>();
83
87
 
84
88
  function capturePopperLocation() {
85
- if (!popperContainerRef) {
89
+ if (!ref) {
86
90
  return;
87
91
  }
88
92
 
89
- popperLocation = popperContainerRef.getBoundingClientRect();
93
+ popperLocation = ref.getBoundingClientRect();
90
94
  }
91
95
 
92
96
  $effect(() => {
93
- if (!popperContainerRef) {
97
+ if (!ref) {
94
98
  return;
95
99
  }
96
100
 
@@ -111,11 +115,9 @@
111
115
  {id}
112
116
  use:clickOutside={onClickOutside}
113
117
  >
114
- <div class="PopperContainer" bind:this={popperContainerRef}>
115
- {#if children}
116
- {@render children()}
117
- {/if}
118
- </div>
118
+ {#if children}
119
+ {@render children()}
120
+ {/if}
119
121
 
120
122
  {#if customPopupTyped}
121
123
  {@render customPopupTyped(popperLocation)}
@@ -131,6 +133,7 @@
131
133
  {popupOffsetY}
132
134
  {popperHeightForVerticalPosition}
133
135
  {lockPoistions}
136
+ fullWidth={popupFullWidth}
134
137
  class={popupClass}
135
138
  >
136
139
  {#if popupChildren}
@@ -149,11 +152,7 @@
149
152
  &.fullWidth {
150
153
  display: flex;
151
154
  width: 100%;
152
-
153
- .PopperContainer {
154
- display: block;
155
- width: 100%;
156
- }
155
+ flex-direction: column;
157
156
  }
158
157
  }
159
158
  </style>
@@ -0,0 +1,64 @@
1
+ <script module lang="ts">
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import type { StoryBookArgTypes } from '$lib/storybook-types.js';
4
+ import { Menu, MenuItem, PopperPopup } from '$lib/index.js';
5
+ import { positionXArray, positionYArray } from '$lib/types/position.js';
6
+
7
+ export const storyPopperPopupArgTypes: StoryBookArgTypes = {
8
+ popupPositionX: {
9
+ control: { type: 'select' },
10
+ options: positionXArray,
11
+ },
12
+ popupPositionY: {
13
+ control: { type: 'select' },
14
+ options: positionYArray,
15
+ },
16
+ };
17
+
18
+ // More on how to set up stories at: https://storybook.js.org/docs/writing-stories
19
+ const { Story } = defineMeta({
20
+ component: PopperPopup,
21
+ tags: ['autodocs'],
22
+ argTypes: storyPopperPopupArgTypes,
23
+ parameters: {
24
+ docs: {
25
+ story: {
26
+ height: '200px',
27
+ inline: false,
28
+ },
29
+ },
30
+ },
31
+ });
32
+ </script>
33
+
34
+ <Story name="Default" asChild>
35
+ <PopperPopup>
36
+ <Menu>
37
+ <MenuItem>One</MenuItem>
38
+ <MenuItem>Two</MenuItem>
39
+ <MenuItem>Three</MenuItem>
40
+ </Menu>
41
+ </PopperPopup>
42
+ </Story>
43
+
44
+ <Story
45
+ name="CustomPaperProps"
46
+ args={{
47
+ paperProps: {
48
+ color: 'primary',
49
+ },
50
+ }}
51
+ asChild
52
+ >
53
+ <PopperPopup
54
+ paperProps={{
55
+ color: 'primary',
56
+ }}
57
+ >
58
+ <Menu>
59
+ <MenuItem>One</MenuItem>
60
+ <MenuItem>Two</MenuItem>
61
+ <MenuItem>Three</MenuItem>
62
+ </Menu>
63
+ </PopperPopup>
64
+ </Story>
@@ -32,6 +32,8 @@
32
32
  lockPoistions?: boolean;
33
33
  /** Popper Height For Vertical Position, default 300 */
34
34
  popperHeightForVerticalPosition?: number;
35
+ /** Full width Popper? */
36
+ fullWidth?: boolean;
35
37
  }
36
38
  </script>
37
39
 
@@ -50,9 +52,15 @@
50
52
  popupOffsetY: offsetY = 12,
51
53
  popperHeightForVerticalPosition = 100,
52
54
  lockPoistions = false,
55
+ fullWidth = false,
53
56
  }: PopperPopupProps = $props();
54
57
 
55
- const popperWidth = $derived(width || '100%');
58
+ let popupLocation = $state<DOMRect>();
59
+
60
+ const fullWidthInPixels = $derived(
61
+ fullWidth && popperLocation?.width ? `${popperLocation?.width}px` : '',
62
+ );
63
+ const popperWidth = $derived(width || fullWidthInPixels);
56
64
  const popupMaxHeight = $derived(maxHeight || '400px');
57
65
 
58
66
  let left = $state<number | null>(null);
@@ -60,20 +68,39 @@
60
68
  let top = $state<number | null>(null);
61
69
  let bottom = $state<number | null>(null);
62
70
 
71
+ function capturePopupLocation() {
72
+ if (!ref) {
73
+ return;
74
+ }
75
+
76
+ popupLocation = ref.getBoundingClientRect();
77
+ }
78
+
79
+ $effect(() => {
80
+ if (!ref) {
81
+ return;
82
+ }
83
+
84
+ capturePopupLocation();
85
+
86
+ window.addEventListener('resize', capturePopupLocation);
87
+
88
+ return () => {
89
+ window.removeEventListener('resize', capturePopupLocation);
90
+ };
91
+ });
92
+
63
93
  $effect(() => {
64
94
  const values = getPopupPosition({
65
95
  positionX,
66
96
  positionY,
67
- height: popperLocation?.height || 0,
68
- width: popperLocation?.width || 0,
69
- top: popperLocation?.top || 0,
70
- bottom: popperLocation?.bottom || 0,
71
- left: popperLocation?.left || 0,
72
- right: popperLocation?.right || 0,
73
97
  offsetX: offsetX,
74
98
  offsetY: offsetY,
75
99
  popperHeight: popperHeightForVerticalPosition,
76
100
  lockPoistions,
101
+ popperLocation,
102
+ popupLocation,
103
+ fullWidth,
77
104
  });
78
105
 
79
106
  left = values.left;
@@ -91,12 +118,11 @@
91
118
  className,
92
119
  ].join(' ')}
93
120
  bind:this={ref}
94
- style={`width: ${popperWidth};
121
+ style={`${popperWidth ? `width: ${popperWidth};` : ''}
95
122
  ${left !== null ? `left: ${left}px;` : ''}
96
123
  ${right !== null ? `right: ${right}px;` : ''}
97
124
  ${top !== null ? `top: ${top}px;` : ''}
98
125
  ${bottom !== null ? `bottom: ${bottom}px;` : ''}
99
- ${positionX === 'center' ? `margin: auto;` : ''}
100
126
  `}
101
127
  >
102
128
  <Paper shadow={3} {...paperProps}>
@@ -110,7 +136,7 @@
110
136
 
111
137
  <style lang="scss">
112
138
  .dodo-ui-PopperPopup {
113
- position: absolute;
139
+ position: fixed;
114
140
  z-index: var(--dodo-ui-z-index-4);
115
141
 
116
142
  section {
@@ -4,16 +4,13 @@ import type { PositionX, PositionY } from '$lib/types/position.js';
4
4
  export interface GetPopupPositionProps {
5
5
  positionX: PositionX;
6
6
  positionY: PositionY;
7
- height: number;
8
- width: number;
9
- top: number;
10
- bottom: number;
11
- left: number;
12
- right: number;
13
7
  offsetX?: number;
14
8
  offsetY?: number;
15
9
  popperHeight: number;
16
10
  lockPoistions: boolean;
11
+ popperLocation?: DOMRect;
12
+ popupLocation?: DOMRect;
13
+ fullWidth?: boolean;
17
14
  }
18
15
 
19
16
  export function getPopupPosition(props: GetPopupPositionProps) {
@@ -32,52 +29,69 @@ export function getPopupPosition(props: GetPopupPositionProps) {
32
29
  };
33
30
  }
34
31
 
35
- const innerHeight = window.innerHeight;
36
-
37
- const gapBottom = innerHeight - props.bottom;
38
- const popperHeight = props.popperHeight;
32
+ const POPPER_LEFT = props.popperLocation?.left || 0;
33
+ const POPPER_TOP = props.popperLocation?.top || 0;
34
+ const POPPER_BOTTOM = props.popperLocation?.bottom || 0;
35
+ const POPPER_HEIGHT = props.popperLocation?.height || 0;
36
+ const POPPER_WIDTH = props.popperLocation?.width || 0;
39
37
 
40
38
  const offsetX = props.offsetX ? props.offsetX : 0;
41
39
  const offsetY = props.offsetY ? props.offsetY : 0;
42
40
 
43
- const positionX = props.positionX;
41
+ const POPUP_WIDTH = props.popupLocation?.width || 0;
42
+
43
+ const WIDTH_DIFF = POPPER_WIDTH - POPUP_WIDTH;
44
+
45
+ const innerHeight = window.innerHeight;
46
+ const gapBottom = innerHeight - POPPER_BOTTOM;
47
+
44
48
  let positionY = props.positionY;
45
49
 
50
+ // Adjust position if there is not enough space to draw it.
46
51
  if (!props.lockPoistions) {
47
- if (positionY === 'top' && props.top < popperHeight + offsetY) {
52
+ if (positionY === 'top' && POPPER_TOP < POPPER_HEIGHT + offsetY) {
48
53
  positionY = 'bottom';
49
- } else if (positionY === 'bottom' && gapBottom < popperHeight + offsetY) {
54
+ } else if (positionY === 'bottom' && gapBottom < POPPER_HEIGHT + offsetY) {
50
55
  positionY = 'top';
51
56
  }
52
57
  }
53
58
 
54
- switch (positionX) {
55
- case 'left':
56
- left = offsetX;
57
- right = null;
58
- break;
59
- case 'center':
60
- left = 0;
61
- right = 0;
62
- break;
63
- case 'right':
64
- left = null;
65
- right = offsetX;
66
- break;
67
- }
68
-
69
59
  switch (positionY) {
70
60
  case 'top':
71
- case 'middle':
72
61
  top = null;
73
- bottom = props.height + offsetY;
62
+ bottom = POPPER_TOP + POPPER_HEIGHT + offsetY;
74
63
  break;
75
64
  case 'bottom':
76
- top = props.height + offsetY;
65
+ top = POPPER_TOP + POPPER_HEIGHT + offsetY;
77
66
  bottom = null;
78
67
  break;
79
68
  }
80
69
 
70
+ if (props.fullWidth) {
71
+ // If Full Width
72
+ left = POPPER_LEFT;
73
+ right = null;
74
+ } else if (WIDTH_DIFF < 0) {
75
+ // If Popup is bigger than the Popper Container
76
+ left = POPPER_LEFT;
77
+ right = null;
78
+ } else {
79
+ switch (props.positionX) {
80
+ case 'left':
81
+ left = POPPER_LEFT + offsetX;
82
+ right = null;
83
+ break;
84
+ case 'center':
85
+ left = POPPER_LEFT + offsetX + WIDTH_DIFF / 2;
86
+ right = null;
87
+ break;
88
+ case 'right':
89
+ left = POPPER_LEFT + offsetX + WIDTH_DIFF;
90
+ right = null;
91
+ break;
92
+ }
93
+ }
94
+
81
95
  return {
82
96
  left,
83
97
  right,
@@ -0,0 +1,92 @@
1
+ <script module lang="ts">
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import { Menu, MenuItem, Popper } from '$lib/index.js';
4
+ import Button from '$lib/stories/components/Form/Button/Button.svelte';
5
+ import { storyPopperArgTypes } from '../../Popper.stories.svelte';
6
+
7
+ // More on how to set up stories at: https://storybook.js.org/docs/writing-stories
8
+ const { Story } = defineMeta({
9
+ component: Popper,
10
+ tags: ['autodocs'],
11
+ argTypes: storyPopperArgTypes,
12
+ parameters: {
13
+ docs: {
14
+ story: {
15
+ height: '200px',
16
+ inline: false,
17
+ },
18
+ },
19
+ },
20
+ });
21
+
22
+ let open = $state(false);
23
+ </script>
24
+
25
+ <!-- Positions will auto adjust depending on the space on top and bottom -->
26
+ <Story
27
+ name="PositionAutoAdjust"
28
+ args={{ open, onClickOutside: () => (open = false), popupPositionY: 'top' }}
29
+ asChild
30
+ >
31
+ <Popper {open} onClickOutside={() => (open = false)} popupPositionY="top">
32
+ <Button onclick={() => (open = true)}>Click to see Popup</Button>
33
+ {#snippet popupChildren()}
34
+ <Menu>
35
+ <MenuItem>One</MenuItem>
36
+ <MenuItem>Two</MenuItem>
37
+ <MenuItem>Three</MenuItem>
38
+ </Menu>
39
+ {/snippet}
40
+ </Popper>
41
+ </Story>
42
+
43
+ <!-- Positions will not auto adjust if you use `lockPoistions` -->
44
+ <Story
45
+ name="LockPoistions"
46
+ args={{
47
+ open,
48
+ onClickOutside: () => (open = false),
49
+ popupPositionY: 'top',
50
+ lockPoistions: true,
51
+ }}
52
+ asChild
53
+ >
54
+ <Popper {open} lockPoistions onClickOutside={() => (open = false)} popupPositionY="top">
55
+ <Button onclick={() => (open = true)}>Click to see Popup</Button>
56
+ {#snippet popupChildren()}
57
+ <Menu>
58
+ <MenuItem>One</MenuItem>
59
+ <MenuItem>Two</MenuItem>
60
+ <MenuItem>Three</MenuItem>
61
+ </Menu>
62
+ {/snippet}
63
+ </Popper>
64
+ </Story>
65
+
66
+ <!-- you can also adjust `popperHeightForVerticalPosition` to achive the same -->
67
+ <Story
68
+ name="HeightForVerticalPosition"
69
+ args={{
70
+ open,
71
+ onClickOutside: () => (open = false),
72
+ popupPositionY: 'top',
73
+ popperHeightForVerticalPosition: 3,
74
+ }}
75
+ asChild
76
+ >
77
+ <Popper
78
+ {open}
79
+ onClickOutside={() => (open = false)}
80
+ popupPositionY="top"
81
+ popperHeightForVerticalPosition={3}
82
+ >
83
+ <Button onclick={() => (open = true)}>Click to see Popup</Button>
84
+ {#snippet popupChildren()}
85
+ <Menu>
86
+ <MenuItem>One</MenuItem>
87
+ <MenuItem>Two</MenuItem>
88
+ <MenuItem>Three</MenuItem>
89
+ </Menu>
90
+ {/snippet}
91
+ </Popper>
92
+ </Story>
@@ -0,0 +1,114 @@
1
+ <script module lang="ts">
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import { Menu, MenuItem, Popper } from '$lib/index.js';
4
+ import Button from '$lib/stories/components/Form/Button/Button.svelte';
5
+ import { storyPopperArgTypes } from '../Popper.stories.svelte';
6
+
7
+ // More on how to set up stories at: https://storybook.js.org/docs/writing-stories
8
+ const { Story } = defineMeta({
9
+ component: Popper,
10
+ tags: ['autodocs'],
11
+ argTypes: storyPopperArgTypes,
12
+ parameters: {
13
+ layout: 'centered',
14
+ docs: {
15
+ story: {
16
+ height: '400px',
17
+ inline: false,
18
+ },
19
+ },
20
+ },
21
+ });
22
+
23
+ let open = $state(false);
24
+ </script>
25
+
26
+ <Story name="BottomLeft" asChild>
27
+ <Popper {open} onClickOutside={() => (open = false)} popupWidth="100px">
28
+ <Button onclick={() => (open = true)}>Click to see Popup</Button>
29
+ {#snippet popupChildren()}
30
+ <Menu>
31
+ <MenuItem>One</MenuItem>
32
+ <MenuItem>Two</MenuItem>
33
+ <MenuItem>Three</MenuItem>
34
+ </Menu>
35
+ {/snippet}
36
+ </Popper>
37
+ </Story>
38
+
39
+ <Story name="BottomCenter" asChild>
40
+ <Popper {open} popupPositionX="center" onClickOutside={() => (open = false)} popupWidth="100px">
41
+ <Button onclick={() => (open = true)}>Click to see Popup</Button>
42
+ {#snippet popupChildren()}
43
+ <Menu>
44
+ <MenuItem>One</MenuItem>
45
+ <MenuItem>Two</MenuItem>
46
+ <MenuItem>Three</MenuItem>
47
+ </Menu>
48
+ {/snippet}
49
+ </Popper>
50
+ </Story>
51
+
52
+ <Story name="BottomRight" asChild>
53
+ <Popper {open} popupPositionX="right" onClickOutside={() => (open = false)} popupWidth="100px">
54
+ <Button onclick={() => (open = true)}>Click to see Popup</Button>
55
+ {#snippet popupChildren()}
56
+ <Menu>
57
+ <MenuItem>One</MenuItem>
58
+ <MenuItem>Two</MenuItem>
59
+ <MenuItem>Three</MenuItem>
60
+ </Menu>
61
+ {/snippet}
62
+ </Popper>
63
+ </Story>
64
+
65
+ <Story name="TopLeft" asChild>
66
+ <Popper {open} popupPositionY="top" onClickOutside={() => (open = false)} popupWidth="100px">
67
+ <Button onclick={() => (open = true)}>Click to see Popup</Button>
68
+ {#snippet popupChildren()}
69
+ <Menu>
70
+ <MenuItem>One</MenuItem>
71
+ <MenuItem>Two</MenuItem>
72
+ <MenuItem>Three</MenuItem>
73
+ </Menu>
74
+ {/snippet}
75
+ </Popper>
76
+ </Story>
77
+
78
+ <Story name="TopCenter" asChild>
79
+ <Popper
80
+ {open}
81
+ popupPositionY="top"
82
+ popupPositionX="center"
83
+ onClickOutside={() => (open = false)}
84
+ popupWidth="100px"
85
+ >
86
+ <Button onclick={() => (open = true)}>Click to see Popup</Button>
87
+ {#snippet popupChildren()}
88
+ <Menu>
89
+ <MenuItem>One</MenuItem>
90
+ <MenuItem>Two</MenuItem>
91
+ <MenuItem>Three</MenuItem>
92
+ </Menu>
93
+ {/snippet}
94
+ </Popper>
95
+ </Story>
96
+
97
+ <Story name="TopRight" asChild>
98
+ <Popper
99
+ {open}
100
+ popupPositionY="top"
101
+ popupPositionX="right"
102
+ onClickOutside={() => (open = false)}
103
+ popupWidth="100px"
104
+ >
105
+ <Button onclick={() => (open = true)}>Click to see Popup</Button>
106
+ {#snippet popupChildren()}
107
+ <Menu>
108
+ <MenuItem>One</MenuItem>
109
+ <MenuItem>Two</MenuItem>
110
+ <MenuItem>Three</MenuItem>
111
+ </Menu>
112
+ {/snippet}
113
+ </Popper>
114
+ </Story>