@yourdash/uikit 1.0.1 → 1.0.3

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 (82) hide show
  1. package/components/box/box.module.scss +1 -1
  2. package/components/box/box.tsx +3 -3
  3. package/components/button/button.module.scss +3 -3
  4. package/components/button/button.tsx +2 -1
  5. package/components/buttonLink/buttonLink.module.scss +5 -1
  6. package/components/buttonLink/buttonLink.tsx +13 -12
  7. package/components/buttonWithIcon/buttonWithIcon.module.scss +56 -0
  8. package/components/buttonWithIcon/buttonWithIcon.tsx +36 -0
  9. package/components/card/card.module.scss +6 -6
  10. package/components/card/card.tsx +23 -20
  11. package/components/container/container.module.scss +20 -0
  12. package/components/container/container.tsx +22 -0
  13. package/components/contextMenu/contextMenu.tsx +1 -1
  14. package/components/contextMenu/contextMenuRoot.module.scss +1 -1
  15. package/components/contextMenu/contextMenuRoot.tsx +83 -83
  16. package/components/flex/flex.module.scss +31 -19
  17. package/components/flex/flex.tsx +23 -2
  18. package/components/heading/heading.module.scss +1 -1
  19. package/components/heading/heading.tsx +1 -1
  20. package/components/icon/icon.tsx +1 -1
  21. package/components/iconButton/iconButton.module.scss +1 -1
  22. package/components/iconButton/iconButton.tsx +3 -3
  23. package/components/image/image.module.scss +72 -1
  24. package/components/image/image.tsx +65 -10
  25. package/components/link/link.module.scss +1 -1
  26. package/components/link/link.tsx +1 -1
  27. package/components/progressBar/progressBar.module.scss +25 -0
  28. package/components/progressBar/progressBar.tsx +21 -0
  29. package/components/redirect/redirect.tsx +1 -1
  30. package/components/separator/separator.module.scss +9 -4
  31. package/components/separator/separator.tsx +3 -3
  32. package/components/spinner/spinner.module.scss +1 -6
  33. package/components/spinner/spinner.tsx +1 -1
  34. package/components/subtext/subtext.module.scss +1 -1
  35. package/components/subtext/subtext.tsx +1 -1
  36. package/components/tag/tag.module.scss +13 -0
  37. package/components/tag/tag.tsx +21 -0
  38. package/components/text/text.module.scss +1 -1
  39. package/components/text/text.tsx +1 -1
  40. package/components/textButton/textButton.module.scss +1 -1
  41. package/components/textButton/textButton.tsx +1 -1
  42. package/components/textInput/textInput.module.scss +1 -1
  43. package/components/textInput/textInput.tsx +40 -10
  44. package/components/toast/toast.module.scss +71 -31
  45. package/components/toast/toast.ts +12 -0
  46. package/components/toast/toastAction.ts +12 -0
  47. package/components/toast/toastContext.ts +5 -3
  48. package/components/toast/toasts.tsx +99 -0
  49. package/core/decrementLevel.tsx +13 -13
  50. package/core/incrementLevel.tsx +1 -1
  51. package/core/level.tsx +1 -1
  52. package/core/remToPx.ts +8 -0
  53. package/core/root.tsx +26 -32
  54. package/core/toast.ts +18 -17
  55. package/imports.d.ts +81 -0
  56. package/package.json +9 -40
  57. package/theme/defaultTheme.module.scss +16 -4
  58. package/theme/themeValues.scss +8 -5
  59. package/tsconfig.json +19 -9
  60. package/utilityComponent/hasBeenShown/hasBeenShown.tsx +47 -0
  61. package/utilityComponent/onInView/onInView.tsx +83 -0
  62. package/views/carousel/carousel.module.scss +77 -0
  63. package/views/carousel/carousel.tsx +138 -0
  64. package/views/header/header.module.scss +16 -0
  65. package/views/header/header.tsx +28 -0
  66. package/views/infiniteScroll/infiniteScroll.module.scss +26 -0
  67. package/views/infiniteScroll/infiniteScroll.tsx +90 -0
  68. package/views/navBar/components/navImage/navImage.module.scss +7 -0
  69. package/views/navBar/components/navImage/navImage.tsx +15 -0
  70. package/views/navBar/components/navTitle/navTitle.tsx +13 -0
  71. package/views/navBar/navBar.module.scss +22 -0
  72. package/views/navBar/navBar.tsx +37 -0
  73. package/views/onBoarding/onBoarding.module.scss +84 -0
  74. package/views/onBoarding/onBoarding.tsx +138 -0
  75. package/views/panAndZoom/panAndZoom.tsx +121 -114
  76. package/views/sidebar/Sidebar.module.scss +49 -0
  77. package/views/sidebar/Sidebar.tsx +30 -0
  78. package/views/sidebar/SidebarContainer.module.scss +22 -0
  79. package/views/sidebar/SidebarContainer.tsx +38 -0
  80. package/views/sidebar/SidebarContext.tsx +15 -0
  81. package/views/sidebar/SidebarToggleButton.tsx +25 -0
  82. package/components/toast/toast.tsx +0 -65
