@yourdash/uikit 1.0.3 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,23 @@
1
+ /*!
2
+ * Copyright ©2024 Ewsgit <https://ewsgit.uk> and YourDash <https://yourdash.ewsgit.uk> contributors.
3
+ * YourDash is licensed under the MIT License. (https://mit.ewsgit.uk)
4
+ */
5
+
6
+ .component {
7
+ display: flex;
8
+ flex-direction: row;
9
+
10
+ > *:not(:first-child):not(:last-child) {
11
+ border-radius: 0 !important;
12
+ }
13
+
14
+ > *:first-child {
15
+ border-top-right-radius: 0 !important;
16
+ border-bottom-right-radius: 0 !important;
17
+ }
18
+
19
+ > *:last-child {
20
+ border-top-left-radius: 0 !important;
21
+ border-bottom-left-radius: 0 !important;
22
+ }
23
+ }
@@ -0,0 +1,14 @@
1
+ /*
2
+ * Copyright ©2024 Ewsgit <https://ewsgit.uk> and YourDash <https://yourdash.ewsgit.uk> contributors.
3
+ * YourDash is licensed under the MIT License. (https://mit.ewsgit.uk)
4
+ */
5
+
6
+ import clippy from "@yourdash/shared/web/helpers/clippy.ts";
7
+ import React from "react";
8
+ import styles from "./buttonCombo.module.scss";
9
+
10
+ const ButtonCombo: React.FC<{ children: React.ReactNode[] }> = ({ children }) => {
11
+ return <div className={clippy(styles.component)}>{children}</div>;
12
+ };
13
+
14
+ export default ButtonCombo;
@@ -8,7 +8,6 @@
8
8
  .component {
9
9
  font-family: var(#{$theme}#{$font}#{$family});
10
10
  text-align: center;
11
- min-width: 6rem;
12
11
  padding: 0 var(#{$theme}#{$button}#{$padding}#{$horizontal});
13
12
  color: var(#{$theme}#{$button}#{$color});
14
13
  border: var(#{$theme}#{$button}#{$border});
@@ -11,7 +11,6 @@
11
11
  justify-content: center;
12
12
  font-family: var(#{$theme}#{$font}#{$family});
13
13
  text-align: center;
14
- min-width: 6rem;
15
14
  padding: 0 var(#{$theme}#{$button}#{$padding}#{$horizontal}) 0 0;
16
15
  color: var(#{$theme}#{$button}#{$color});
17
16
  border: var(#{$theme}#{$button}#{$border});
@@ -20,7 +19,6 @@
20
19
  transition: var(#{$theme}#{$button}#{$transition});
21
20
  height: var(#{$theme+$input+$height});
22
21
  width: max-content;
23
- gap: var(#{$theme+$input+$padding+$horizontal});
24
22
  cursor: pointer;
25
23
 
26
24
  &:hover {
@@ -66,6 +66,7 @@
66
66
  }
67
67
 
68
68
  .content {
69
+ box-sizing: border-box;
69
70
  display: flex;
70
71
  flex-direction: column;
71
72
  gap: var(#{$theme+$gap});
@@ -74,5 +75,4 @@
74
75
  //padding-top: var(#{$theme+$gap});
75
76
  //padding-bottom: var(#{$theme+$gap});
76
77
  height: 100%;
77
- width: 100%;
78
78
  }
@@ -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 Icon from "../icon/icon.tsx";
7
- import { UKIcon } from "../icon/iconDictionary.ts";
8
- import styles from "./image.module.scss";
9
- import { FC, useEffect, useRef, useState } from "react";
10
- import clippy from "@yourdash/shared/web/helpers/clippy.ts";
11
-
12
- const Image: FC<{
13
- src: string;
14
- accessibleLabel: string;
15
- containerClassName?: string;
16
- className?: string;
17
- disableLazyLoading?: boolean;
18
- noRounding?: boolean;
19
- width?: number;
20
- height?: number;
21
- }> = (props) => {
22
- const ref = useRef<HTMLDivElement>(null);
23
- const [src, setSrc] = useState<string>(props.src);
24
- const [loaded, setLoaded] = useState<boolean>(false);
25
- const [hasFailed, setHasFailed] = useState<boolean>(false);
26
- const [backgroundSize, setBackgroundSize] = useState<number>(0);
27
-
28
- useEffect(() => {
29
- const rc = ref.current;
30
-
31
- if (!rc) {
32
- return;
33
- }
34
-
35
- setTimeout(() => {
36
- const bounds = rc.getBoundingClientRect();
37
-
38
- setBackgroundSize(bounds.height > bounds.width ? bounds.height : bounds.width);
39
- }, 0);
40
- }, [src]);
41
-
42
- useEffect(() => {
43
- setHasFailed(false);
44
- setLoaded(false);
45
- }, [src]);
46
-
47
- useEffect(() => {
48
- if (props.src !== src) {
49
- setSrc(props.src);
50
- }
51
- }, [props.src]);
52
-
53
- return (
54
- <div
55
- ref={ref}
56
- className={clippy(styles.componentContainer, props.containerClassName, !loaded && styles.loading, hasFailed && styles.serverError)}
57
- style={{
58
- // @ts-ignore
59
- "--background-size": backgroundSize + "px",
60
- }}
61
- >
62
- {!hasFailed ? (
63
- <img
64
- className={clippy(styles.component, props.className, loaded && styles.loaded, props.noRounding && styles.noRounding)}
65
- draggable={false}
66
- width={props.width}
67
- height={props.height}
68
- onError={() => setHasFailed(true)}
69
- loading={props.disableLazyLoading ? "eager" : "lazy"}
70
- alt={props.accessibleLabel}
71
- onLoad={(e) => {
72
- setLoaded(e.currentTarget.complete);
73
- }}
74
- src={src}
75
- />
76
- ) : (
77
- <Icon icon={UKIcon.ServerError} />
78
- )}
79
- </div>
80
- );
81
- };
82
-
83
- export default Image;
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 Icon from "../icon/icon.tsx";
7
+ import { UKIcon } from "../icon/iconDictionary.ts";
8
+ import styles from "./image.module.scss";
9
+ import { FC, useEffect, useRef, useState } from "react";
10
+ import clippy from "@yourdash/shared/web/helpers/clippy.ts";
11
+
12
+ const Image: FC<{
13
+ src: string;
14
+ accessibleLabel: string;
15
+ containerClassName?: string;
16
+ className?: string;
17
+ disableLazyLoading?: boolean;
18
+ noRounding?: boolean;
19
+ width?: number;
20
+ height?: number;
21
+ }> = (props) => {
22
+ const ref = useRef<HTMLDivElement>(null);
23
+ const [src, setSrc] = useState<string>(props.src);
24
+ const [loaded, setLoaded] = useState<boolean>(false);
25
+ const [hasFailed, setHasFailed] = useState<boolean>(false);
26
+ const [backgroundSize, setBackgroundSize] = useState<number>(0);
27
+
28
+ useEffect(() => {
29
+ const rc = ref.current;
30
+
31
+ if (!rc) {
32
+ return;
33
+ }
34
+
35
+ setTimeout(() => {
36
+ const bounds = rc.getBoundingClientRect();
37
+
38
+ setBackgroundSize(bounds.height > bounds.width ? bounds.height : bounds.width);
39
+ }, 0);
40
+ }, [src]);
41
+
42
+ useEffect(() => {
43
+ setHasFailed(false);
44
+ setLoaded(false);
45
+ }, [src]);
46
+
47
+ useEffect(() => {
48
+ if (props.src !== src) {
49
+ setSrc(props.src);
50
+ }
51
+ }, [props.src]);
52
+
53
+ return (
54
+ <div
55
+ ref={ref}
56
+ className={clippy(styles.componentContainer, props.containerClassName, !loaded && styles.loading, hasFailed && styles.serverError)}
57
+ style={{
58
+ // @ts-ignore
59
+ "--background-size": backgroundSize + "px",
60
+ }}
61
+ >
62
+ {!hasFailed ? (
63
+ <img
64
+ className={clippy(styles.component, props.className, loaded && styles.loaded, props.noRounding && styles.noRounding)}
65
+ draggable={false}
66
+ width={props.width}
67
+ height={props.height}
68
+ onError={() => setHasFailed(true)}
69
+ loading={props.disableLazyLoading ? "eager" : "lazy"}
70
+ alt={props.accessibleLabel}
71
+ onLoad={(e) => {
72
+ setLoaded(e.currentTarget.complete);
73
+ }}
74
+ src={src}
75
+ />
76
+ ) : (
77
+ <Icon icon={UKIcon.ServerError} />
78
+ )}
79
+ </div>
80
+ );
81
+ };
82
+
83
+ export default Image;
@@ -30,3 +30,7 @@
30
30
  transition: var(#{$theme+$button+$active+$transition});
31
31
  }
32
32
  }
33
+
34
+ .icon {
35
+
36
+ }
@@ -1,21 +1,29 @@
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 styles from "./link.module.scss";
8
- import { FC } from "react";
9
-
10
- const Link: FC<{ text: string; to: string; className?: string }> = (props) => {
11
- return (
12
- <a
13
- href={props.to}
14
- className={clippy(styles.component, props.className)}
15
- >
16
- {props.text}
17
- </a>
18
- );
19
- };
20
-
21
- export default Link;
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 "./link.module.scss";
10
+ import { FC } from "react";
11
+
12
+ const Link: FC<{ text: string; to: string; className?: string; hideLinkIcon?: boolean }> = (props) => {
13
+ return (
14
+ <a
15
+ href={props.to}
16
+ className={clippy(styles.component, props.className)}
17
+ >
18
+ {props.text}
19
+ {!props.hideLinkIcon && (
20
+ <Icon
21
+ icon={UKIcon.Link}
22
+ className={styles.icon}
23
+ />
24
+ )}
25
+ </a>
26
+ );
27
+ };
28
+
29
+ export default Link;
@@ -1,21 +1,29 @@
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 styles from "./progressBar.module.scss";
8
- import { FC } from "react";
9
-
10
- // TODO: rewrite this component to use the HTML progress bar
11
- const ProgressBar: FC<{ maxValue?: number; value: number; className?: string }> = ({ maxValue, value, className }) => {
12
- return (
13
- <progress
14
- max={maxValue}
15
- value={value}
16
- className={className}
17
- />
18
- );
19
- };
20
-
21
- export default ProgressBar;
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 styles from "./progressBar.module.scss";
8
+ import { FC } from "react";
9
+
10
+ // TODO: rewrite this component to use the HTML progress bar
11
+ const ProgressBar: FC<{ maxValue?: number; value: number; className?: string; indeterminate?: boolean }> = ({
12
+ maxValue,
13
+ value,
14
+ className,
15
+ indeterminate,
16
+ }) => {
17
+ return (
18
+ <>
19
+ <progress
20
+ max={maxValue}
21
+ value={value}
22
+ className={className}
23
+ />
24
+ {indeterminate && "This should be indeterminate"}
25
+ </>
26
+ );
27
+ };
28
+
29
+ export default ProgressBar;
@@ -1,17 +1,23 @@
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 { FC } from "react";
7
- import { useNavigate } from "react-router";
8
-
9
- const Redirect: FC<{ to: string | null }> = (props) => {
10
- const navigate = useNavigate();
11
-
12
- if (props.to !== null) navigate(props.to);
13
-
14
- return <>Redirecting to {props.to}</>;
15
- };
16
-
17
- export default Redirect;
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 { FC } from "react";
7
+ import { useNavigate } from "react-router";
8
+ import Card from "../card/card.tsx";
9
+ import Text from "../text/text.tsx";
10
+
11
+ const Redirect: FC<{ to: string | null }> = (props) => {
12
+ const navigate = useNavigate();
13
+
14
+ if (props.to !== null) navigate(props.to);
15
+
16
+ return (
17
+ <Card>
18
+ <Text text={`Redirecting to ${props.to}`} />
19
+ </Card>
20
+ );
21
+ };
22
+
23
+ export default Redirect;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yourdash/uikit",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "engines": {