@soul-refiner/design-system 0.0.13 → 0.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +4 -0
- package/.turbo/turbo-build.log +12 -0
- package/.turbo/turbo-test.log +4417 -0
- package/CHANGELOG.md +7 -0
- package/babel.config.js +6 -0
- package/custom.d.ts +4 -0
- package/package.json +1 -13
- package/src/actions/Button/Button.module.scss +205 -0
- package/src/actions/Button/Button.spec.js +56 -0
- package/src/actions/Button/Button.tsx +143 -0
- package/src/actions/Button/index.ts +1 -0
- package/src/actions/Dropdown/Dropdown.module.scss +77 -0
- package/src/actions/Dropdown/Dropdown.spec.js +149 -0
- package/src/actions/Dropdown/Dropdown.tsx +224 -0
- package/src/actions/Dropdown/index.ts +6 -0
- package/src/actions/Dropzone/Dropzone.module.scss +48 -0
- package/src/actions/Dropzone/Dropzone.spec.js +60 -0
- package/src/actions/Dropzone/Dropzone.tsx +191 -0
- package/src/actions/Dropzone/index.ts +1 -0
- package/src/actions/Rate/Rate.module.scss +17 -0
- package/src/actions/Rate/Rate.tsx +53 -0
- package/src/actions/Rate/index.ts +1 -0
- package/src/actions/Switch/Switch.module.scss +35 -0
- package/src/actions/Switch/Switch.spec.js +31 -0
- package/src/actions/Switch/Switch.tsx +34 -0
- package/src/actions/Switch/index.ts +1 -0
- package/src/actions/index.ts +5 -0
- package/src/cards/CourseCard/CourseCard.module.scss +219 -0
- package/src/cards/CourseCard/CourseCard.spec.js +60 -0
- package/src/cards/CourseCard/CourseCard.tsx +145 -0
- package/src/cards/CourseCard/index.ts +1 -0
- package/src/cards/EpisodeCard/EpisodeCard.module.scss +69 -0
- package/src/cards/EpisodeCard/EpisodeCard.tsx +53 -0
- package/src/cards/EpisodeCard/index.ts +1 -0
- package/src/cards/FeatureCard/FeatureCard.module.scss +116 -0
- package/src/cards/FeatureCard/FeatureCard.spec.js +70 -0
- package/src/cards/FeatureCard/FeatureCard.tsx +123 -0
- package/src/cards/FeatureCard/index.ts +1 -0
- package/src/cards/index.ts +3 -0
- package/src/data/Bar/Bar.module.scss +105 -0
- package/src/data/Bar/Bar.tsx +161 -0
- package/src/data/Bar/index.ts +1 -0
- package/src/data/Line/Line.module.scss +102 -0
- package/src/data/Line/Line.tsx +162 -0
- package/src/data/Line/index.ts +1 -0
- package/src/data/Pie/Pie.module.scss +56 -0
- package/src/data/Pie/Pie.spec.js +72 -0
- package/src/data/Pie/Pie.tsx +111 -0
- package/src/data/Pie/index.ts +1 -0
- package/src/data/index.ts +3 -0
- package/src/editor/Editor.module.scss +125 -0
- package/src/editor/Editor.tsx +327 -0
- package/src/editor/common/elements.ts +50 -0
- package/src/editor/common/index.ts +2 -0
- package/src/editor/common/marks.ts +27 -0
- package/src/editor/components/MediaDrawer/MediaDrawer.module.scss +316 -0
- package/src/editor/components/MediaDrawer/MediaDrawer.tsx +457 -0
- package/src/editor/components/MediaDrawer/index.ts +1 -0
- package/src/editor/components/index.ts +1 -0
- package/src/editor/config/default.ts +213 -0
- package/src/editor/config/index.ts +2 -0
- package/src/editor/config/props.ts +9 -0
- package/src/editor/index.ts +2 -0
- package/src/editor/plateUI.ts +82 -0
- package/src/editor/plugins/blocks.tsx +71 -0
- package/src/editor/plugins/custom/assets/DefaultThumbnail.tsx +57 -0
- package/src/editor/plugins/custom/assets/index.ts +1 -0
- package/src/editor/plugins/custom/buttons.tsx +289 -0
- package/src/editor/plugins/custom/example.tsx +64 -0
- package/src/editor/plugins/custom/exitBreak.ts +41 -0
- package/src/editor/plugins/custom/footnote.tsx +185 -0
- package/src/editor/plugins/custom/index.ts +14 -0
- package/src/editor/plugins/custom/paywall.tsx +156 -0
- package/src/editor/plugins/custom/qa.tsx +390 -0
- package/src/editor/plugins/custom/resetBlockType.ts +29 -0
- package/src/editor/plugins/custom/selectOnBackspace.ts +7 -0
- package/src/editor/plugins/custom/softBreak.ts +20 -0
- package/src/editor/plugins/custom/styles/Button.module.scss +51 -0
- package/src/editor/plugins/custom/styles/Footnote.module.scss +58 -0
- package/src/editor/plugins/custom/styles/Paywall.module.scss +67 -0
- package/src/editor/plugins/custom/styles/QA.module.scss +140 -0
- package/src/editor/plugins/custom/styles/Video.module.scss +79 -0
- package/src/editor/plugins/custom/video.tsx +163 -0
- package/src/editor/plugins/index.ts +18 -0
- package/src/editor/plugins/inline.ts +46 -0
- package/src/editor/plugins/marks.ts +25 -0
- package/src/editor/plugins/utils.ts +22 -0
- package/src/feedback/Chip/Chip.module.scss +23 -0
- package/src/feedback/Chip/Chip.tsx +58 -0
- package/src/feedback/Chip/index.ts +1 -0
- package/src/feedback/Loader/Loader.module.scss +18 -0
- package/src/feedback/Loader/Loader.spec.js +18 -0
- package/src/feedback/Loader/Loader.tsx +53 -0
- package/src/feedback/Loader/index.ts +1 -0
- package/src/feedback/ProgressBar/ProgressBar.module.scss +13 -0
- package/src/feedback/ProgressBar/ProgressBar.tsx +32 -0
- package/src/feedback/ProgressBar/index.ts +1 -0
- package/src/feedback/Toast/Toast.module.scss +44 -0
- package/src/feedback/Toast/Toast.tsx +76 -0
- package/src/feedback/Toast/index.ts +1 -0
- package/src/feedback/Tooltip/Tooltip.module.scss +47 -0
- package/src/feedback/Tooltip/Tooltip.tsx +10 -0
- package/src/feedback/Tooltip/index.ts +1 -0
- package/src/feedback/index.ts +5 -0
- package/src/global.d.ts +6 -0
- package/src/iconography/Avatar/Avatar.module.scss +90 -0
- package/src/iconography/Avatar/Avatar.spec.js +75 -0
- package/src/iconography/Avatar/Avatar.tsx +96 -0
- package/src/iconography/Avatar/DefaultIcon.svg +4 -0
- package/src/iconography/Avatar/DefaultIcon.tsx +12 -0
- package/src/iconography/Avatar/iconHelpers.tsx +186 -0
- package/src/iconography/Avatar/index.ts +1 -0
- package/src/iconography/ColoredIcon/ColoredIcon.module.scss +40 -0
- package/src/iconography/ColoredIcon/ColoredIcon.tsx +30 -0
- package/src/iconography/ColoredIcon/index.ts +5 -0
- package/src/iconography/DevicePreview/DevicePreview.module.scss +143 -0
- package/src/iconography/DevicePreview/DevicePreview.tsx +592 -0
- package/src/iconography/DevicePreview/index.ts +1 -0
- package/src/iconography/IconHeader/IconHeader.module.scss +42 -0
- package/src/iconography/IconHeader/IconHeader.tsx +42 -0
- package/src/iconography/IconHeader/index.ts +1 -0
- package/src/iconography/StarRating/StarRating.tsx +99 -0
- package/src/iconography/StarRating/index.ts +1 -0
- package/src/iconography/index.ts +5 -0
- package/src/implementations/BodyContent/BodyContent.module.scss +38 -0
- package/src/implementations/BodyContent/BodyContent.tsx +78 -0
- package/src/implementations/BodyContent/index.ts +2 -0
- package/src/implementations/JoinGroupModal/JoinGroupModal.module.scss +83 -0
- package/src/implementations/JoinGroupModal/JoinGroupModal.tsx +176 -0
- package/src/implementations/JoinGroupModal/index.ts +1 -0
- package/src/implementations/index.ts +2 -0
- package/src/index.ts +149 -0
- package/src/inputs/CalendarInput/CalendarInput.module.scss +38 -0
- package/src/inputs/CalendarInput/CalendarInput.spec.js +19 -0
- package/src/inputs/CalendarInput/CalendarInput.tsx +29 -0
- package/src/inputs/CalendarInput/index.ts +1 -0
- package/src/inputs/CheckboxInput/CheckboxInput.module.scss +23 -0
- package/src/inputs/CheckboxInput/CheckboxInput.tsx +39 -0
- package/src/inputs/CheckboxInput/index.ts +1 -0
- package/src/inputs/FeedInput/FeedInput.module.scss +48 -0
- package/src/inputs/FeedInput/FeedInput.spec.js +16 -0
- package/src/inputs/FeedInput/FeedInput.tsx +197 -0
- package/src/inputs/FeedInput/index.ts +1 -0
- package/src/inputs/InboxInput/InboxInput.module.scss +48 -0
- package/src/inputs/InboxInput/InboxInput.spec.js +19 -0
- package/src/inputs/InboxInput/InboxInput.tsx +97 -0
- package/src/inputs/InboxInput/index.ts +1 -0
- package/src/inputs/PostInput/PostInput.module.scss +49 -0
- package/src/inputs/PostInput/PostInput.spec.js +19 -0
- package/src/inputs/PostInput/PostInput.tsx +54 -0
- package/src/inputs/PostInput/index.ts +1 -0
- package/src/inputs/RadioInput/RadioInput.module.scss +68 -0
- package/src/inputs/RadioInput/RadioInput.tsx +55 -0
- package/src/inputs/RadioInput/index.ts +1 -0
- package/src/inputs/SearchInput/SearchInput.module.scss +40 -0
- package/src/inputs/SearchInput/SearchInput.tsx +61 -0
- package/src/inputs/SearchInput/index.ts +1 -0
- package/src/inputs/SelectInput/SelectInput.module.scss +66 -0
- package/src/inputs/SelectInput/SelectInput.tsx +145 -0
- package/src/inputs/SelectInput/index.ts +1 -0
- package/src/inputs/TagInput/TagInput.module.scss +75 -0
- package/src/inputs/TagInput/TagInput.tsx +115 -0
- package/src/inputs/TagInput/index.ts +1 -0
- package/src/inputs/TextInput/TextInput.module.scss +35 -0
- package/src/inputs/TextInput/TextInput.tsx +46 -0
- package/src/inputs/TextInput/index.ts +1 -0
- package/src/inputs/index.ts +10 -0
- package/src/lists/ContactDetails/ContactDetails.module.scss +70 -0
- package/src/lists/ContactDetails/ContactDetails.spec.js +69 -0
- package/src/lists/ContactDetails/ContactDetails.tsx +185 -0
- package/src/lists/ContactDetails/index.ts +1 -0
- package/src/lists/index.ts +1 -0
- package/src/navigation/Breadcrumbs/Breadcrumbs.module.scss +18 -0
- package/src/navigation/Breadcrumbs/Breadcrumbs.spec.js +38 -0
- package/src/navigation/Breadcrumbs/Breadcrumbs.tsx +43 -0
- package/src/navigation/Breadcrumbs/index.ts +1 -0
- package/src/navigation/Drawer/Drawer.module.scss +104 -0
- package/src/navigation/Drawer/Drawer.tsx +177 -0
- package/src/navigation/Drawer/index.ts +1 -0
- package/src/navigation/EditorBar/EditorBar.module.scss +118 -0
- package/src/navigation/EditorBar/EditorBar.tsx +416 -0
- package/src/navigation/EditorBar/components/AlignmentDropdown/AlignmentDropdown.tsx +106 -0
- package/src/navigation/EditorBar/components/AlignmentDropdown/index.ts +1 -0
- package/src/navigation/EditorBar/components/ButtonModal/ButtonModal.module.scss +85 -0
- package/src/navigation/EditorBar/components/ButtonModal/ButtonModal.tsx +314 -0
- package/src/navigation/EditorBar/components/ButtonModal/assets/Comment.tsx +28 -0
- package/src/navigation/EditorBar/components/ButtonModal/assets/GiftSubscription.tsx +28 -0
- package/src/navigation/EditorBar/components/ButtonModal/assets/Link.tsx +28 -0
- package/src/navigation/EditorBar/components/ButtonModal/assets/Share.tsx +28 -0
- package/src/navigation/EditorBar/components/ButtonModal/assets/ShareCommunity.tsx +42 -0
- package/src/navigation/EditorBar/components/ButtonModal/assets/Signup.tsx +68 -0
- package/src/navigation/EditorBar/components/ButtonModal/assets/Special.tsx +24 -0
- package/src/navigation/EditorBar/components/ButtonModal/assets/Subscribe.tsx +28 -0
- package/src/navigation/EditorBar/components/ButtonModal/assets/index.ts +8 -0
- package/src/navigation/EditorBar/components/ButtonModal/index.ts +1 -0
- package/src/navigation/EditorBar/components/FontDropdown/FontDropdown.module.scss +16 -0
- package/src/navigation/EditorBar/components/FontDropdown/FontDropdown.tsx +137 -0
- package/src/navigation/EditorBar/components/FontDropdown/index.ts +1 -0
- package/src/navigation/EditorBar/components/MoreDropdown/MoreDropdown.module.scss +43 -0
- package/src/navigation/EditorBar/components/MoreDropdown/MoreDropdown.tsx +124 -0
- package/src/navigation/EditorBar/components/MoreDropdown/index.ts +1 -0
- package/src/navigation/EditorBar/components/OutlineDropdown/OutlineDropdown.module.scss +21 -0
- package/src/navigation/EditorBar/components/OutlineDropdown/OutlineDropdown.tsx +37 -0
- package/src/navigation/EditorBar/components/OutlineDropdown/index.ts +1 -0
- package/src/navigation/EditorBar/components/TextTypeDropdown/TextTypeDropdown.module.scss +51 -0
- package/src/navigation/EditorBar/components/TextTypeDropdown/TextTypeDropdown.tsx +80 -0
- package/src/navigation/EditorBar/components/TextTypeDropdown/index.ts +1 -0
- package/src/navigation/EditorBar/components/VideoModal/VideoModal.module.scss +150 -0
- package/src/navigation/EditorBar/components/VideoModal/VideoModal.tsx +163 -0
- package/src/navigation/EditorBar/components/VideoModal/index.ts +1 -0
- package/src/navigation/EditorBar/components/index.ts +7 -0
- package/src/navigation/EditorBar/index.ts +1 -0
- package/src/navigation/MenuTabs/MenuTabs.module.scss +34 -0
- package/src/navigation/MenuTabs/MenuTabs.spec.js +36 -0
- package/src/navigation/MenuTabs/MenuTabs.tsx +52 -0
- package/src/navigation/MenuTabs/index.ts +1 -0
- package/src/navigation/Navigation/Navigation.module.scss +92 -0
- package/src/navigation/Navigation/Navigation.spec.js +144 -0
- package/src/navigation/Navigation/Navigation.tsx +111 -0
- package/src/navigation/Navigation/SubNavigation.module.scss +255 -0
- package/src/navigation/Navigation/SubNavigation.spec.js +112 -0
- package/src/navigation/Navigation/SubNavigation.tsx +443 -0
- package/src/navigation/Navigation/index.ts +15 -0
- package/src/navigation/Pagination/Pagination.module.scss +49 -0
- package/src/navigation/Pagination/Pagination.tsx +115 -0
- package/src/navigation/Pagination/index.ts +1 -0
- package/src/navigation/index.ts +21 -0
- package/src/surfaces/Comment/Comment.module.scss +106 -0
- package/src/surfaces/Comment/Comment.spec.js +105 -0
- package/src/surfaces/Comment/Comment.tsx +157 -0
- package/src/surfaces/Comment/index.ts +1 -0
- package/src/surfaces/Faq/Faq.module.scss +91 -0
- package/src/surfaces/Faq/Faq.spec.js +38 -0
- package/src/surfaces/Faq/Faq.tsx +156 -0
- package/src/surfaces/Faq/index.ts +1 -0
- package/src/surfaces/Message/Message.module.scss +37 -0
- package/src/surfaces/Message/Message.spec.js +47 -0
- package/src/surfaces/Message/Message.tsx +54 -0
- package/src/surfaces/Message/index.ts +1 -0
- package/src/surfaces/Modal/Modal.module.scss +52 -0
- package/src/surfaces/Modal/Modal.spec.js +38 -0
- package/src/surfaces/Modal/Modal.tsx +131 -0
- package/src/surfaces/Modal/index.ts +5 -0
- package/src/surfaces/Plan/Plan.module.scss +79 -0
- package/src/surfaces/Plan/Plan.tsx +75 -0
- package/src/surfaces/Plan/index.ts +1 -0
- package/src/surfaces/Post/Post.module.scss +46 -0
- package/src/surfaces/Post/Post.spec.js +103 -0
- package/src/surfaces/Post/Post.tsx +185 -0
- package/src/surfaces/Post/index.ts +1 -0
- package/src/surfaces/Post/postHelpers.ts +20 -0
- package/src/surfaces/ProfileHeader/ProfileHeader.module.scss +202 -0
- package/src/surfaces/ProfileHeader/ProfileHeader.tsx +103 -0
- package/src/surfaces/ProfileHeader/index.ts +1 -0
- package/src/surfaces/RatingsOverview/RatingsOverview.module.scss +54 -0
- package/src/surfaces/RatingsOverview/RatingsOverview.tsx +69 -0
- package/src/surfaces/RatingsOverview/index.ts +1 -0
- package/src/surfaces/Review/Review.module.scss +73 -0
- package/src/surfaces/Review/Review.tsx +88 -0
- package/src/surfaces/Review/index.ts +1 -0
- package/src/surfaces/index.ts +9 -0
- package/src/tables/Filter/Filter.module.scss +34 -0
- package/src/tables/Filter/Filter.tsx +30 -0
- package/src/tables/Filter/index.ts +1 -0
- package/src/tables/Table/Table.module.scss +126 -0
- package/src/tables/Table/Table.spec.js +113 -0
- package/src/tables/Table/Table.tsx +251 -0
- package/src/tables/Table/index.ts +7 -0
- package/src/tables/index.ts +7 -0
- package/tsconfig.json +14 -0
- package/vite.config.ts +28 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import progressStyle from "./ProgressBar.module.scss";
|
|
3
|
+
|
|
4
|
+
export interface ProgressBarProps {
|
|
5
|
+
percent: number;
|
|
6
|
+
color?: string;
|
|
7
|
+
backgroundColor?: string;
|
|
8
|
+
height?: number;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const ProgressBar = ({
|
|
12
|
+
percent,
|
|
13
|
+
height,
|
|
14
|
+
backgroundColor,
|
|
15
|
+
color,
|
|
16
|
+
}: ProgressBarProps) => {
|
|
17
|
+
const backgroundStyle = {
|
|
18
|
+
backgroundColor: backgroundColor,
|
|
19
|
+
height: `${height || 7}px`,
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const fillStyle = {
|
|
23
|
+
backgroundColor: color,
|
|
24
|
+
width: `${percent}%`,
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<div style={backgroundStyle} className={progressStyle.progressBar}>
|
|
29
|
+
<div style={fillStyle} className={progressStyle.fill}></div>
|
|
30
|
+
</div>
|
|
31
|
+
);
|
|
32
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ProgressBar, type ProgressBarProps } from "./ProgressBar";
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
@use "@soul-refiner/styles/_mixins";
|
|
2
|
+
|
|
3
|
+
.toast {
|
|
4
|
+
@include mixins.flex($gap: 20px);
|
|
5
|
+
width: 365px;
|
|
6
|
+
position: fixed;
|
|
7
|
+
bottom: 0;
|
|
8
|
+
right: 0;
|
|
9
|
+
padding: 20px;
|
|
10
|
+
border-radius: var(--border-radius-tiny);
|
|
11
|
+
border: 1px solid var(--color-grey-9);
|
|
12
|
+
box-shadow: 0px 16px 24px 4px rgba(18, 28, 45, 0.2);
|
|
13
|
+
user-select: none;
|
|
14
|
+
background-color: #ffffff;
|
|
15
|
+
z-index: 9990;
|
|
16
|
+
|
|
17
|
+
div {
|
|
18
|
+
border-radius: 50%;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
&[class~="success"] {
|
|
22
|
+
border-left: 4px solid var(--color-green-5);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
&[class~="error"] {
|
|
26
|
+
border-left: 4px solid var(--color-red-5);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
&[class~="pending"] {
|
|
30
|
+
border-left: 4px solid var(--color-yellow-5);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
&[class~="neutral"] {
|
|
34
|
+
border-left: 4px solid var(--color-blue-3);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
button:hover {
|
|
38
|
+
border-radius: 50%;
|
|
39
|
+
background-color: var(--color-grey-9);
|
|
40
|
+
& > svg {
|
|
41
|
+
fill: var(--color-grey-3);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import toastStyles from "./Toast.module.scss";
|
|
3
|
+
import {
|
|
4
|
+
Check,
|
|
5
|
+
CircleInformation,
|
|
6
|
+
Close,
|
|
7
|
+
Pencil,
|
|
8
|
+
Slash,
|
|
9
|
+
} from "@soul-refiner/icons/src";
|
|
10
|
+
|
|
11
|
+
export interface ToastProps extends React.PropsWithChildren {
|
|
12
|
+
icon?: React.ReactNode;
|
|
13
|
+
onDismiss: () => void;
|
|
14
|
+
type: "success" | "error" | "pending" | "neutral";
|
|
15
|
+
visible: boolean;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const Toast = ({
|
|
19
|
+
children,
|
|
20
|
+
icon: customIcon,
|
|
21
|
+
onDismiss,
|
|
22
|
+
type,
|
|
23
|
+
visible,
|
|
24
|
+
}: ToastProps) => {
|
|
25
|
+
if (!visible) return null;
|
|
26
|
+
const icon = customIcon ? (
|
|
27
|
+
customIcon
|
|
28
|
+
) : type === "success" ? (
|
|
29
|
+
<Check
|
|
30
|
+
fill="#FFFFFF"
|
|
31
|
+
iconSize={8}
|
|
32
|
+
size={16}
|
|
33
|
+
style={{
|
|
34
|
+
backgroundColor: "var(--color-green-2)",
|
|
35
|
+
}}
|
|
36
|
+
/>
|
|
37
|
+
) : type === "pending" ? (
|
|
38
|
+
<Pencil
|
|
39
|
+
fill="#FFFFFF"
|
|
40
|
+
iconSize={8}
|
|
41
|
+
size={16}
|
|
42
|
+
style={{
|
|
43
|
+
backgroundColor: "var(--color-yellow-4)",
|
|
44
|
+
}}
|
|
45
|
+
/>
|
|
46
|
+
) : type === "error" ? (
|
|
47
|
+
<Slash
|
|
48
|
+
fill="#FFFFFF"
|
|
49
|
+
iconSize={8}
|
|
50
|
+
size={16}
|
|
51
|
+
style={{
|
|
52
|
+
backgroundColor: "var(--color-red-4)",
|
|
53
|
+
}}
|
|
54
|
+
/>
|
|
55
|
+
) : (
|
|
56
|
+
<CircleInformation fill="var(--color-purple-1)" iconSize={16} size={16} />
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
<aside className={`${toastStyles.toast} ${type}`}>
|
|
61
|
+
{icon}
|
|
62
|
+
{children}
|
|
63
|
+
<Close
|
|
64
|
+
as="button"
|
|
65
|
+
onClick={onDismiss}
|
|
66
|
+
fill="var(--color-grey-3)"
|
|
67
|
+
inline
|
|
68
|
+
iconSize={12}
|
|
69
|
+
size={20}
|
|
70
|
+
style={{
|
|
71
|
+
marginLeft: "auto",
|
|
72
|
+
}}
|
|
73
|
+
/>
|
|
74
|
+
</aside>
|
|
75
|
+
);
|
|
76
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Toast, type ToastProps } from "./Toast";
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
.tooltip {
|
|
2
|
+
--tooltipColor: rgba(0 0 0 / 80%);
|
|
3
|
+
|
|
4
|
+
color: #FFF;
|
|
5
|
+
font-size: var(--size-13);
|
|
6
|
+
border-radius: var(--border-radius-small);
|
|
7
|
+
user-select: none;
|
|
8
|
+
pointer-events: none;
|
|
9
|
+
|
|
10
|
+
padding: 8px 16px;
|
|
11
|
+
|
|
12
|
+
background-color: var(--tooltipColor);
|
|
13
|
+
backdrop-filter: blur(4px);
|
|
14
|
+
|
|
15
|
+
position: relative;
|
|
16
|
+
animation: fadeIn 125ms forwards ease-in-out;
|
|
17
|
+
opacity: 0;
|
|
18
|
+
transform: translateY(-100%);
|
|
19
|
+
|
|
20
|
+
@keyframes fadeIn {
|
|
21
|
+
0% {
|
|
22
|
+
opacity: 0;
|
|
23
|
+
transform: translateY(calc(-100% + 5px));
|
|
24
|
+
}
|
|
25
|
+
100% {
|
|
26
|
+
opacity: 1;
|
|
27
|
+
transform: translateY(-100%);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
&::after {
|
|
32
|
+
--size: 15px;
|
|
33
|
+
|
|
34
|
+
content: "";
|
|
35
|
+
display: block;
|
|
36
|
+
width: var(--size);
|
|
37
|
+
height: calc(var(--size) / 1.6666);
|
|
38
|
+
|
|
39
|
+
background-color: var(--tooltipColor);
|
|
40
|
+
clip-path: polygon(0% 100%, 50% 0%, 100% 100%);
|
|
41
|
+
transform: rotate(180deg) translate(50%, -100%);
|
|
42
|
+
|
|
43
|
+
left: 50%;
|
|
44
|
+
bottom: 0;
|
|
45
|
+
position: absolute;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import tooltipStyles from "./Tooltip.module.scss";
|
|
3
|
+
|
|
4
|
+
export interface TooltipProps {
|
|
5
|
+
label: string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const Tooltip = ({ label = "Tooltip" }: TooltipProps) => {
|
|
9
|
+
return <div className={tooltipStyles.tooltip}>{label}</div>;
|
|
10
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Tooltip, type TooltipProps } from "./Tooltip";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { Chip, type ChipProps } from "./Chip";
|
|
2
|
+
export { Loader, type LoaderProps } from "./Loader";
|
|
3
|
+
export { ProgressBar, type ProgressBarProps } from "./ProgressBar";
|
|
4
|
+
export { Toast, type ToastProps } from "./Toast";
|
|
5
|
+
export { Tooltip, type TooltipProps } from "./Tooltip";
|
package/src/global.d.ts
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
@use "@soul-refiner/styles/_mixins";
|
|
2
|
+
|
|
3
|
+
.wrapper {
|
|
4
|
+
@include mixins.flex($gap: 18px, $align: center);
|
|
5
|
+
|
|
6
|
+
& > div {
|
|
7
|
+
&[class~="left"] {
|
|
8
|
+
order: -1;
|
|
9
|
+
}
|
|
10
|
+
> p {
|
|
11
|
+
@include mixins.font-clamp();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.avatar {
|
|
17
|
+
cursor: pointer;
|
|
18
|
+
padding: 0px;
|
|
19
|
+
position: relative;
|
|
20
|
+
background-color: transparent;
|
|
21
|
+
|
|
22
|
+
img,
|
|
23
|
+
svg {
|
|
24
|
+
border-radius: 50%;
|
|
25
|
+
background-color: var(--color-blue-light-6);
|
|
26
|
+
overflow: hidden;
|
|
27
|
+
object-fit: cover;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
div {
|
|
31
|
+
@include mixins.flex($dir: column, $justify: center, $align: center);
|
|
32
|
+
text-align: left;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.presence,
|
|
37
|
+
.status {
|
|
38
|
+
border-radius: 50%;
|
|
39
|
+
position: absolute;
|
|
40
|
+
right: 0px;
|
|
41
|
+
box-sizing: border-box;
|
|
42
|
+
border: 2px solid var(--color-grey-10);
|
|
43
|
+
display: flex;
|
|
44
|
+
justify-content: center;
|
|
45
|
+
align-items: center;
|
|
46
|
+
|
|
47
|
+
img {
|
|
48
|
+
background-color: transparent;
|
|
49
|
+
height: 70%;
|
|
50
|
+
width: 70%;
|
|
51
|
+
object-fit: contain;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.presence {
|
|
56
|
+
bottom: 0px;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.status {
|
|
60
|
+
top: 0px;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.online {
|
|
64
|
+
background-color: var(--color-green-5);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.busy {
|
|
68
|
+
background-color: var(--color-red-5);
|
|
69
|
+
color: white;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.focus {
|
|
73
|
+
background-color: white;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.offline {
|
|
77
|
+
background-color: var(--color-grey-6);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.approved {
|
|
81
|
+
background-color: var(--color-turquoise-5);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.declined {
|
|
85
|
+
background-color: var(--color-red-5);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.locked {
|
|
89
|
+
background-color: var(--color-grey-3);
|
|
90
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import "@testing-library/jest-dom";
|
|
3
|
+
import { render, screen } from "@testing-library/react";
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
import { Avatar } from "./Avatar";
|
|
7
|
+
|
|
8
|
+
const generateMockProps = props => ({
|
|
9
|
+
as: "button",
|
|
10
|
+
size: 64,
|
|
11
|
+
...props,
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
describe("Avatar renders", () => {
|
|
15
|
+
it("with a url", () => {
|
|
16
|
+
const props = generateMockProps({
|
|
17
|
+
url: "https://testing.avatar.io"
|
|
18
|
+
});
|
|
19
|
+
render(<Avatar {...props} />);
|
|
20
|
+
const img = screen.getByRole("img");
|
|
21
|
+
expect(img).toHaveAttribute("src", "https://testing.avatar.io");
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it("with a title", () => {
|
|
25
|
+
const props = generateMockProps({
|
|
26
|
+
title: "Ben Merritt"
|
|
27
|
+
});
|
|
28
|
+
render(<Avatar {...props} />);
|
|
29
|
+
expect(screen.findByText("Ben Merritt"));
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it("with a subtitle", () => {
|
|
33
|
+
const props = generateMockProps({
|
|
34
|
+
subtitle: "1 hour ago"
|
|
35
|
+
});
|
|
36
|
+
render(<Avatar {...props} />);
|
|
37
|
+
expect(screen.findByText("1 hour ago"));
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it("at different sizes", () => {
|
|
41
|
+
const SIZE = 128
|
|
42
|
+
const props = generateMockProps({
|
|
43
|
+
size: SIZE
|
|
44
|
+
});
|
|
45
|
+
render(<Avatar {...props} />);
|
|
46
|
+
const button = screen.getByRole("button");
|
|
47
|
+
expect(button).toHaveStyle(`
|
|
48
|
+
height: ${SIZE}
|
|
49
|
+
`)
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it("with a presence indicator", () => {
|
|
53
|
+
const props = generateMockProps({
|
|
54
|
+
presence: "busy"
|
|
55
|
+
});
|
|
56
|
+
render(<Avatar {...props} />);
|
|
57
|
+
const svgWrapper = screen.getByTestId("presence-wrapper")
|
|
58
|
+
expect(svgWrapper).toHaveStyle(`
|
|
59
|
+
background-color: var(--color-red);
|
|
60
|
+
`)
|
|
61
|
+
expect(svgWrapper.firstChild.firstChild)
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it("with a status indicator", () => {
|
|
65
|
+
const props = generateMockProps({
|
|
66
|
+
status: "declined"
|
|
67
|
+
});
|
|
68
|
+
render(<Avatar {...props} />);
|
|
69
|
+
const svgWrapper = screen.getByTestId("status-wrapper")
|
|
70
|
+
expect(svgWrapper).toHaveStyle(`
|
|
71
|
+
background-color: var(--color-red);
|
|
72
|
+
`)
|
|
73
|
+
expect(svgWrapper.firstChild.firstChild)
|
|
74
|
+
});
|
|
75
|
+
})
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import styles from "./Avatar.module.scss";
|
|
3
|
+
import { DefaultIcon } from "./DefaultIcon";
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
iconDisplacement,
|
|
7
|
+
iconSize,
|
|
8
|
+
presenceIcon,
|
|
9
|
+
statusIcon,
|
|
10
|
+
} from "./iconHelpers";
|
|
11
|
+
|
|
12
|
+
export interface AvatarProps
|
|
13
|
+
extends React.PropsWithChildren,
|
|
14
|
+
Omit<
|
|
15
|
+
React.HTMLProps<HTMLButtonElement | HTMLAnchorElement>,
|
|
16
|
+
"as" | "title"
|
|
17
|
+
> {
|
|
18
|
+
as?: React.ElementType;
|
|
19
|
+
size: 128 | 96 | 64 | 40 | 36 | 32 | 24;
|
|
20
|
+
url: string;
|
|
21
|
+
title?: string | React.ReactNode;
|
|
22
|
+
textPosition?: "left" | "right";
|
|
23
|
+
subtitle?: string | React.ReactNode;
|
|
24
|
+
presence?: "online" | "busy" | "focus" | "offline";
|
|
25
|
+
status?: "approved" | "declined" | "locked";
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const Avatar = ({
|
|
29
|
+
as: Tag = "button",
|
|
30
|
+
size = 64,
|
|
31
|
+
url,
|
|
32
|
+
title,
|
|
33
|
+
subtitle,
|
|
34
|
+
presence,
|
|
35
|
+
status,
|
|
36
|
+
textPosition = "right",
|
|
37
|
+
...rest
|
|
38
|
+
}: AvatarProps) => {
|
|
39
|
+
const [displayDefault, setDisplayDefault] = React.useState(false);
|
|
40
|
+
|
|
41
|
+
const sizeOfIcon = iconSize(size);
|
|
42
|
+
const displacement = iconDisplacement(size);
|
|
43
|
+
const presenceElement = presenceIcon({ presence, size });
|
|
44
|
+
const statusElement = statusIcon({ status, size });
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<div className={styles.wrapper}>
|
|
48
|
+
<Tag className={styles.avatar} {...rest}>
|
|
49
|
+
{!displayDefault && (
|
|
50
|
+
<img
|
|
51
|
+
src={url}
|
|
52
|
+
alt={`avatar, ${title ? title : "unknown"}`}
|
|
53
|
+
className="avatar-img"
|
|
54
|
+
style={{ width: size, height: size }}
|
|
55
|
+
onError={() => setDisplayDefault(true)}
|
|
56
|
+
/>
|
|
57
|
+
)}
|
|
58
|
+
{displayDefault && <DefaultIcon />}
|
|
59
|
+
{presence && (
|
|
60
|
+
<div
|
|
61
|
+
className={`${styles.presence} ${styles[presence]}`}
|
|
62
|
+
data-testid="presence-wrapper"
|
|
63
|
+
style={{
|
|
64
|
+
width: sizeOfIcon,
|
|
65
|
+
height: sizeOfIcon,
|
|
66
|
+
marginRight: displacement,
|
|
67
|
+
marginBottom: displacement,
|
|
68
|
+
}}
|
|
69
|
+
>
|
|
70
|
+
{presenceElement}
|
|
71
|
+
</div>
|
|
72
|
+
)}
|
|
73
|
+
{status && (
|
|
74
|
+
<div
|
|
75
|
+
className={`${styles.status} ${styles[status]}`}
|
|
76
|
+
data-testid="status-wrapper"
|
|
77
|
+
style={{
|
|
78
|
+
width: sizeOfIcon,
|
|
79
|
+
height: sizeOfIcon,
|
|
80
|
+
marginRight: displacement,
|
|
81
|
+
marginTop: displacement,
|
|
82
|
+
}}
|
|
83
|
+
>
|
|
84
|
+
{statusElement}
|
|
85
|
+
</div>
|
|
86
|
+
)}
|
|
87
|
+
</Tag>
|
|
88
|
+
{(title || subtitle) && (
|
|
89
|
+
<div className={textPosition}>
|
|
90
|
+
{title && <p className="avatar">{title}</p>}
|
|
91
|
+
{subtitle && <p className="avatar subtitle">{subtitle}</p>}
|
|
92
|
+
</div>
|
|
93
|
+
)}
|
|
94
|
+
</div>
|
|
95
|
+
);
|
|
96
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
|
|
2
|
+
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.8591 4.0743C17.5175 4.24647 16.0686 4.78143 14.9877 5.50371C14.3081 5.95785 13.3158 6.87994 12.8402 7.49923C12.0233 8.56305 11.3755 10.0081 11.1261 11.3229C10.9683 12.1545 10.9654 13.8965 11.1204 14.7068C11.3504 15.9088 11.8334 17.0691 12.5556 18.1541C13.022 18.855 14.0159 19.865 14.7227 20.3561L15.2791 20.7428L14.7618 20.9246C14.0573 21.172 12.5613 21.9173 11.8564 22.3719C10.4024 23.3097 8.75285 24.8781 7.78593 26.2421C6.49114 28.0687 5.57545 30.2513 5.18268 32.4472C5.0059 33.4356 4.94109 35.1437 5.06876 35.4519C5.21509 35.8052 5.53453 36 5.96735 36C6.6502 36 7.02102 35.6114 7.02211 34.8948C7.02297 34.3329 7.15205 33.2105 7.30361 32.4472C7.56417 31.135 8.17479 29.5552 8.86654 28.404C9.68143 27.0476 10.9812 25.5964 12.1751 24.7101C14.0173 23.3424 15.9779 22.518 18.1903 22.1811C18.4709 22.1383 19.3142 22.0696 20.0643 22.0284C20.8144 21.9871 21.6653 21.898 21.9553 21.8302C22.6461 21.6689 23.4912 21.3626 24.122 21.045C24.9142 20.6461 25.9633 19.8576 26.5587 19.2137C27.7815 17.8915 28.55 16.3484 28.893 14.5268C29.0313 13.7919 29.0138 12.1173 28.8596 11.3412C28.4881 9.47211 27.6286 7.88504 26.2837 6.58463C25.8892 6.20326 25.3557 5.74827 25.098 5.57359C23.9895 4.82211 22.6551 4.30691 21.3009 4.10756C20.4028 3.97536 19.7042 3.96592 18.8591 4.0743ZM21.5368 6.25191C22.2915 6.43283 23.2696 6.87026 23.9452 7.32901C24.5337 7.72872 25.2898 8.48075 25.6771 9.05178C26.2639 9.9168 26.6762 10.9194 26.8509 11.9058C26.8961 12.1606 26.933 12.6752 26.933 13.0492C26.933 14.7572 26.2648 16.4385 25.0666 17.7455C24.2454 18.6412 23.1015 19.337 21.8014 19.7315C21.2004 19.9139 20.9806 19.9398 20.0225 19.941C19.1374 19.9421 18.8104 19.9099 18.3047 19.7715C17.0477 19.4278 15.7765 18.6783 14.9271 17.7802C14.1849 16.9955 13.5502 15.8364 13.2534 14.7237C13.173 14.4222 13.087 13.7889 13.0624 13.3165C13.0268 12.6329 13.0491 12.306 13.172 11.715C13.2568 11.3065 13.4373 10.7057 13.573 10.3796C14.2011 8.8707 15.4471 7.53624 16.8992 6.81709C17.9769 6.28338 18.7302 6.10839 19.9835 6.10051C20.6304 6.09637 21.0647 6.13877 21.5368 6.25191ZM28.8666 23.7849C28.5829 23.9389 28.4166 24.2792 28.4166 24.706C28.4166 24.9937 28.4693 25.1198 28.7202 25.4321C28.8871 25.6399 29.2232 26.0033 29.4669 26.2395C29.9872 26.7436 30.7618 27.7687 31.2123 28.5493C31.9202 29.7757 32.508 31.3976 32.747 32.784C32.8113 33.157 32.894 33.9157 32.9308 34.4699L32.9978 35.4775L33.2828 35.7388C33.5353 35.9702 33.6179 36 34.0063 36C34.4042 36 34.4702 35.9745 34.721 35.7237L34.9974 35.4473L34.9525 34.1815C34.8997 32.6927 34.6829 31.5304 34.1913 30.1021C33.7932 28.9453 32.9482 27.2872 32.2827 26.3566C31.677 25.5098 30.7822 24.4931 30.2208 24.0139C29.8584 23.7045 29.7659 23.6631 29.4448 23.6658C29.2444 23.6675 28.9841 23.7211 28.8666 23.7849Z" fill="#9DA7B2"/>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
export const DefaultIcon = () => (
|
|
4
|
+
<svg width="40" height="40" viewBox="0 0 40 40" fill="none">
|
|
5
|
+
<path
|
|
6
|
+
fillRule="evenodd"
|
|
7
|
+
clipRule="evenodd"
|
|
8
|
+
d="M18.8591 4.0743C17.5175 4.24647 16.0686 4.78143 14.9877 5.50371C14.3081 5.95785 13.3158 6.87994 12.8402 7.49923C12.0233 8.56305 11.3755 10.0081 11.1261 11.3229C10.9683 12.1545 10.9654 13.8965 11.1204 14.7068C11.3504 15.9088 11.8334 17.0691 12.5556 18.1541C13.022 18.855 14.0159 19.865 14.7227 20.3561L15.2791 20.7428L14.7618 20.9246C14.0573 21.172 12.5613 21.9173 11.8564 22.3719C10.4024 23.3097 8.75285 24.8781 7.78593 26.2421C6.49114 28.0687 5.57545 30.2513 5.18268 32.4472C5.0059 33.4356 4.94109 35.1437 5.06876 35.4519C5.21509 35.8052 5.53453 36 5.96735 36C6.6502 36 7.02102 35.6114 7.02211 34.8948C7.02297 34.3329 7.15205 33.2105 7.30361 32.4472C7.56417 31.135 8.17479 29.5552 8.86654 28.404C9.68143 27.0476 10.9812 25.5964 12.1751 24.7101C14.0173 23.3424 15.9779 22.518 18.1903 22.1811C18.4709 22.1383 19.3142 22.0696 20.0643 22.0284C20.8144 21.9871 21.6653 21.898 21.9553 21.8302C22.6461 21.6689 23.4912 21.3626 24.122 21.045C24.9142 20.6461 25.9633 19.8576 26.5587 19.2137C27.7815 17.8915 28.55 16.3484 28.893 14.5268C29.0313 13.7919 29.0138 12.1173 28.8596 11.3412C28.4881 9.47211 27.6286 7.88504 26.2837 6.58463C25.8892 6.20326 25.3557 5.74827 25.098 5.57359C23.9895 4.82211 22.6551 4.30691 21.3009 4.10756C20.4028 3.97536 19.7042 3.96592 18.8591 4.0743ZM21.5368 6.25191C22.2915 6.43283 23.2696 6.87026 23.9452 7.32901C24.5337 7.72872 25.2898 8.48075 25.6771 9.05178C26.2639 9.9168 26.6762 10.9194 26.8509 11.9058C26.8961 12.1606 26.933 12.6752 26.933 13.0492C26.933 14.7572 26.2648 16.4385 25.0666 17.7455C24.2454 18.6412 23.1015 19.337 21.8014 19.7315C21.2004 19.9139 20.9806 19.9398 20.0225 19.941C19.1374 19.9421 18.8104 19.9099 18.3047 19.7715C17.0477 19.4278 15.7765 18.6783 14.9271 17.7802C14.1849 16.9955 13.5502 15.8364 13.2534 14.7237C13.173 14.4222 13.087 13.7889 13.0624 13.3165C13.0268 12.6329 13.0491 12.306 13.172 11.715C13.2568 11.3065 13.4373 10.7057 13.573 10.3796C14.2011 8.8707 15.4471 7.53624 16.8992 6.81709C17.9769 6.28338 18.7302 6.10839 19.9835 6.10051C20.6304 6.09637 21.0647 6.13877 21.5368 6.25191ZM28.8666 23.7849C28.5829 23.9389 28.4166 24.2792 28.4166 24.706C28.4166 24.9937 28.4693 25.1198 28.7202 25.4321C28.8871 25.6399 29.2232 26.0033 29.4669 26.2395C29.9872 26.7436 30.7618 27.7687 31.2123 28.5493C31.9202 29.7757 32.508 31.3976 32.747 32.784C32.8113 33.157 32.894 33.9157 32.9308 34.4699L32.9978 35.4775L33.2828 35.7388C33.5353 35.9702 33.6179 36 34.0063 36C34.4042 36 34.4702 35.9745 34.721 35.7237L34.9974 35.4473L34.9525 34.1815C34.8997 32.6927 34.6829 31.5304 34.1913 30.1021C33.7932 28.9453 32.9482 27.2872 32.2827 26.3566C31.677 25.5098 30.7822 24.4931 30.2208 24.0139C29.8584 23.7045 29.7659 23.6631 29.4448 23.6658C29.2444 23.6675 28.9841 23.7211 28.8666 23.7849Z"
|
|
9
|
+
fill="#9DA7B2"
|
|
10
|
+
/>
|
|
11
|
+
</svg>
|
|
12
|
+
);
|