@@ -3,7 +3,7 @@
3
3
  * YourDash is licensed under the MIT License. (https://ewsgit.mit-license.org)
4
4
  */
5
5
 
6
- @import "../../theme/themeValues";
6
+ @use "@yourdash/uikit/theme/themeValues" as *;
7
7
 
8
8
  .component {
9
9
  box-sizing: border-box;
@@ -3,10 +3,10 @@
3
3
  * YourDash is licensed under the MIT License. (https://ewsgit.mit-license.org)
4
4
  */
5
5
 
6
- import clippy from "@yourdash/shared/web/helpers/clippy.js";
6
+ import clippy from "@yourdash/shared/web/helpers/clippy.ts";
7
7
  import { FC, ReactNode } from "react";
8
- import IncrementLevel from "../../core/incrementLevel.js";
9
- import { useLevel, useLevelClass } from "../../core/level.js";
8
+ import IncrementLevel from "../../core/incrementLevel.tsx";
9
+ import { useLevel, useLevelClass } from "../../core/level.tsx";
10
10
  import styles from "./box.module.scss";
11
11
 
12
12
  const Box: FC<{ className?: string; level?: 0 | 1 | 2 | 3; children: ReactNode | ReactNode[] }> = (props) => {
@@ -3,12 +3,10 @@
3
3
  * YourDash is licensed under the MIT License. (https://ewsgit.mit-license.org)
4
4
  */
5
5
 
6
- @import "../../theme/themeValues";
6
+ @use "@yourdash/uikit/theme/themeValues" as *;
7
7
 
8
8
  .component {
9
9
  font-family: var(#{$theme}#{$font}#{$family});
10
- text-align: center;
11
- min-width: 6rem;
12
10
  padding: 0 var(#{$theme}#{$button}#{$padding}#{$horizontal});
13
11
  color: var(#{$theme}#{$button}#{$color});
14
12
  border: var(#{$theme}#{$button}#{$border});
@@ -18,6 +16,8 @@
18
16
  height: var(#{$theme+$input+$height});
19
17
  width: max-content;
20
18
  cursor: pointer;
19
+ padding-left: var(#{$theme+$padding});
20
+ padding-right: var(#{$theme+$padding});
21
21
 
22
22
  &:hover {
23
23
  color: var(#{$theme}#{$button}#{$hover}#{$color});
@@ -3,7 +3,7 @@
3
3
  * YourDash is licensed under the MIT License. (https://ewsgit.mit-license.org)
4
4
  */
5
5
 
6
- import clippy from "@yourdash/shared/web/helpers/clippy.js";
6
+ import clippy from "@yourdash/shared/web/helpers/clippy.ts";
7
7
  import styles from "./button.module.scss";
8
8
  import { FC } from "react";
9
9
 
@@ -14,6 +14,7 @@ const Button: FC<{ onClick: () => void; text: string; className?: string; disabl
14
14
  onClick={props.onClick}
15
15
  aria-label={props.text}
16
16
  disabled={props.disabled}
17
+ type={"button"}
17
18
  >
18
19
  {props.text}
19
20
  </button>
@@ -3,7 +3,7 @@
3
3
  * YourDash is licensed under the MIT License. (https://ewsgit.mit-license.org)
4
4
  */
5
5
 
6
- @import "../../theme/themeValues";
6
+ @use "@yourdash/uikit/theme/themeValues" as *;
7
7
 
8
8
  .component {
9
9
  font-family: var(#{$theme}#{$font}#{$family});
@@ -45,3 +45,7 @@
45
45
  cursor: not-allowed;
46
46
  }
47
47
  }
48
+
49
+ .link {
50
+ display: inline;
51
+ }
@@ -3,23 +3,24 @@
3
3
  * YourDash is licensed under the MIT License. (https://ewsgit.mit-license.org)
4
4
  */
5
5
 
6
- import clippy from "@yourdash/shared/web/helpers/clippy.js";
7
- import Button from "../button/button.js";
8
- import { Link } from "react-router-dom";
6
+ import clippy from "@yourdash/shared/web/helpers/clippy.ts";
7
+ import Button from "../button/button.tsx";
8
+ import { useNavigate } from "react-router-dom";
9
9
  import styles from "./buttonLink.module.scss";
10
10
  import { FC } from "react";
11
11
 
12
12
  const ButtonLink: FC<{ text: string; to: string; className?: string }> = (props) => {
13
+ const navigate = useNavigate();
14
+
13
15
  return (
14
- <Link to={props.to}>
15
- <Button
16
- onClick={() => {
17
- return 0;
18
- }}
19
- text={props.text}
20
- className={clippy(styles.component, props.className)}
21
- />
22
- </Link>
16
+ <Button
17
+ onClick={() => {
18
+ navigate(props.to);
19
+ return 0;
20
+ }}
21
+ text={props.text}
22
+ className={clippy(styles.component, props.className)}
23
+ />
23
24
  );
24
25
  };
25
26
 
@@ -0,0 +1,56 @@
1
+ /*!
2
+ * Copyright ©2024 Ewsgit<https://github.com/ewsgit> and YourDash<https://github.com/yourdash> contributors.
3
+ * YourDash is licensed under the MIT License. (https://ewsgit.mit-license.org)
4
+ */
5
+
6
+ @use "@yourdash/uikit/theme/themeValues" as *;
7
+
8
+ .component {
9
+ display: flex;
10
+ align-items: center;
11
+ justify-content: center;
12
+ font-family: var(#{$theme}#{$font}#{$family});
13
+ text-align: center;
14
+ min-width: 6rem;
15
+ padding: 0 var(#{$theme}#{$button}#{$padding}#{$horizontal}) 0 0;
16
+ color: var(#{$theme}#{$button}#{$color});
17
+ border: var(#{$theme}#{$button}#{$border});
18
+ border-radius: var(#{$theme}#{$button}#{$radius});
19
+ background: var(#{$theme}#{$button}#{$background});
20
+ transition: var(#{$theme}#{$button}#{$transition});
21
+ height: var(#{$theme+$input+$height});
22
+ width: max-content;
23
+ gap: var(#{$theme+$input+$padding+$horizontal});
24
+ cursor: pointer;
25
+
26
+ &:hover {
27
+ color: var(#{$theme}#{$button}#{$hover}#{$color});
28
+ border: var(#{$theme}#{$button}#{$hover}#{$border});
29
+ border-radius: var(#{$theme}#{$button}#{$hover}#{$radius});
30
+ background: var(#{$theme}#{$button}#{$hover}#{$background});
31
+ transition: var(#{$theme}#{$button}#{$hover}#{$transition});
32
+ }
33
+
34
+ &:active {
35
+ color: var(#{$theme}#{$button}#{$active}#{$color});
36
+ border: var(#{$theme}#{$button}#{$active}#{$border});
37
+ border-radius: var(#{$theme}#{$button}#{$active}#{$radius});
38
+ background: var(#{$theme}#{$button}#{$active}#{$background});
39
+ transition: var(#{$theme}#{$button}#{$active}#{$transition});
40
+ }
41
+
42
+ &:disabled {
43
+ opacity: 0.8;
44
+
45
+ color: var(#{$theme}#{$button}#{$color});
46
+ border: var(#{$theme}#{$button}#{$border});
47
+ border-radius: var(#{$theme}#{$button}#{$radius});
48
+ background: var(#{$theme}#{$button}#{$background});
49
+ cursor: not-allowed;
50
+ }
51
+ }
52
+
53
+ .icon {
54
+ margin-left: calc(var(#{$theme}#{$button}#{$padding}#{$horizontal}) / 2);
55
+ margin-right: calc(var(#{$theme}#{$button}#{$padding}#{$horizontal}) / 4);
56
+ }
@@ -0,0 +1,36 @@
1
+ /*
2
+ * Copyright ©2024 Ewsgit<https://github.com/ewsgit> and YourDash<https://github.com/yourdash> contributors.
3
+ * YourDash is licensed under the MIT License. (https://ewsgit.mit-license.org)
4
+ */
5
+
6
+ import clippy from "@yourdash/shared/web/helpers/clippy.ts";
7
+ import Icon from "../icon/icon.tsx";
8
+ import { UKIcon } from "../icon/iconDictionary.ts";
9
+ import styles from "./buttonWithIcon.module.scss";
10
+ import { FC } from "react";
11
+
12
+ const ButtonWithIcon: FC<{
13
+ icon: UKIcon;
14
+ onClick: () => void;
15
+ text: string;
16
+ className?: string;
17
+ disabled?: boolean;
18
+ }> = (props) => {
19
+ return (
20
+ <button
21
+ className={clippy(styles.component, props.className)}
22
+ onClick={props.onClick}
23
+ aria-label={props.text}
24
+ disabled={props.disabled}
25
+ >
26
+ <Icon
27
+ size={"1.25rem"}
28
+ className={styles.icon}
29
+ icon={props.icon}
30
+ />
31
+ {props.text}
32
+ </button>
33
+ );
34
+ };
35
+
36
+ export default ButtonWithIcon;
@@ -3,7 +3,7 @@
3
3
  * YourDash is licensed under the MIT License. (https://ewsgit.mit-license.org)
4
4
  */
5
5
 
6
- @import "../../theme/themeValues";
6
+ @use "@yourdash/uikit/theme/themeValues" as *;
7
7
 
8
8
  .component {
9
9
  box-sizing: border-box;
@@ -58,12 +58,11 @@
58
58
  }
59
59
 
60
60
  .actions {
61
- border-left: none;
62
- border-right: none;
63
- border-bottom: none;
61
+ border: none;
64
62
  display: flex;
65
63
  align-items: flex-end;
66
64
  width: 100%;
65
+ background: transparent;
67
66
  }
68
67
 
69
68
  .content {
@@ -71,8 +70,9 @@
71
70
  flex-direction: column;
72
71
  gap: var(#{$theme+$gap});
73
72
  padding: var(#{$theme+$padding});
74
- padding-top: var(#{$theme+$gap});
75
- padding-bottom: var(#{$theme+$gap});
73
+ // dont remember why this was here but it might be needed again
74
+ //padding-top: var(#{$theme+$gap});
75
+ //padding-bottom: var(#{$theme+$gap});
76
76
  height: 100%;
77
77
  width: 100%;
78
78
  }
@@ -3,12 +3,13 @@
3
3
  * YourDash is licensed under the MIT License. (https://ewsgit.mit-license.org)
4
4
  */
5
5
 
6
- import clippy from "@yourdash/shared/web/helpers/clippy.js";
7
- import IncrementLevel from "../../core/incrementLevel.js";
8
- import { useLevel, useLevelClass } from "../../core/level.js";
9
- import Box from "../box/box.js";
6
+ import clippy from "@yourdash/shared/web/helpers/clippy.ts";
7
+ import IncrementLevel from "../../core/incrementLevel.tsx";
8
+ import { useLevel, useLevelClass } from "../../core/level.tsx";
9
+ import Box from "../box/box.tsx";
10
10
  import styles from "./card.module.scss";
11
11
  import { FC, Ref } from "react";
12
+ import DecrementLevel from "../../core/decrementLevel.tsx";
12
13
 
13
14
  const Card: FC<{
14
15
  level?: 0 | 1 | 2 | 3;
@@ -27,33 +28,35 @@ const Card: FC<{
27
28
  if (props.onClick) {
28
29
  return (
29
30
  <>
30
- <button
31
- style={props.style}
32
- className={clippy(styles.component, useLevelClass(level), props.containerClassName, styles.clickable)}
33
- onClick={props.onClick}
34
- >
35
- <IncrementLevel>
31
+ <IncrementLevel>
32
+ <button
33
+ style={props.style}
34
+ className={clippy(styles.component, useLevelClass(level), props.containerClassName, styles.clickable)}
35
+ onClick={props.onClick}
36
+ >
36
37
  {props.header && <Box className={clippy(styles.header, props.headerClassName)}>{props.header}</Box>}
37
38
  <div className={clippy(styles.content, props.className)}>{props.children}</div>
38
39
  {props.actions && <Box className={clippy(styles.actions, props.actionsClassName)}>{props.actions}</Box>}
39
- </IncrementLevel>
40
- </button>
40
+ </button>
41
+ </IncrementLevel>
41
42
  </>
42
43
  );
43
44
  }
44
45
 
45
46
  return (
46
47
  <>
47
- <div
48
- style={props.style}
49
- className={clippy(styles.component, useLevelClass(level), props.containerClassName)}
50
- >
51
- <IncrementLevel>
48
+ <IncrementLevel>
49
+ <div
50
+ style={props.style}
51
+ className={clippy(styles.component, useLevelClass(level), props.containerClassName)}
52
+ >
52
53
  {props.header && <Box className={clippy(styles.header, props.headerClassName)}>{props.header}</Box>}
53
54
  <div className={clippy(styles.content, props.className)}>{props.children}</div>
54
- {props.actions && <Box className={clippy(styles.actions, props.actionsClassName)}>{props.actions}</Box>}
55
- </IncrementLevel>
56
- </div>
55
+ <DecrementLevel>
56
+ {props.actions && <Box className={clippy(styles.actions, props.actionsClassName)}>{props.actions}</Box>}
57
+ </DecrementLevel>
58
+ </div>
59
+ </IncrementLevel>
57
60
  </>
58
61
  );
59
62
  };
@@ -0,0 +1,20 @@
1
+ /*!
2
+ * Copyright ©2024 Ewsgit<https://github.com/ewsgit> and YourDash<https://github.com/yourdash> contributors.
3
+ * YourDash is licensed under the MIT License. (https://ewsgit.mit-license.org)
4
+ */
5
+
6
+ @use "@yourdash/uikit/theme/themeValues" as *;
7
+
8
+ .component {
9
+ box-sizing: border-box;
10
+ display: flex;
11
+ flex-direction: column;
12
+
13
+ font-weight: var(#{$theme}#{$font}#{$weight});
14
+ font-size: var(#{$theme}#{$font}#{$size});
15
+ font-family: var(#{$theme}#{$font}#{$family});
16
+ background: var(#{$theme}#{$background});
17
+ padding: var(#{$theme}#{$padding});
18
+ border-radius: 0;
19
+ gap: var(#{$theme}#{$gap});
20
+ }
@@ -0,0 +1,22 @@
1
+ /*
2
+ * Copyright ©2024 Ewsgit<https://github.com/ewsgit> and YourDash<https://github.com/yourdash> contributors.
3
+ * YourDash is licensed under the MIT License. (https://ewsgit.mit-license.org)
4
+ */
5
+
6
+ import clippy from "@yourdash/shared/web/helpers/clippy.ts";
7
+ import { FC, ReactNode } from "react";
8
+ import IncrementLevel from "../../core/incrementLevel.tsx";
9
+ import { useLevel, useLevelClass } from "../../core/level.tsx";
10
+ import styles from "./container.module.scss";
11
+
12
+ const Container: FC<{ className?: string; level?: 0 | 1 | 2 | 3; children: ReactNode | ReactNode[] }> = (props) => {
13
+ const level = props.level || useLevel();
14
+
15
+ return (
16
+ <div className={clippy(styles.component, props.className, useLevelClass(level))}>
17
+ <IncrementLevel>{props.children}</IncrementLevel>
18
+ </div>
19
+ );
20
+ };
21
+
22
+ export default Container;
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  import { FC } from "react";
7
- import contextMenuRootContext from "./contextMenuRootContext.js";
7
+ import contextMenuRootContext from "./contextMenuRootContext.tsx";
8
8
 
9
9
  const ContextMenu: FC<{
10
10
  items: { label: string; onClick: () => void }[];
@@ -3,7 +3,7 @@
3
3
  * YourDash is licensed under the MIT License. (https://ewsgit.mit-license.org)
4
4
  */
5
5
 
6
- @import "../../theme/themeValues";
6
+ @use "@yourdash/uikit/theme/themeValues" as *;
7
7
 
8
8
  .component {
9
9
  position: fixed;
@@ -1,83 +1,83 @@
1
- /*
2
- * Copyright ©2024 Ewsgit<https://github.com/ewsgit> and YourDash<https://github.com/yourdash> contributors.
3
- * YourDash is licensed under the MIT License. (https://ewsgit.mit-license.org)
4
- */
5
-
6
- import React, { ReactNode } from "react";
7
- import { FC, useEffect, useRef } from "react";
8
- import Button from "../button/button.js";
9
- import ContextMenuRootContext from "./contextMenuRootContext.js";
10
- import styles from "./contextMenuRoot.module.scss";
11
-
12
- const ContextMenuRoot: FC<{ children: ReactNode | ReactNode[] }> = ({ children }) => {
13
- const [position, setPosition] = React.useState({ x: 0, y: 0 });
14
- const [visible, setVisible] = React.useState(false);
15
- const [items, setItems] = React.useState([] as { label: string; onClick: () => void }[]);
16
- const ref = useRef<HTMLDivElement>(null);
17
-
18
- useEffect(() => {
19
- window.addEventListener("resize", () => {
20
- setVisible(false);
21
- });
22
- }, []);
23
-
24
- return (
25
- <ContextMenuRootContext.Provider
26
- value={{
27
- createMenu: ({ x, y, width, height, items: i }) => {
28
- const screenWidth = window.innerWidth;
29
- const screenHeight = window.innerHeight;
30
-
31
- const MENU_WIDTH = ref.current?.getBoundingClientRect().width || 200;
32
- const MENU_HEIGHT = ref.current?.getBoundingClientRect().height || 200;
33
-
34
- let resultX = x;
35
- let resultY = y;
36
-
37
- if (x + MENU_WIDTH >= screenWidth) {
38
- resultX = screenWidth - MENU_WIDTH;
39
- }
40
-
41
- if (y + MENU_HEIGHT >= screenHeight) {
42
- resultY = screenHeight - MENU_HEIGHT;
43
- }
44
-
45
- setPosition({
46
- x: resultX,
47
- y: resultY,
48
- });
49
-
50
- setItems(i);
51
- setVisible(true);
52
- },
53
- destroyMenu: () => {
54
- setVisible(false);
55
- },
56
- }}
57
- >
58
- <div
59
- ref={ref}
60
- style={{
61
- display: visible ? "flex" : "none",
62
- left: position.x,
63
- top: position.y,
64
- }}
65
- className={styles.component}
66
- >
67
- {items.map((item) => {
68
- return (
69
- <Button
70
- className={styles.button}
71
- text={item.label}
72
- onClick={item.onClick}
73
- key={item.label}
74
- />
75
- );
76
- })}
77
- </div>
78
- {children}
79
- </ContextMenuRootContext.Provider>
80
- );
81
- };
82
-
83
- export default ContextMenuRoot;
1
+ /*
2
+ * Copyright ©2024 Ewsgit<https://github.com/ewsgit> and YourDash<https://github.com/yourdash> contributors.
3
+ * YourDash is licensed under the MIT License. (https://ewsgit.mit-license.org)
4
+ */
5
+
6
+ import React from "react";
7
+ import { FC, useEffect, useRef } from "react";
8
+ import Button from "../button/button.tsx";
9
+ import ContextMenuRootContext from "./contextMenuRootContext.tsx";
10
+ import styles from "./contextMenuRoot.module.scss";
11
+
12
+ const ContextMenuRoot: FC<{ children: React.ReactNode | React.ReactNode[] }> = ({ children }) => {
13
+ const [position, setPosition] = React.useState({ x: 0, y: 0 });
14
+ const [visible, setVisible] = React.useState(false);
15
+ const [items, setItems] = React.useState([] as { label: string; onClick: () => void }[]);
16
+ const ref = useRef<HTMLDivElement>(null);
17
+
18
+ useEffect(() => {
19
+ window.addEventListener("resize", () => {
20
+ setVisible(false);
21
+ });
22
+ }, []);
23
+
24
+ return (
25
+ <ContextMenuRootContext.Provider
26
+ value={{
27
+ createMenu: ({ x, y, width, height, items: i }) => {
28
+ const screenWidth = window.innerWidth;
29
+ const screenHeight = window.innerHeight;
30
+
31
+ const MENU_WIDTH = ref.current?.getBoundingClientRect().width || 200;
32
+ const MENU_HEIGHT = ref.current?.getBoundingClientRect().height || 200;
33
+
34
+ let resultX = x;
35
+ let resultY = y;
36
+
37
+ if (x + MENU_WIDTH >= screenWidth) {
38
+ resultX = screenWidth - MENU_WIDTH;
39
+ }
40
+
41
+ if (y + MENU_HEIGHT >= screenHeight) {
42
+ resultY = screenHeight - MENU_HEIGHT;
43
+ }
44
+
45
+ setPosition({
46
+ x: resultX,
47
+ y: resultY,
48
+ });
49
+
50
+ setItems(i);
51
+ setVisible(true);
52
+ },
53
+ destroyMenu: () => {
54
+ setVisible(false);
55
+ },
56
+ }}
57
+ >
58
+ <div
59
+ ref={ref}
60
+ style={{
61
+ display: visible ? "flex" : "none",
62
+ left: position.x,
63
+ top: position.y,
64
+ }}
65
+ className={styles.component}
66
+ >
67
+ {items.map((item) => {
68
+ return (
69
+ <Button
70
+ className={styles.button}
71
+ text={item.label}
72
+ onClick={item.onClick}
73
+ key={item.label}
74
+ />
75
+ );
76
+ })}
77
+ </div>
78
+ {children}
79
+ </ContextMenuRootContext.Provider>
80
+ );
81
+ };
82
+
83
+ export default ContextMenuRoot;
@@ -1,19 +1,31 @@
1
- /*!
2
- * Copyright ©2024 Ewsgit<https://github.com/ewsgit> and YourDash<https://github.com/yourdash> contributors.
3
- * YourDash is licensed under the MIT License. (https://ewsgit.mit-license.org)
4
- */
5
-
6
- @import "../../theme/themeValues";
7
-
8
- .component {
9
- display: flex;
10
- gap: var(#{$theme}#{$gap});
11
- }
12
-
13
- .row {
14
- flex-direction: row;
15
- }
16
-
17
- .column {
18
- flex-direction: column;
19
- }
1
+ /*!
2
+ * Copyright ©2024 Ewsgit<https://github.com/ewsgit> and YourDash<https://github.com/yourdash> contributors.
3
+ * YourDash is licensed under the MIT License. (https://ewsgit.mit-license.org)
4
+ */
5
+
6
+ @use "@yourdash/uikit/theme/themeValues" as *;
7
+
8
+ .component {
9
+ display: flex;
10
+ gap: var(#{$theme}#{$gap});
11
+ }
12
+
13
+ .row {
14
+ flex-direction: row;
15
+ }
16
+
17
+ .column {
18
+ flex-direction: column;
19
+ }
20
+
21
+ .centerHorizontally {
22
+ align-items: center;
23
+ }
24
+
25
+ .centerVertically {
26
+ justify-content: center;
27
+ }
28
+
29
+ .padding {
30
+ padding: var(#{$theme+$padding});
31
+ }
@@ -3,11 +3,32 @@
3
3
  * YourDash is licensed under the MIT License. (https://ewsgit.mit-license.org)
4
4
  */
5
5
 
6
+ import clippy from "@yourdash/shared/web/helpers/clippy.ts";
6
7
  import styles from "./flex.module.scss";
7
8
  import { FC, ReactNode } from "react";
8
9
 
9
- const Flex: FC<{ direction: "row" | "column"; className?: string; children: ReactNode | ReactNode[] }> = (props) => {
10
- return <div className={`${styles.component} ${styles[props.direction]} ${props.className}`}>{props.children}</div>;
10
+ const Flex: FC<{
11
+ direction: "row" | "column";
12
+ className?: string;
13
+ children: ReactNode | ReactNode[];
14
+ centerHorizontally?: boolean;
15
+ centerVertically?: boolean;
16
+ padding?: boolean;
17
+ }> = (props) => {
18
+ return (
19
+ <div
20
+ className={clippy(
21
+ styles.component,
22
+ styles[props.direction],
23
+ props.className,
24
+ props.centerHorizontally && styles.centerHorizontally,
25
+ props.centerVertically && styles.centerVertically,
26
+ props.padding && styles.padding,
27
+ )}
28
+ >
29
+ {props.children}
30
+ </div>
31
+ );
11
32
  };
12
33
 
13
34
  export default Flex;
@@ -3,7 +3,7 @@
3
3
  * YourDash is licensed under the MIT License. (https://ewsgit.mit-license.org)
4
4
  */
5
5
 
6
- @import "../../theme/themeValues";
6
+ @use "@yourdash/uikit/theme/themeValues" as *;
7
7
 
8
8
  .component {
9
9
  display: inline-block;
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  import styles from "./heading.module.scss";
7
- import clippy from "@yourdash/shared/web/helpers/clippy";
7
+ import clippy from "@yourdash/shared/web/helpers/clippy.ts";
8
8
  import { FC } from "react";
9
9
 
10
10
  const Heading: FC<{ text: string; level?: 1 | 2 | 3 | 4 | 5 | 6; className?: string }> = (props) => {