@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.
Files changed (241) hide show
  1. package/dist/index.d.ts +32 -9
  2. package/dist/index.js +12 -2
  3. package/dist/stories/Home.mdx +4 -6
  4. package/dist/stories/components/Form/Button/Button.stories.svelte +16 -37
  5. package/dist/stories/components/Form/Button/Button.svelte +45 -47
  6. package/dist/stories/components/Form/Button/Button.svelte.d.ts +16 -12
  7. package/dist/stories/components/Form/Button/Color/Color.stories.svelte +23 -48
  8. package/dist/stories/components/Form/Button/Events/Events.stories.svelte +1 -7
  9. package/dist/stories/components/Form/Button/IconButton/IconButton.stories.svelte +4 -12
  10. package/dist/stories/components/Form/Button/Roundness/Roundness.stories.svelte +5 -31
  11. package/dist/stories/components/Form/Button/Size/Size.stories.svelte +3 -9
  12. package/dist/stories/components/Form/Button/Variant/Variant.stories.svelte +5 -8
  13. package/dist/stories/components/Form/FormControl/FormControl.stories.svelte +11 -12
  14. package/dist/stories/components/Form/FormControl/FormControl.svelte +6 -8
  15. package/dist/stories/components/Form/FormControl/FormControl.svelte.d.ts +1 -1
  16. package/dist/stories/components/Form/Label/Label.stories.svelte +1 -11
  17. package/dist/stories/components/Form/Label/Label.svelte +6 -5
  18. package/dist/stories/components/Form/Label/Label.svelte.d.ts +1 -3
  19. package/dist/stories/components/Form/Message/Color/Color.stories.svelte +9 -9
  20. package/dist/stories/components/Form/Message/Message.stories.svelte +5 -13
  21. package/dist/stories/components/Form/Message/Message.svelte +5 -7
  22. package/dist/stories/components/Form/Message/Message.svelte.d.ts +4 -6
  23. package/dist/stories/components/Form/Message/Size/Size.stories.svelte +3 -5
  24. package/dist/stories/components/Form/PasswordInput/Events/Events.stories.svelte +8 -72
  25. package/dist/stories/components/Form/PasswordInput/PasswordInput.stories.svelte +5 -3
  26. package/dist/stories/components/Form/PasswordInput/PasswordInput.svelte +26 -33
  27. package/dist/stories/components/Form/PasswordInput/PasswordInput.svelte.d.ts +6 -5
  28. package/dist/stories/components/Form/PasswordInput/Roundness/Roundness.stories.svelte +4 -4
  29. package/dist/stories/components/Form/PasswordInput/WithIcon/WithIcon.stories.svelte +2 -2
  30. package/dist/stories/components/Form/Select/Customize/Customize.stories.svelte +120 -0
  31. package/dist/stories/components/Form/Select/Customize/Customize.stories.svelte.d.ts +18 -0
  32. package/dist/stories/components/Form/Select/Events/Events.stories.svelte +138 -0
  33. package/dist/stories/components/Form/Select/Options/OptionFormat.mdx +40 -0
  34. package/dist/stories/components/Form/Select/Roundness/Roundness.stories.svelte +28 -0
  35. package/dist/stories/components/Form/Select/Roundness/Roundness.stories.svelte.d.ts +18 -0
  36. package/dist/stories/components/Form/Select/Select.stories.svelte +114 -0
  37. package/dist/stories/components/Form/Select/Select.stories.svelte.d.ts +22 -0
  38. package/dist/stories/components/Form/Select/Select.svelte +285 -0
  39. package/dist/stories/components/Form/Select/Select.svelte.d.ts +87 -0
  40. package/dist/stories/components/Form/Select/Size/Size.stories.svelte +24 -0
  41. package/dist/stories/components/Form/Select/Size/Size.stories.svelte.d.ts +18 -0
  42. package/dist/stories/components/Form/Select/WithIcon/WithIcon.stories.svelte +39 -0
  43. package/dist/stories/components/Form/Select/WithIcon/WithIcon.stories.svelte.d.ts +18 -0
  44. package/dist/stories/components/Form/TextInput/Events/Events.stories.svelte +7 -63
  45. package/dist/stories/components/Form/TextInput/Roundness/Roundness.stories.svelte +4 -4
  46. package/dist/stories/components/Form/TextInput/TextInput.stories.svelte +6 -4
  47. package/dist/stories/components/Form/TextInput/TextInput.svelte +18 -30
  48. package/dist/stories/components/Form/TextInput/TextInput.svelte.d.ts +10 -5
  49. package/dist/stories/components/Form/TextInput/WithIcon/WithIcon.stories.svelte +4 -4
  50. package/dist/stories/components/Layout/Menu/Menu.stories.svelte +65 -0
  51. package/dist/stories/components/Layout/Menu/Menu.stories.svelte.d.ts +21 -0
  52. package/dist/stories/components/Layout/Menu/Menu.svelte +30 -0
  53. package/dist/stories/components/Layout/Menu/Menu.svelte.d.ts +23 -0
  54. package/dist/stories/components/Layout/Menu/MenuItem/MenuItem.stories.svelte +30 -0
  55. package/dist/stories/components/Layout/Menu/MenuItem/MenuItem.stories.svelte.d.ts +21 -0
  56. package/dist/stories/components/Layout/Menu/MenuItem/MenuItem.svelte +164 -0
  57. package/dist/stories/components/Layout/Menu/MenuItem/MenuItem.svelte.d.ts +49 -0
  58. package/dist/stories/components/Layout/Menu/MenuItem/Size/Size.stories.svelte +16 -0
  59. package/dist/stories/components/Layout/Menu/MenuItem/Type/Type.stories.svelte +21 -0
  60. package/dist/stories/components/{Form/SimpleSelect/WithIcon/WithIcon.stories.svelte.d.ts → Layout/Menu/MenuItem/Type/Type.stories.svelte.d.ts} +3 -3
  61. package/dist/stories/components/Layout/Menu/Size/Size.stories.svelte +37 -0
  62. package/dist/stories/components/{Form/SimpleSelect/Roundness/Roundness.stories.svelte.d.ts → Layout/Menu/Size/Size.stories.svelte.d.ts} +3 -3
  63. package/dist/stories/components/Layout/Paper/Color/Color.stories.svelte +63 -0
  64. package/dist/stories/components/Layout/Paper/Color/Color.stories.svelte.d.ts +26 -0
  65. package/dist/stories/components/Layout/Paper/Paper.stories.svelte +25 -16
  66. package/dist/stories/components/Layout/Paper/Paper.svelte +211 -14
  67. package/dist/stories/components/Layout/Paper/Paper.svelte.d.ts +20 -9
  68. package/dist/stories/components/Layout/Paper/Roundness/Roundness.stories.svelte +8 -13
  69. package/dist/stories/components/Layout/Paper/Shadow/Shadow.stories.svelte +6 -24
  70. package/dist/stories/components/Layout/Paper/utils/scss/mixins.scss +46 -0
  71. package/dist/stories/components/Layout/Separator/Color/Color.stories.svelte +19 -0
  72. package/dist/stories/components/Layout/Separator/Color/Color.stories.svelte.d.ts +26 -0
  73. package/dist/stories/components/Layout/Separator/Separator.stories.svelte +26 -0
  74. package/dist/stories/components/Layout/Separator/Separator.stories.svelte.d.ts +21 -0
  75. package/dist/stories/components/Layout/Separator/Separator.svelte +66 -0
  76. package/dist/stories/components/Layout/Separator/Separator.svelte.d.ts +22 -0
  77. package/dist/stories/components/Layout/Separator/utils/scss/mixins.scss +24 -0
  78. package/dist/stories/developer tools/Intro.mdx +2 -0
  79. package/dist/stories/developer tools/components/DynamicInput/DynamicInput.stories.svelte +49 -0
  80. package/dist/stories/{components/Form/SimpleSelect/SimpleSelect.stories.svelte.d.ts → developer tools/components/DynamicInput/DynamicInput.stories.svelte.d.ts } +5 -7
  81. package/dist/stories/developer tools/components/DynamicInput/DynamicInput.svelte +92 -0
  82. package/dist/stories/developer tools/components/DynamicInput/DynamicInput.svelte.d.ts +60 -0
  83. package/{src/lib/stories/components/Form/TextInput/Size/Size.stories.svelte → dist/stories/developer tools/components/DynamicInput/Size/Size.stories.svelte } +4 -4
  84. package/dist/stories/developer tools/components/DynamicInput/Size/Size.stories.svelte.d.ts +26 -0
  85. package/dist/stories/developer tools/components/InputEnclosure/InputEnclosure.stories.svelte +5 -5
  86. package/dist/stories/developer tools/components/InputEnclosure/InputEnclosure.svelte +19 -15
  87. package/dist/stories/developer tools/components/InputEnclosure/InputEnclosure.svelte.d.ts +4 -3
  88. package/dist/stories/developer tools/components/InputEnclosure/Roundness/Roundness.stories.svelte +4 -4
  89. package/dist/stories/developer tools/components/InputEnclosure/WithIcon/WithIcon.stories.svelte +4 -4
  90. package/dist/stories/developer tools/components/Popper/Popper.stories.svelte +119 -0
  91. package/dist/stories/developer tools/components/Popper/Popper.stories.svelte.d.ts +21 -0
  92. package/dist/stories/developer tools/components/Popper/Popper.svelte +77 -0
  93. package/dist/stories/developer tools/components/Popper/Popper.svelte.d.ts +50 -0
  94. package/dist/stories/developer tools/components/Popper/PopperPopup/PopperPopup.stories.svelte +60 -0
  95. package/dist/stories/developer tools/components/Popper/PopperPopup/PopperPopup.stories.svelte.d.ts +21 -0
  96. package/dist/stories/developer tools/components/Popper/PopperPopup/PopperPopup.svelte +66 -0
  97. package/dist/stories/developer tools/components/Popper/PopperPopup/PopperPopup.svelte.d.ts +34 -0
  98. package/dist/stories/developer tools/components/Popper/PopperPopup/utils/getPopupPosition.d.ts +21 -0
  99. package/dist/stories/developer tools/components/Popper/PopperPopup/utils/getPopupPosition.js +62 -0
  100. package/dist/stories/developer tools/components/Popper/Positions/AutoPosition/AutoPosition.stories.svelte +89 -0
  101. package/dist/stories/developer tools/components/Popper/Positions/AutoPosition/AutoPosition.stories.svelte.d.ts +18 -0
  102. package/dist/stories/developer tools/components/Popper/Positions/Positions.stories.svelte +111 -0
  103. package/dist/stories/developer tools/components/Popper/Positions/Positions.stories.svelte.d.ts +18 -0
  104. package/dist/stories/developer tools/components/UtilityButton/Size/Size.stories.svelte +6 -8
  105. package/dist/stories/developer tools/components/UtilityButton/UtilityButton.stories.svelte +4 -7
  106. package/dist/stories/developer tools/components/UtilityButton/UtilityButton.svelte +8 -5
  107. package/dist/stories/developer tools/components/UtilityButton/UtilityButton.svelte.d.ts +2 -2
  108. package/dist/stories/developer tools/directives/clickOutside/clickOutside.d.ts +3 -0
  109. package/dist/stories/developer tools/directives/clickOutside/clickOutside.js +14 -0
  110. package/dist/stories/developer tools/directives/clickOutside/index.mdx +25 -0
  111. package/dist/stories/{philosophy/Colors/Colors.mdx → developer tools/philosophy/Colors/Colors.mdx } +2 -2
  112. package/dist/stories/{philosophy/Colors/Swatches/Palette.svelte → developer tools/philosophy/Colors/Swatches/Palette.svelte } +1 -1
  113. package/dist/stories/{philosophy/Colors/Swatches/Swatch.svelte → developer tools/philosophy/Colors/Swatches/Swatch.svelte } +1 -1
  114. package/dist/stories/{philosophy/Colors/Swatches/Swatches.svelte → developer tools/philosophy/Colors/Swatches/Swatches.svelte } +1 -1
  115. package/dist/stories/{philosophy/Colors/utils/color.js → developer tools/philosophy/Colors/utils/color.js } +1 -1
  116. package/dist/stories/{philosophy/Themes.mdx → developer tools/philosophy/Themes.mdx } +1 -1
  117. package/dist/styles/_colors.css +44 -44
  118. package/dist/styles/_components.css +6 -3
  119. package/dist/styles/_shadow.css +13 -20
  120. package/dist/styles/_space.css +7 -0
  121. package/dist/styles/_z-index.css +9 -0
  122. package/dist/styles/global.css +2 -0
  123. package/dist/types/colors.d.ts +7 -0
  124. package/dist/types/colors.js +10 -0
  125. package/dist/types/position.d.ts +4 -0
  126. package/dist/types/position.js +2 -0
  127. package/dist/types/roundness.d.ts +3 -0
  128. package/dist/types/roundness.js +1 -0
  129. package/dist/types/shadow.d.ts +3 -0
  130. package/dist/types/shadow.js +1 -0
  131. package/dist/types/size.d.ts +3 -0
  132. package/dist/types/size.js +1 -0
  133. package/dist/types/weight.d.ts +3 -0
  134. package/dist/types/weight.js +1 -0
  135. package/package.json +26 -24
  136. package/src/lib/index.ts +61 -15
  137. package/src/lib/stories/components/Form/Button/Button.svelte +39 -36
  138. package/src/lib/stories/components/Form/FormControl/FormControl.svelte +9 -11
  139. package/src/lib/stories/components/Form/Label/Label.svelte +5 -8
  140. package/src/lib/stories/components/Form/Message/Message.svelte +11 -16
  141. package/src/lib/stories/components/Form/PasswordInput/PasswordInput.svelte +50 -50
  142. package/src/lib/stories/components/Form/Select/Select.svelte +501 -0
  143. package/src/lib/stories/components/Form/TextInput/TextInput.svelte +43 -60
  144. package/src/lib/stories/components/Layout/Menu/Menu.svelte +65 -0
  145. package/src/lib/stories/components/Layout/Menu/MenuItem/MenuItem.svelte +268 -0
  146. package/src/lib/stories/components/Layout/Paper/Paper.svelte +154 -27
  147. package/src/lib/stories/components/Layout/Paper/utils/scss/mixins.scss +46 -0
  148. package/src/lib/stories/components/Layout/Separator/Separator.svelte +96 -0
  149. package/src/lib/stories/components/Layout/Separator/utils/scss/mixins.scss +24 -0
  150. package/src/lib/stories/developer tools/components/DynamicInput/DynamicInput.svelte +195 -0
  151. package/src/lib/stories/developer tools/components/InputEnclosure/InputEnclosure.svelte +22 -18
  152. package/src/lib/stories/developer tools/components/Popper/Popper.svelte +159 -0
  153. package/src/lib/stories/developer tools/components/Popper/PopperPopup/PopperPopup.svelte +120 -0
  154. package/src/lib/stories/developer tools/components/Popper/PopperPopup/utils/getPopupPosition.ts +87 -0
  155. package/src/lib/stories/developer tools/components/UtilityButton/UtilityButton.svelte +8 -6
  156. package/src/lib/stories/developer tools/directives/clickOutside/clickOutside.ts +17 -0
  157. package/src/lib/stories/{philosophy/Colors/Swatches/Palette.svelte → developer tools/philosophy/Colors/Swatches/Palette.svelte } +1 -1
  158. package/src/lib/stories/{philosophy/Colors/Swatches/Swatch.svelte → developer tools/philosophy/Colors/Swatches/Swatch.svelte } +1 -1
  159. package/src/lib/stories/{philosophy/Colors/Swatches/Swatches.svelte → developer tools/philosophy/Colors/Swatches/Swatches.svelte } +1 -1
  160. package/src/lib/stories/{philosophy/Colors/utils/color.ts → developer tools/philosophy/Colors/utils/color.ts } +1 -1
  161. package/src/lib/styles/_colors.css +44 -44
  162. package/src/lib/styles/_components.css +6 -3
  163. package/src/lib/styles/_shadow.css +13 -20
  164. package/src/lib/styles/_space.css +7 -0
  165. package/src/lib/styles/_z-index.css +9 -0
  166. package/src/lib/styles/global.css +2 -0
  167. package/src/lib/types/colors.ts +16 -0
  168. package/src/lib/types/position.ts +5 -0
  169. package/src/lib/types/roundness.ts +3 -0
  170. package/src/lib/types/shadow.ts +3 -0
  171. package/src/lib/types/size.ts +3 -0
  172. package/src/lib/types/weight.ts +3 -0
  173. package/dist/stories/components/Form/SimpleSelect/Events/Events.stories.svelte +0 -74
  174. package/dist/stories/components/Form/SimpleSelect/Roundness/Roundness.stories.svelte +0 -24
  175. package/dist/stories/components/Form/SimpleSelect/SimpleSelect.stories.svelte +0 -59
  176. package/dist/stories/components/Form/SimpleSelect/SimpleSelect.svelte +0 -69
  177. package/dist/stories/components/Form/SimpleSelect/SimpleSelect.svelte.d.ts +0 -50
  178. package/dist/stories/components/Form/SimpleSelect/Size/Size.stories.svelte +0 -20
  179. package/dist/stories/components/Form/SimpleSelect/WithIcon/WithIcon.stories.svelte +0 -36
  180. package/dist/types.d.ts +0 -5
  181. package/dist/types.js +0 -1
  182. package/src/lib/stories/Home.mdx +0 -61
  183. package/src/lib/stories/assets/dark-theme-toggle.png +0 -0
  184. package/src/lib/stories/components/Form/Button/Button.stories.svelte +0 -82
  185. package/src/lib/stories/components/Form/Button/Color/Color.stories.svelte +0 -68
  186. package/src/lib/stories/components/Form/Button/Events/Events.stories.svelte +0 -42
  187. package/src/lib/stories/components/Form/Button/IconButton/IconButton.stories.svelte +0 -51
  188. package/src/lib/stories/components/Form/Button/Roundness/Roundness.stories.svelte +0 -49
  189. package/src/lib/stories/components/Form/Button/Size/Size.stories.svelte +0 -22
  190. package/src/lib/stories/components/Form/Button/Variant/Variant.stories.svelte +0 -21
  191. package/src/lib/stories/components/Form/FormControl/FormControl.stories.svelte +0 -29
  192. package/src/lib/stories/components/Form/Label/Label.stories.svelte +0 -23
  193. package/src/lib/stories/components/Form/Message/Color/Color.stories.svelte +0 -36
  194. package/src/lib/stories/components/Form/Message/Message.stories.svelte +0 -35
  195. package/src/lib/stories/components/Form/Message/Size/Size.stories.svelte +0 -24
  196. package/src/lib/stories/components/Form/PasswordInput/Events/Events.stories.svelte +0 -174
  197. package/src/lib/stories/components/Form/PasswordInput/PasswordInput.stories.svelte +0 -57
  198. package/src/lib/stories/components/Form/PasswordInput/Roundness/Roundness.stories.svelte +0 -20
  199. package/src/lib/stories/components/Form/PasswordInput/Size/Size.stories.svelte +0 -16
  200. package/src/lib/stories/components/Form/PasswordInput/WithIcon/WithIcon.stories.svelte +0 -31
  201. package/src/lib/stories/components/Form/SimpleSelect/Events/Events.stories.svelte +0 -79
  202. package/src/lib/stories/components/Form/SimpleSelect/Roundness/Roundness.stories.svelte +0 -24
  203. package/src/lib/stories/components/Form/SimpleSelect/SimpleSelect.stories.svelte +0 -64
  204. package/src/lib/stories/components/Form/SimpleSelect/SimpleSelect.svelte +0 -159
  205. package/src/lib/stories/components/Form/SimpleSelect/Size/Size.stories.svelte +0 -20
  206. package/src/lib/stories/components/Form/SimpleSelect/WithIcon/WithIcon.stories.svelte +0 -36
  207. package/src/lib/stories/components/Form/TextInput/Events/Events.stories.svelte +0 -153
  208. package/src/lib/stories/components/Form/TextInput/Roundness/Roundness.stories.svelte +0 -21
  209. package/src/lib/stories/components/Form/TextInput/TextInput.stories.svelte +0 -41
  210. package/src/lib/stories/components/Form/TextInput/WithIcon/WithIcon.stories.svelte +0 -47
  211. package/src/lib/stories/components/Layout/Paper/Paper.stories.svelte +0 -41
  212. package/src/lib/stories/components/Layout/Paper/Roundness/Roundness.stories.svelte +0 -30
  213. package/src/lib/stories/components/Layout/Paper/Shadow/Shadow.stories.svelte +0 -42
  214. package/src/lib/stories/developer tools/Intro.mdx +0 -7
  215. package/src/lib/stories/developer tools/components/InputEnclosure/InputEnclosure.stories.svelte +0 -38
  216. package/src/lib/stories/developer tools/components/InputEnclosure/Roundness/Roundness.stories.svelte +0 -20
  217. package/src/lib/stories/developer tools/components/InputEnclosure/Size/Size.stories.svelte +0 -16
  218. package/src/lib/stories/developer tools/components/InputEnclosure/WithIcon/WithIcon.stories.svelte +0 -47
  219. package/src/lib/stories/developer tools/components/UtilityButton/Size/Size.stories.svelte +0 -27
  220. package/src/lib/stories/developer tools/components/UtilityButton/UtilityButton.stories.svelte +0 -33
  221. package/src/lib/stories/philosophy/Colors/Colors.mdx +0 -43
  222. package/src/lib/stories/philosophy/Colors/Colors.stories.svelte +0 -22
  223. package/src/lib/stories/philosophy/Colors/Opacity.stories.svelte +0 -11
  224. package/src/lib/stories/philosophy/Themes.mdx +0 -23
  225. package/src/lib/types.ts +0 -6
  226. /package/dist/stories/components/Form/{SimpleSelect → Select}/Events/Events.stories.svelte.d.ts +0 -0
  227. /package/dist/stories/components/{Form/SimpleSelect → Layout/Menu/MenuItem}/Size/Size.stories.svelte.d.ts +0 -0
  228. /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Colors.stories.svelte +0 -0
  229. /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Colors.stories.svelte.d.ts +0 -0
  230. /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Colors.svelte +0 -0
  231. /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Colors.svelte.d.ts +0 -0
  232. /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Opacity.stories.svelte +0 -0
  233. /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Opacity.stories.svelte.d.ts +0 -0
  234. /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Opacity.svelte +0 -0
  235. /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Opacity.svelte.d.ts +0 -0
  236. /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Swatches/Palette.svelte.d.ts +0 -0
  237. /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Swatches/Swatch.svelte.d.ts +0 -0
  238. /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/Swatches/Swatches.svelte.d.ts +0 -0
  239. /package/dist/stories/{philosophy → developer tools/philosophy}/Colors/utils/color.d.ts +0 -0
  240. /package/src/lib/stories/{philosophy → developer tools/philosophy}/Colors/Colors.svelte +0 -0
  241. /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>
@@ -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;
@@ -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;