tapquest-ui-yeulamvietnam 2.0.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.
- package/example/README.md +50 -0
- package/example/eslint.config.js +28 -0
- package/example/index.html +13 -0
- package/example/package.json +35 -0
- package/example/public/vite.svg +1 -0
- package/example/src/App.css +8 -0
- package/example/src/App.tsx +62 -0
- package/example/src/Card/index.tsx +15 -0
- package/example/src/Icons/CircleArrow.tsx +8 -0
- package/example/src/Icons/icon1.tsx +19 -0
- package/example/src/View/CoreComponentView/index.tsx +255 -0
- package/example/src/View/MapView/index.tsx +1325 -0
- package/example/src/View/MapView/map.html +14 -0
- package/example/src/assets/fonts/Kanit/Kanit-Black.ttf +0 -0
- package/example/src/assets/fonts/Kanit/Kanit-BlackItalic.ttf +0 -0
- package/example/src/assets/fonts/Kanit/Kanit-Bold.ttf +0 -0
- package/example/src/assets/fonts/Kanit/Kanit-BoldItalic.ttf +0 -0
- package/example/src/assets/fonts/Kanit/Kanit-ExtraBold.ttf +0 -0
- package/example/src/assets/fonts/Kanit/Kanit-ExtraBoldItalic.ttf +0 -0
- package/example/src/assets/fonts/Kanit/Kanit-ExtraLight.ttf +0 -0
- package/example/src/assets/fonts/Kanit/Kanit-ExtraLightItalic.ttf +0 -0
- package/example/src/assets/fonts/Kanit/Kanit-Italic.ttf +0 -0
- package/example/src/assets/fonts/Kanit/Kanit-Light.ttf +0 -0
- package/example/src/assets/fonts/Kanit/Kanit-LightItalic.ttf +0 -0
- package/example/src/assets/fonts/Kanit/Kanit-Medium.ttf +0 -0
- package/example/src/assets/fonts/Kanit/Kanit-MediumItalic.ttf +0 -0
- package/example/src/assets/fonts/Kanit/Kanit-Regular.ttf +0 -0
- package/example/src/assets/fonts/Kanit/Kanit-SemiBold.ttf +0 -0
- package/example/src/assets/fonts/Kanit/Kanit-SemiBoldItalic.ttf +0 -0
- package/example/src/assets/fonts/Kanit/Kanit-Thin.ttf +0 -0
- package/example/src/assets/fonts/Kanit/Kanit-ThinItalic.ttf +0 -0
- package/example/src/assets/fonts/Kanit/OFL.txt +93 -0
- package/example/src/assets/fonts/Roboto/Roboto-Black.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto-BlackItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto-Bold.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto-BoldItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto-ExtraBold.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto-ExtraBoldItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto-ExtraLight.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto-ExtraLightItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto-Italic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto-Light.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto-LightItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto-Medium.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto-Regular.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto-SemiBold.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto-SemiBoldItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto-Thin.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto-ThinItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_Condensed-Black.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_Condensed-BlackItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_Condensed-Bold.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_Condensed-BoldItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_Condensed-ExtraBold.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_Condensed-ExtraBoldItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_Condensed-ExtraLight.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_Condensed-ExtraLightItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_Condensed-Italic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_Condensed-Light.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_Condensed-LightItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_Condensed-Medium.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_Condensed-MediumItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_Condensed-Regular.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_Condensed-SemiBold.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_Condensed-SemiBoldItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_Condensed-Thin.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_Condensed-ThinItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_SemiCondensed-Black.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_SemiCondensed-BlackItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_SemiCondensed-Bold.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_SemiCondensed-BoldItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_SemiCondensed-ExtraBold.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_SemiCondensed-ExtraBoldItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_SemiCondensed-ExtraLight.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_SemiCondensed-ExtraLightItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_SemiCondensed-Italic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_SemiCondensed-Light.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_SemiCondensed-LightItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_SemiCondensed-Medium.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_SemiCondensed-MediumItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_SemiCondensed-Regular.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_SemiCondensed-SemiBold.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_SemiCondensed-SemiBoldItalic.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_SemiCondensed-Thin.ttf +0 -0
- package/example/src/assets/fonts/Roboto/Roboto_SemiCondensed-ThinItalic.ttf +0 -0
- package/example/src/assets/fonts/iCielBCLodestone/iCielBCLodestone.ttf +0 -0
- package/example/src/assets/react.svg +1 -0
- package/example/src/fonts.css +66 -0
- package/example/src/index.css +70 -0
- package/example/src/main.tsx +10 -0
- package/example/src/vite-env.d.ts +1 -0
- package/example/tsconfig.app.json +26 -0
- package/example/tsconfig.json +7 -0
- package/example/tsconfig.node.json +24 -0
- package/example/vite.config.ts +7 -0
- package/index.css +20 -0
- package/index.ts +42 -0
- package/package.json +44 -0
- package/src/components/AppbarPrimaryButton/index.tsx +56 -0
- package/src/components/Avatar.styled/index.tsx +8 -0
- package/src/components/Button.styled/index.tsx +154 -0
- package/src/components/Card.styled/index.tsx +26 -0
- package/src/components/Compound/Appbar/index.tsx +88 -0
- package/src/components/Compound/Header/index.tsx +40 -0
- package/src/components/Compound/InteractiveMap/MapSvg.tsx +608 -0
- package/src/components/Compound/LocationOverviewCard/index.tsx +186 -0
- package/src/components/Compound/MemoryCard/index.tsx +267 -0
- package/src/components/Compound/ProgressStep/index.tsx +54 -0
- package/src/components/Compound/SponsorByContainer/index.tsx +31 -0
- package/src/components/FormItem.styled/index.tsx +23 -0
- package/src/components/Icons/AppbarBg.tsx +22 -0
- package/src/components/Icons/ArrowCircle.tsx +8 -0
- package/src/components/Icons/ArrowDown.tsx +15 -0
- package/src/components/Icons/Camera.tsx +17 -0
- package/src/components/Icons/Check.tsx +7 -0
- package/src/components/Icons/ChevronLeft.tsx +7 -0
- package/src/components/Icons/ChevronRight.tsx +16 -0
- package/src/components/Icons/CircleAlert.tsx +9 -0
- package/src/components/Icons/CircleArrow.tsx +8 -0
- package/src/components/Icons/CircleCheck.tsx +7 -0
- package/src/components/Icons/CornerUpRight.tsx +7 -0
- package/src/components/Icons/Dart.tsx +7 -0
- package/src/components/Icons/Discover.tsx +16 -0
- package/src/components/Icons/Edit.tsx +16 -0
- package/src/components/Icons/Email.tsx +16 -0
- package/src/components/Icons/Exclaimation.tsx +7 -0
- package/src/components/Icons/Facebook.tsx +7 -0
- package/src/components/Icons/Gear.tsx +15 -0
- package/src/components/Icons/Gift.tsx +18 -0
- package/src/components/Icons/Globe.tsx +14 -0
- package/src/components/Icons/Home.tsx +7 -0
- package/src/components/Icons/Icon1.tsx +19 -0
- package/src/components/Icons/Icon1sm.tsx +19 -0
- package/src/components/Icons/Instagram.tsx +9 -0
- package/src/components/Icons/Link.tsx +16 -0
- package/src/components/Icons/LocationPin.tsx +10 -0
- package/src/components/Icons/Logout.tsx +15 -0
- package/src/components/Icons/MapMarker.tsx +8 -0
- package/src/components/Icons/Marker/MarkerRed.tsx +17 -0
- package/src/components/Icons/Menu.tsx +11 -0
- package/src/components/Icons/Mission.tsx +17 -0
- package/src/components/Icons/Moment.tsx +18 -0
- package/src/components/Icons/Phone.tsx +15 -0
- package/src/components/Icons/Pin.tsx +8 -0
- package/src/components/Icons/PinCircle.tsx +17 -0
- package/src/components/Icons/PinOutlined.tsx +7 -0
- package/src/components/Icons/Profile.tsx +15 -0
- package/src/components/Icons/ProfileGift.tsx +23 -0
- package/src/components/Icons/ProgressBar.tsx +20 -0
- package/src/components/Icons/ProgressBarInner.tsx +44 -0
- package/src/components/Icons/SealCheckIcon.tsx +18 -0
- package/src/components/Icons/Search.tsx +7 -0
- package/src/components/Icons/SendMessage.tsx +7 -0
- package/src/components/Icons/Share.tsx +14 -0
- package/src/components/Icons/ShareMemoryBadge.tsx +11 -0
- package/src/components/Icons/ShieldWarningIcon.tsx +18 -0
- package/src/components/Icons/Spinner.tsx +18 -0
- package/src/components/Icons/Step.tsx +7 -0
- package/src/components/Icons/StepChecked.tsx +8 -0
- package/src/components/Icons/StepLine.tsx +7 -0
- package/src/components/Icons/Telegram.tsx +7 -0
- package/src/components/Icons/Trash.tsx +7 -0
- package/src/components/Icons/User.tsx +15 -0
- package/src/components/Icons/XIcon.tsx +8 -0
- package/src/components/Icons/Zalo.tsx +23 -0
- package/src/components/Icons/index.tsx +66 -0
- package/src/components/Image.styled/index.tsx +35 -0
- package/src/components/Input.styled/index.tsx +34 -0
- package/src/components/InputPassword/index.tsx +34 -0
- package/src/components/InputSearch.styled/index.tsx +18 -0
- package/src/components/Loader.styled/index.tsx +26 -0
- package/src/components/Modal.styled/index.tsx +63 -0
- package/src/components/ProcessBar.styled/index.tsx +26 -0
- package/src/components/ProgressCircular.styled/index.tsx +61 -0
- package/src/components/SVGs/NoResult.tsx +62 -0
- package/src/components/SVGs/index.tsx +3 -0
- package/src/components/Select.styled/index.tsx +32 -0
- package/src/components/Tabs.styled/index.tsx +22 -0
- package/src/components/TextArea.styled/index.tsx +34 -0
- package/src/components/Typography.styled/index.tsx +419 -0
- package/src/helpers/index.ts +175 -0
- package/src/hooks/useHTMLToCanvas.tsx +115 -0
- package/src/hooks/useInteractiveMap.tsx +659 -0
- package/src/types/type.d.ts +9 -0
- package/tsconfig.json +33 -0
- package/tsconfig.node.json +12 -0
- package/tsup.config.ts +24 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
import styled from "styled-components";
|
|
3
|
+
import Typography from "../../Typography.styled";
|
|
4
|
+
|
|
5
|
+
// Styled components
|
|
6
|
+
const CardWrapper = styled.div`
|
|
7
|
+
width: 100%;
|
|
8
|
+
|
|
9
|
+
@media (min-width: 640px) {
|
|
10
|
+
padding: 0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
padding: 16px;
|
|
14
|
+
`;
|
|
15
|
+
|
|
16
|
+
const CardContainer = styled.div<{ $backgroundColor?: string; $padding?: string }>`
|
|
17
|
+
width: 100%;
|
|
18
|
+
background-color: ${({ $backgroundColor }) => $backgroundColor || "white"};
|
|
19
|
+
display: flex;
|
|
20
|
+
flex-direction: column;
|
|
21
|
+
gap: 24px;
|
|
22
|
+
|
|
23
|
+
@media (min-width: 640px) {
|
|
24
|
+
padding: ${({ $padding }) => $padding || "16px"};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
padding: 16px;
|
|
28
|
+
`;
|
|
29
|
+
|
|
30
|
+
const TitleContainer = styled.div<{ $borderColor?: string; $padding?: string }>`
|
|
31
|
+
height: 100%;
|
|
32
|
+
width: 100%;
|
|
33
|
+
border-left: 2px solid ${({ $borderColor }) => $borderColor || "var(--checkin-text-primary, #000)"};
|
|
34
|
+
border-style: solid;
|
|
35
|
+
padding: ${({ $padding }) => $padding || "16px"};
|
|
36
|
+
`;
|
|
37
|
+
|
|
38
|
+
const DescriptionContainer = styled.div<{ $lineClamp?: number }>`
|
|
39
|
+
${({ $lineClamp }) => $lineClamp && `
|
|
40
|
+
display: -webkit-box;
|
|
41
|
+
-webkit-line-clamp: ${$lineClamp};
|
|
42
|
+
-webkit-box-orient: vertical;
|
|
43
|
+
overflow: hidden;
|
|
44
|
+
`}
|
|
45
|
+
`;
|
|
46
|
+
|
|
47
|
+
const ActionContainer = styled.div`
|
|
48
|
+
display: flex;
|
|
49
|
+
width: 100%;
|
|
50
|
+
`;
|
|
51
|
+
|
|
52
|
+
// Types
|
|
53
|
+
export interface LocationOverviewCardProps {
|
|
54
|
+
backgroundColor?: string;
|
|
55
|
+
padding?: string;
|
|
56
|
+
children?: ReactNode;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface LocationOverviewTitleProps {
|
|
60
|
+
text: string;
|
|
61
|
+
color?: string;
|
|
62
|
+
borderColor?: string;
|
|
63
|
+
padding?: string;
|
|
64
|
+
type?: string;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export interface LocationOverviewDescriptionProps {
|
|
68
|
+
text: string;
|
|
69
|
+
color?: string;
|
|
70
|
+
lineClamp?: number;
|
|
71
|
+
type?: string;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export interface LocationOverviewActionProps {
|
|
75
|
+
children: ReactNode;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Add new interface for simplified data props
|
|
79
|
+
export interface LocationOverviewCardDataProps {
|
|
80
|
+
title: {
|
|
81
|
+
text: string;
|
|
82
|
+
color?: string;
|
|
83
|
+
borderColor?: string;
|
|
84
|
+
padding?: string;
|
|
85
|
+
};
|
|
86
|
+
description: {
|
|
87
|
+
text: string;
|
|
88
|
+
color?: string;
|
|
89
|
+
lineClamp?: number;
|
|
90
|
+
};
|
|
91
|
+
action?: ReactNode;
|
|
92
|
+
backgroundColor?: string;
|
|
93
|
+
padding?: string;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Compound Components
|
|
97
|
+
const LocationOverviewCardRoot = ({
|
|
98
|
+
backgroundColor,
|
|
99
|
+
padding,
|
|
100
|
+
children
|
|
101
|
+
}: LocationOverviewCardProps) => {
|
|
102
|
+
return (
|
|
103
|
+
<CardWrapper>
|
|
104
|
+
<CardContainer $backgroundColor={backgroundColor} $padding={padding}>
|
|
105
|
+
{children}
|
|
106
|
+
</CardContainer>
|
|
107
|
+
</CardWrapper>
|
|
108
|
+
);
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
const LocationOverviewTitle = ({
|
|
112
|
+
text,
|
|
113
|
+
color = "#000",
|
|
114
|
+
borderColor,
|
|
115
|
+
padding,
|
|
116
|
+
}: LocationOverviewTitleProps) => {
|
|
117
|
+
return (
|
|
118
|
+
<TitleContainer $borderColor={borderColor} $padding={padding}>
|
|
119
|
+
<div className="notranslate">
|
|
120
|
+
<Typography $type={"h2"} $color={color}>
|
|
121
|
+
{text}
|
|
122
|
+
</Typography>
|
|
123
|
+
</div>
|
|
124
|
+
</TitleContainer>
|
|
125
|
+
);
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const LocationOverviewDescription = ({
|
|
129
|
+
text,
|
|
130
|
+
color = "#000",
|
|
131
|
+
lineClamp = 3,
|
|
132
|
+
}: LocationOverviewDescriptionProps) => {
|
|
133
|
+
return (
|
|
134
|
+
<DescriptionContainer $lineClamp={lineClamp}>
|
|
135
|
+
<Typography $type={"body-text"} $color={color}>
|
|
136
|
+
{text}
|
|
137
|
+
</Typography>
|
|
138
|
+
</DescriptionContainer>
|
|
139
|
+
);
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
const LocationOverviewAction = ({ children }: LocationOverviewActionProps) => {
|
|
143
|
+
return (
|
|
144
|
+
<ActionContainer>
|
|
145
|
+
{children}
|
|
146
|
+
</ActionContainer>
|
|
147
|
+
);
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
// Add new simplified component
|
|
151
|
+
const LocationOverviewCardDefault = ({
|
|
152
|
+
title,
|
|
153
|
+
description,
|
|
154
|
+
action,
|
|
155
|
+
backgroundColor,
|
|
156
|
+
padding
|
|
157
|
+
}: LocationOverviewCardDataProps) => {
|
|
158
|
+
return (
|
|
159
|
+
<CardWrapper>
|
|
160
|
+
<CardContainer $backgroundColor={backgroundColor} $padding={padding}>
|
|
161
|
+
<LocationOverviewTitle
|
|
162
|
+
text={title.text}
|
|
163
|
+
color={title.color}
|
|
164
|
+
borderColor={title.borderColor}
|
|
165
|
+
padding={title.padding}
|
|
166
|
+
/>
|
|
167
|
+
<LocationOverviewDescription
|
|
168
|
+
text={description.text}
|
|
169
|
+
color={description.color}
|
|
170
|
+
lineClamp={description.lineClamp}
|
|
171
|
+
/>
|
|
172
|
+
{action && <LocationOverviewAction>{action}</LocationOverviewAction>}
|
|
173
|
+
</CardContainer>
|
|
174
|
+
</CardWrapper>
|
|
175
|
+
);
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
// Main Component
|
|
179
|
+
const LocationOverviewCard = Object.assign(LocationOverviewCardRoot, {
|
|
180
|
+
Title: LocationOverviewTitle,
|
|
181
|
+
Description: LocationOverviewDescription,
|
|
182
|
+
Action: LocationOverviewAction,
|
|
183
|
+
Default: LocationOverviewCardDefault
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
export default LocationOverviewCard;
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
import styled from "styled-components";
|
|
3
|
+
import Image from "../../Image.styled";
|
|
4
|
+
import Typography from "../../Typography.styled";
|
|
5
|
+
|
|
6
|
+
import { SealCheckIcon, ShieldWarningIcon } from "../../Icons";
|
|
7
|
+
|
|
8
|
+
// Styled components
|
|
9
|
+
const CardWrapper = styled.div<{ $maxWidth?: string }>`
|
|
10
|
+
width: 100%;
|
|
11
|
+
height: 100%;
|
|
12
|
+
`;
|
|
13
|
+
|
|
14
|
+
const CardContainer = styled.div<{ $borderColor?: string; $backgroundColor?: string }>`
|
|
15
|
+
position: relative;
|
|
16
|
+
width: 100%;
|
|
17
|
+
height: 100%;
|
|
18
|
+
border: 1px solid ${({ $borderColor }) => $borderColor || "var(--checkin-primary, #000)"};
|
|
19
|
+
background-color: ${({ $backgroundColor }) => $backgroundColor || "var(--checkin-bg, #fff)"};
|
|
20
|
+
`;
|
|
21
|
+
|
|
22
|
+
const CardContent = styled.div`
|
|
23
|
+
display: flex;
|
|
24
|
+
flex-direction: column;
|
|
25
|
+
height: 100%;
|
|
26
|
+
gap: 8px;
|
|
27
|
+
padding: 16px;
|
|
28
|
+
background-color: #FFF7E2;
|
|
29
|
+
`;
|
|
30
|
+
|
|
31
|
+
const ImageContainer = styled.div`
|
|
32
|
+
position: relative;
|
|
33
|
+
display: flex;
|
|
34
|
+
width: 100%;
|
|
35
|
+
height: 358px;
|
|
36
|
+
overflow: hidden;
|
|
37
|
+
`;
|
|
38
|
+
|
|
39
|
+
const StatusOverlay = styled.div`
|
|
40
|
+
position: absolute;
|
|
41
|
+
left: 0;
|
|
42
|
+
top: 0;
|
|
43
|
+
height: 100%;
|
|
44
|
+
width: 100%;
|
|
45
|
+
display: flex;
|
|
46
|
+
align-items: center;
|
|
47
|
+
justify-content: center;
|
|
48
|
+
`;
|
|
49
|
+
|
|
50
|
+
const BlurOverlay = styled.div`
|
|
51
|
+
position: absolute;
|
|
52
|
+
left: 0;
|
|
53
|
+
top: 0;
|
|
54
|
+
height: 100%;
|
|
55
|
+
width: 100%;
|
|
56
|
+
background-color: rgba(0, 0, 0, 0.3);
|
|
57
|
+
backdrop-filter: blur(6px);
|
|
58
|
+
`;
|
|
59
|
+
|
|
60
|
+
const StatusContainer = styled.div`
|
|
61
|
+
position: relative;
|
|
62
|
+
width: 100%;
|
|
63
|
+
`;
|
|
64
|
+
|
|
65
|
+
const StatusBadge = styled.div<{ $isApproved: boolean }>`
|
|
66
|
+
display: flex;
|
|
67
|
+
align-items: center;
|
|
68
|
+
justify-content: space-between;
|
|
69
|
+
gap: 4px;
|
|
70
|
+
align-self: flex-start;
|
|
71
|
+
border-radius: 2px;
|
|
72
|
+
padding: 2px 4px;
|
|
73
|
+
background-color: #00000099;
|
|
74
|
+
`;
|
|
75
|
+
|
|
76
|
+
const TimeContainer = styled.div`
|
|
77
|
+
display: flex;
|
|
78
|
+
align-items: center;
|
|
79
|
+
`;
|
|
80
|
+
|
|
81
|
+
const CardDescription = styled.div`
|
|
82
|
+
width: 100%;
|
|
83
|
+
display: flex;
|
|
84
|
+
flex-direction: column;
|
|
85
|
+
gap: 8px;
|
|
86
|
+
`;
|
|
87
|
+
|
|
88
|
+
const CardHeader = styled.div`
|
|
89
|
+
display: flex;
|
|
90
|
+
align-items: center;
|
|
91
|
+
justify-content: space-between;
|
|
92
|
+
`;
|
|
93
|
+
|
|
94
|
+
const CardFooter = styled.div`
|
|
95
|
+
display: flex;
|
|
96
|
+
align-items: center;
|
|
97
|
+
justify-content: flex-end;
|
|
98
|
+
`;
|
|
99
|
+
|
|
100
|
+
const CaptionContainer = styled.div<{ lineClamp?: number }>`
|
|
101
|
+
${({ lineClamp }) => lineClamp && `
|
|
102
|
+
display: -webkit-box;
|
|
103
|
+
-webkit-line-clamp: ${lineClamp};
|
|
104
|
+
-webkit-box-orient: vertical;
|
|
105
|
+
overflow: hidden;
|
|
106
|
+
`}
|
|
107
|
+
`;
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
// Types
|
|
111
|
+
export interface MemoryCardProps {
|
|
112
|
+
borderColor?: string;
|
|
113
|
+
backgroundColor?: string;
|
|
114
|
+
children?: ReactNode;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export interface MemoryCardImageProps {
|
|
118
|
+
src: string;
|
|
119
|
+
alt?: string;
|
|
120
|
+
width?: string | number;
|
|
121
|
+
height?: string | number;
|
|
122
|
+
objectFit?: "cover" | "contain" | "fill";
|
|
123
|
+
blur?: boolean;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export interface MemoryCardStatusProps {
|
|
127
|
+
isApproved: boolean;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export interface MemoryCardTimeProps {
|
|
131
|
+
time: string;
|
|
132
|
+
color?: string;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export interface MemoryCardCaptionProps {
|
|
136
|
+
text: string;
|
|
137
|
+
color?: string;
|
|
138
|
+
fontSize?: number;
|
|
139
|
+
lineClamp?: number;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export interface MemoryCardActionsProps {
|
|
143
|
+
children: ReactNode;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Update data props interface
|
|
147
|
+
export interface MemoryCardDataProps {
|
|
148
|
+
image: {
|
|
149
|
+
src: string;
|
|
150
|
+
alt?: string;
|
|
151
|
+
};
|
|
152
|
+
isApproved: boolean;
|
|
153
|
+
time?: string;
|
|
154
|
+
caption?: string;
|
|
155
|
+
action?: ReactNode;
|
|
156
|
+
borderColor?: string;
|
|
157
|
+
backgroundColor?: string;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Compound Components
|
|
161
|
+
const MemoryCardRoot = ({ borderColor, backgroundColor, children }: MemoryCardProps) => {
|
|
162
|
+
return (
|
|
163
|
+
<CardWrapper>
|
|
164
|
+
<CardContainer $borderColor={borderColor} $backgroundColor={backgroundColor}>
|
|
165
|
+
<CardContent>{children}</CardContent>
|
|
166
|
+
</CardContainer>
|
|
167
|
+
</CardWrapper>
|
|
168
|
+
);
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
const MemoryCardImage = ({ src, alt = "", width = "100%", objectFit = "cover", blur = false }: MemoryCardImageProps) => {
|
|
172
|
+
return (
|
|
173
|
+
<ImageContainer>
|
|
174
|
+
<Image src={src} alt={alt} width={width} objectFit={objectFit} />
|
|
175
|
+
{blur && (
|
|
176
|
+
<StatusOverlay>
|
|
177
|
+
<BlurOverlay />
|
|
178
|
+
</StatusOverlay>
|
|
179
|
+
)}
|
|
180
|
+
</ImageContainer>
|
|
181
|
+
);
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
const MemoryCardStatus = ({ isApproved }: MemoryCardStatusProps) => {
|
|
185
|
+
return (
|
|
186
|
+
<StatusBadge $isApproved={isApproved}>
|
|
187
|
+
<Typography $type="body-text" $color="#D9D9D9" $fontWeight="500" $fontSize={12}>
|
|
188
|
+
{isApproved ? 'Đã duyệt' : 'Đang kiểm duyệt'}
|
|
189
|
+
</Typography>
|
|
190
|
+
{isApproved ? <SealCheckIcon /> : <ShieldWarningIcon />}
|
|
191
|
+
</StatusBadge>
|
|
192
|
+
);
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
const MemoryCardTime = ({ time, color = "#0A0101" }: MemoryCardTimeProps) => {
|
|
196
|
+
return (
|
|
197
|
+
<TimeContainer>
|
|
198
|
+
<Typography $type="body-text-2-semibold" $color={color} $fontWeight="500">
|
|
199
|
+
{time}
|
|
200
|
+
</Typography>
|
|
201
|
+
</TimeContainer>
|
|
202
|
+
);
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
const MemoryCardCaption = ({ text, color = "#0A0101", fontSize = 14, lineClamp = 2 }: MemoryCardCaptionProps) => {
|
|
206
|
+
return (
|
|
207
|
+
<CaptionContainer lineClamp={lineClamp}>
|
|
208
|
+
<Typography $type="body-text" $color={color} $fontSize={fontSize}>
|
|
209
|
+
{text}
|
|
210
|
+
</Typography>
|
|
211
|
+
</CaptionContainer>
|
|
212
|
+
);
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
const MemoryCardActions = ({ children }: MemoryCardActionsProps) => {
|
|
216
|
+
return <CardFooter>{children}</CardFooter>;
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
// Update MemoryCardDefault component
|
|
220
|
+
const MemoryCardDefault = ({
|
|
221
|
+
image,
|
|
222
|
+
isApproved,
|
|
223
|
+
time,
|
|
224
|
+
caption,
|
|
225
|
+
action,
|
|
226
|
+
borderColor,
|
|
227
|
+
backgroundColor,
|
|
228
|
+
}: MemoryCardDataProps) => {
|
|
229
|
+
return (
|
|
230
|
+
<MemoryCardRoot borderColor={borderColor} backgroundColor={backgroundColor}>
|
|
231
|
+
<StatusContainer>
|
|
232
|
+
<MemoryCardImage
|
|
233
|
+
src={image.src}
|
|
234
|
+
alt={image.alt || ""}
|
|
235
|
+
blur={!isApproved}
|
|
236
|
+
/>
|
|
237
|
+
<StatusOverlay>
|
|
238
|
+
{!isApproved && <BlurOverlay />}
|
|
239
|
+
</StatusOverlay>
|
|
240
|
+
</StatusContainer>
|
|
241
|
+
<CardDescription>
|
|
242
|
+
<CardHeader>
|
|
243
|
+
<MemoryCardStatus isApproved={isApproved} />
|
|
244
|
+
{time && <MemoryCardTime time={time} />}
|
|
245
|
+
</CardHeader>
|
|
246
|
+
{isApproved && (
|
|
247
|
+
<MemoryCardCaption text={caption || ''} />
|
|
248
|
+
)}
|
|
249
|
+
</CardDescription>
|
|
250
|
+
{isApproved && action && <CardFooter>{action}</CardFooter>}
|
|
251
|
+
</MemoryCardRoot>
|
|
252
|
+
);
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
// Main Component
|
|
256
|
+
const MemoryCard = Object.assign(MemoryCardRoot, {
|
|
257
|
+
Image: MemoryCardImage,
|
|
258
|
+
Status: MemoryCardStatus,
|
|
259
|
+
Time: MemoryCardTime,
|
|
260
|
+
Caption: MemoryCardCaption,
|
|
261
|
+
Actions: MemoryCardActions,
|
|
262
|
+
Header: CardHeader,
|
|
263
|
+
Description: CardDescription,
|
|
264
|
+
Default: MemoryCardDefault,
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
export default MemoryCard;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Step from '../../Icons/Step';
|
|
3
|
+
import StepChecked from '../../Icons/StepChecked';
|
|
4
|
+
import StepLine from '../../Icons/StepLine';
|
|
5
|
+
import styled from 'styled-components';
|
|
6
|
+
|
|
7
|
+
interface ProgressStepProps {
|
|
8
|
+
current: number;
|
|
9
|
+
total: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const StepContainer = styled.div`
|
|
13
|
+
display: flex;
|
|
14
|
+
align-items: center;
|
|
15
|
+
justify-content: center;
|
|
16
|
+
`;
|
|
17
|
+
|
|
18
|
+
const GreenLine = styled.div`
|
|
19
|
+
svg rect {
|
|
20
|
+
fill: #58CC02;
|
|
21
|
+
}
|
|
22
|
+
`;
|
|
23
|
+
|
|
24
|
+
export default function ProgressStep({ current, total }: ProgressStepProps) {
|
|
25
|
+
// Ensure current is within valid range
|
|
26
|
+
const validCurrent = Math.max(1, Math.min(current, total));
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<StepContainer>
|
|
30
|
+
{Array.from({ length: total }).map((_, index) => {
|
|
31
|
+
const stepNumber = index + 1;
|
|
32
|
+
const isCompleted = stepNumber <= validCurrent;
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<React.Fragment key={stepNumber}>
|
|
36
|
+
{/* Render the step (either completed or not) */}
|
|
37
|
+
{isCompleted ? <StepChecked /> : <Step />}
|
|
38
|
+
|
|
39
|
+
{/* Render the connecting line if not the last step */}
|
|
40
|
+
{stepNumber < total && (
|
|
41
|
+
isCompleted && stepNumber + 1 <= validCurrent ? (
|
|
42
|
+
<GreenLine>
|
|
43
|
+
<StepLine />
|
|
44
|
+
</GreenLine>
|
|
45
|
+
) : (
|
|
46
|
+
<StepLine />
|
|
47
|
+
)
|
|
48
|
+
)}
|
|
49
|
+
</React.Fragment>
|
|
50
|
+
);
|
|
51
|
+
})}
|
|
52
|
+
</StepContainer>
|
|
53
|
+
);
|
|
54
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import styled from "styled-components";
|
|
2
|
+
import Typography from "../../Typography.styled";
|
|
3
|
+
import Image from "../../Image.styled";
|
|
4
|
+
|
|
5
|
+
// Styled components
|
|
6
|
+
const Container = styled.div`
|
|
7
|
+
display: flex;
|
|
8
|
+
width: 100%;
|
|
9
|
+
flex-direction: column;
|
|
10
|
+
align-items: center;
|
|
11
|
+
gap: 8px;
|
|
12
|
+
`;
|
|
13
|
+
|
|
14
|
+
interface SponsorByContainerProps {
|
|
15
|
+
logo: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export default function SponsorByContainer({ logo }: SponsorByContainerProps) {
|
|
19
|
+
return (
|
|
20
|
+
<Container>
|
|
21
|
+
<Typography
|
|
22
|
+
$type="subheading-3-semibold"
|
|
23
|
+
$color="var(--checkin-text-primary, #000)"
|
|
24
|
+
$textTransform="uppercase"
|
|
25
|
+
>
|
|
26
|
+
Trạm vật lý được tài trợ bởi
|
|
27
|
+
</Typography>
|
|
28
|
+
<Image src={logo} alt="Sponsor by" height={"53px"} />
|
|
29
|
+
</Container>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Form as FormAntd } from "antd";
|
|
2
|
+
import styled from "styled-components";
|
|
3
|
+
|
|
4
|
+
const FormItem = styled(FormAntd.Item)`
|
|
5
|
+
|
|
6
|
+
& .ant-form-item-label {
|
|
7
|
+
padding-bottom: 4px;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
& .ant-form-item-label > label {
|
|
11
|
+
font-size: 14px;
|
|
12
|
+
font-weight: 500;
|
|
13
|
+
line-height: 20px;
|
|
14
|
+
color: #000;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
& .ant-form-item-explain-error {
|
|
18
|
+
text-align: left;
|
|
19
|
+
color: #A71A1A !important;
|
|
20
|
+
}
|
|
21
|
+
`
|
|
22
|
+
|
|
23
|
+
export default FormItem;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const AppbarBg = () => {
|
|
2
|
+
return (
|
|
3
|
+
<svg width="626" height="88" viewBox="0 0 626 88" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
4
|
+
<g filter="url(#filter0_d_185_24152)">
|
|
5
|
+
<path fillRule="evenodd" clipRule="evenodd" d="M153 13H13V75H153V13ZM613 13H473V75H613V13Z" fill="white" />
|
|
6
|
+
<path fillRule="evenodd" clipRule="evenodd" d="M276.148 28.5798C272.703 20.4423 265.837 13 257 13H149C140.163 13 133 20.1634 133 29V59C133 67.8366 140.163 75 149 75H477C485.837 75 493 67.8366 493 59V29C493 20.1634 485.837 13 477 13H369C360.163 13 353.297 20.4423 349.852 28.5798C343.778 42.9311 329.565 53 313 53C296.435 53 282.222 42.9311 276.148 28.5798Z" fill="white" />
|
|
7
|
+
</g>
|
|
8
|
+
<defs>
|
|
9
|
+
<filter id="filter0_d_185_24152" x="0.2" y="0.2" width="625.6" height="87.6" filterUnits="userSpaceOnUse" colorInterpolationFilters="sRGB">
|
|
10
|
+
<feFlood floodOpacity="0" result="BackgroundImageFix" />
|
|
11
|
+
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
|
|
12
|
+
<feOffset />
|
|
13
|
+
<feGaussianBlur stdDeviation="6.4" />
|
|
14
|
+
<feComposite in2="hardAlpha" operator="out" />
|
|
15
|
+
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0" />
|
|
16
|
+
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_185_24152" />
|
|
17
|
+
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_185_24152" result="shape" />
|
|
18
|
+
</filter>
|
|
19
|
+
</defs>
|
|
20
|
+
</svg>
|
|
21
|
+
)
|
|
22
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export default function ArrowCircle() {
|
|
2
|
+
return (
|
|
3
|
+
<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
4
|
+
<rect width="28" height="28" rx="14" fill="#A71A1A" />
|
|
5
|
+
<path d="M6 14H19.5M19.5 14L14.5 9M19.5 14L14.5 19" stroke="white" strokeWidth="1.5" />
|
|
6
|
+
</svg>
|
|
7
|
+
)
|
|
8
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export default function ArrowDown() {
|
|
2
|
+
return (
|
|
3
|
+
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
4
|
+
<g clipPath="url(#clip0_6301_24410)">
|
|
5
|
+
<path d="M12.5 19L12.5 5" stroke="white" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" />
|
|
6
|
+
<path d="M5.5 12L12.5 19L19.5 12" stroke="white" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" />
|
|
7
|
+
</g>
|
|
8
|
+
<defs>
|
|
9
|
+
<clipPath id="clip0_6301_24410">
|
|
10
|
+
<rect width="24" height="24" fill="white" transform="translate(0.5)" />
|
|
11
|
+
</clipPath>
|
|
12
|
+
</defs>
|
|
13
|
+
</svg>
|
|
14
|
+
)
|
|
15
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export default function Camera() {
|
|
2
|
+
return (
|
|
3
|
+
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
4
|
+
<g clipPath="url(#clip0_2962_242)">
|
|
5
|
+
<path opacity="0.16" fillRule="evenodd" clipRule="evenodd" d="M21.5 6H3.5V16C3.5 17.1046 4.39543 18 5.5 18H19.5C20.6046 18 21.5 17.1046 21.5 16V6ZM12.5 15C14.1569 15 15.5 13.6569 15.5 12C15.5 10.3431 14.1569 9 12.5 9C10.8431 9 9.5 10.3431 9.5 12C9.5 13.6569 10.8431 15 12.5 15Z" fill="currentColor" />
|
|
6
|
+
<path d="M3.5 5H21.5V17C21.5 18.1046 20.6046 19 19.5 19H5.5C4.39543 19 3.5 18.1046 3.5 17V5Z" stroke="currentColor" strokeWidth="2" strokeLinejoin="round" />
|
|
7
|
+
<circle cx="12.5" cy="12" r="3" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
|
|
8
|
+
<path d="M17.5 2L19.5 2" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
|
|
9
|
+
</g>
|
|
10
|
+
<defs>
|
|
11
|
+
<clipPath id="clip0_2962_242">
|
|
12
|
+
<rect width="24" height="24" fill="currentColor" transform="translate(0.5)" />
|
|
13
|
+
</clipPath>
|
|
14
|
+
</defs>
|
|
15
|
+
</svg>
|
|
16
|
+
)
|
|
17
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export default function Check() {
|
|
2
|
+
return (
|
|
3
|
+
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
4
|
+
<path d="M20 7.63037L10 17.6304L5 12.6304" stroke="#58A700" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
|
|
5
|
+
</svg>
|
|
6
|
+
)
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export default function ChevronLeft() {
|
|
2
|
+
return (
|
|
3
|
+
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
4
|
+
<path d="M16.0302 19.4693C16.0999 19.539 16.1552 19.6217 16.1929 19.7128C16.2306 19.8038 16.25 19.9014 16.25 19.9999C16.25 20.0985 16.2306 20.1961 16.1929 20.2871C16.1552 20.3781 16.0999 20.4609 16.0302 20.5306C15.9606 20.6002 15.8778 20.6555 15.7868 20.6932C15.6957 20.7309 15.5982 20.7503 15.4996 20.7503C15.4011 20.7503 15.3035 20.7309 15.2124 20.6932C15.1214 20.6555 15.0387 20.6002 14.969 20.5306L7.46899 13.0306C7.39926 12.9609 7.34394 12.8782 7.30619 12.7871C7.26845 12.6961 7.24902 12.5985 7.24902 12.4999C7.24902 12.4014 7.26845 12.3038 7.30619 12.2127C7.34394 12.1217 7.39926 12.039 7.46899 11.9693L14.969 4.4693C15.1097 4.32857 15.3006 4.24951 15.4996 4.24951C15.6986 4.24951 15.8895 4.32857 16.0302 4.4693C16.171 4.61003 16.25 4.80091 16.25 4.99993C16.25 5.19895 16.171 5.38982 16.0302 5.53055L9.05993 12.4999L16.0302 19.4693Z" fill="#A71A1A" />
|
|
5
|
+
</svg>
|
|
6
|
+
)
|
|
7
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export default function ChevronRight() {
|
|
2
|
+
return (
|
|
3
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
4
|
+
<g clipPath="url(#clip0_3885_22877)">
|
|
5
|
+
<path d="M10 17L15 12" stroke="#292929" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
|
|
6
|
+
<path d="M15 12L10 7" stroke="#292929" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
|
|
7
|
+
</g>
|
|
8
|
+
<defs>
|
|
9
|
+
<clipPath id="clip0_3885_22877">
|
|
10
|
+
<rect width="24" height="24" fill="white" />
|
|
11
|
+
</clipPath>
|
|
12
|
+
</defs>
|
|
13
|
+
</svg>
|
|
14
|
+
|
|
15
|
+
)
|
|
16
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export default function CircleAlert() {
|
|
2
|
+
return (
|
|
3
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
4
|
+
<path d="M21 12C21 7.03125 16.9688 3 12 3C7.03125 3 3 7.03125 3 12C3 16.9688 7.03125 21 12 21C16.9688 21 21 16.9688 21 12Z" stroke="white" strokeWidth="2" strokeMiterlimit="10" />
|
|
5
|
+
<path d="M11.7307 7.78322L11.9998 13.4996L12.2684 7.78322C12.2701 7.74667 12.2643 7.71017 12.2513 7.67595C12.2384 7.64173 12.2186 7.6105 12.1932 7.58418C12.1678 7.55785 12.1373 7.53699 12.1036 7.52285C12.0698 7.50872 12.0336 7.50161 11.997 7.50197V7.50197C11.9609 7.50231 11.9251 7.50993 11.892 7.52437C11.8589 7.53882 11.829 7.55979 11.8041 7.58604C11.7793 7.61229 11.76 7.64328 11.7474 7.67716C11.7348 7.71104 11.7291 7.74711 11.7307 7.78322V7.78322Z" stroke="white" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
|
|
6
|
+
<path d="M12 17.2461C11.8146 17.2461 11.6333 17.1911 11.4792 17.0881C11.325 16.9851 11.2048 16.8387 11.1339 16.6674C11.0629 16.4961 11.0443 16.3076 11.0805 16.1257C11.1167 15.9438 11.206 15.7768 11.3371 15.6457C11.4682 15.5146 11.6352 15.4253 11.8171 15.3891C11.999 15.3529 12.1875 15.3715 12.3588 15.4425C12.5301 15.5134 12.6765 15.6336 12.7795 15.7877C12.8825 15.9419 12.9375 16.1232 12.9375 16.3086C12.9375 16.5572 12.8387 16.7957 12.6629 16.9715C12.4871 17.1473 12.2486 17.2461 12 17.2461Z" fill="white" />
|
|
7
|
+
</svg>
|
|
8
|
+
);
|
|
9
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export default function CircleArrow() {
|
|
2
|
+
return (
|
|
3
|
+
<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
4
|
+
<rect width="28" height="28" rx="14" fill="#A71A1A" />
|
|
5
|
+
<path d="M6 14H19.5M19.5 14L14.5 9M19.5 14L14.5 19" stroke="white" strokeWidth="1.5" />
|
|
6
|
+
</svg>
|
|
7
|
+
)
|
|
8
|
+
}
|