@edu-tosel/design 1.0.132 → 1.0.133
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/layout/template/Olympiad/Conditions.js +42 -6
- package/layout/template/Olympiad/Features.js +1 -1
- package/layout/template/Olympiad/Olympiad.layout.js +1 -0
- package/layout/template/Olympiad/Prizes.js +1 -1
- package/layout/template/home/Promotion.js +82 -31
- package/layout/template/home/Service.d.ts +0 -1
- package/layout/template/home/Service.js +86 -32
- package/layout/template/home/Shortcut.js +23 -6
- package/layout/template/home/layout/Carousel.js +8 -5
- package/layout/template/home/layout/Footer.js +34 -5
- package/layout/template/home/layout/Header.js +2 -1
- package/layout/template/promotion/Layout.d.ts +18 -1
- package/layout/template/promotion/Layout.js +37 -94
- package/package.json +1 -1
- package/tailwind.config.ts +28 -1
- package/version.txt +1 -1
|
@@ -1,11 +1,47 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "../../../util";
|
|
3
3
|
export default function Conditions() {
|
|
4
4
|
const container = {
|
|
5
|
-
sizes: "w-full h-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
sizes: "w-full h-fit",
|
|
6
|
+
spacings: "my-20 lg:my-40",
|
|
7
|
+
displays: "flex flex-col justify-center items-center",
|
|
8
|
+
graphics: "antialiased",
|
|
9
|
+
text: "break-keep",
|
|
9
10
|
};
|
|
10
|
-
|
|
11
|
+
const cardPositioning = {
|
|
12
|
+
displays: "flex flex-nowrap",
|
|
13
|
+
sizes: "w-screen",
|
|
14
|
+
};
|
|
15
|
+
const cardWrapper = {
|
|
16
|
+
sizes: `w-full overflow-x-auto scroll-smooth scrollbar-hidden scroll-pl-4`,
|
|
17
|
+
display: "flex flex-nowrap vertical-top",
|
|
18
|
+
spacings: "p-5",
|
|
19
|
+
snap: "snap-x snap-mandatory scroll-ms-0",
|
|
20
|
+
};
|
|
21
|
+
const cardDeck = {
|
|
22
|
+
displays: "inline-flex",
|
|
23
|
+
spacings: "gap-5 ml:mr-[calc(100vw-1200px)]",
|
|
24
|
+
};
|
|
25
|
+
const ghostCard = {
|
|
26
|
+
sizes: "h-100 ",
|
|
27
|
+
displays: "flex",
|
|
28
|
+
spacings: "ms-0 ps-0 last:[calc(50vw-520px)]",
|
|
29
|
+
animations: "duration-300",
|
|
30
|
+
scroll: "snap-start last:snap-end",
|
|
31
|
+
};
|
|
32
|
+
//control size of the card
|
|
33
|
+
const card = {
|
|
34
|
+
graphics: "shadow-main",
|
|
35
|
+
sizes: "h-100 w-80 rounded-2xl",
|
|
36
|
+
backgrounds: "bg-red",
|
|
37
|
+
hover: "hover:shadow-main-hover",
|
|
38
|
+
position: "ml:translate-x-[calc(50vw-600px)]",
|
|
39
|
+
transition: "duration-200",
|
|
40
|
+
displays: "display-block",
|
|
41
|
+
};
|
|
42
|
+
const sectiontitle = {
|
|
43
|
+
textstyles: "text-xl text-center text-green-dark mb-10 font-pretendard-bold md:text-2xl",
|
|
44
|
+
animations: "duration-300",
|
|
45
|
+
};
|
|
46
|
+
return (_jsxs("div", { className: cn(container), children: [_jsx("div", { className: cn(sectiontitle), children: "\uD559\uC0DD\uC774\uB77C\uBA74 \uB204\uAD6C\uB098 \uB3C4\uC804\uD560 \uC218 \uC788\uC5B4\uC694" }), _jsx("div", { className: "h-0.5 w-1/4 mb-8 bg-green-dark rounded-lg" }), _jsx("div", { className: cn(cardPositioning), children: _jsx("div", { className: cn(cardWrapper), children: _jsxs("div", { className: cn(cardDeck), children: [_jsx("div", { className: cn(ghostCard), children: _jsx("div", { className: cn(card), children: "1" }) }), _jsx("div", { className: cn(ghostCard), children: _jsx("div", { className: cn(card), children: "1" }) }), _jsx("div", { className: cn(ghostCard), children: _jsx("div", { className: cn(card), children: "1" }) }), _jsx("div", { className: cn(ghostCard), children: _jsx("div", { className: cn(card), children: "1" }) }), _jsx("div", { className: cn(ghostCard), children: _jsx("div", { className: cn(card), children: "1" }) }), _jsx("div", { className: cn(ghostCard), children: _jsx("div", { className: cn(card), children: "1" }) }), _jsx("div", { className: cn(ghostCard), children: _jsx("div", { className: cn(card), children: "1" }) }), _jsx("div", { className: cn(ghostCard), children: _jsx("div", { className: cn(card), children: "1" }) }), _jsx("div", { className: cn(ghostCard), children: _jsx("div", { className: cn(card), children: "1" }) })] }) }) })] }));
|
|
11
47
|
}
|
|
@@ -23,7 +23,7 @@ export default function Features() {
|
|
|
23
23
|
sizes: "w-full h-fit max-w-md",
|
|
24
24
|
displays: "flex flex-col items-center md:grow",
|
|
25
25
|
spacings: "py-4",
|
|
26
|
-
animations: "duration-300",
|
|
26
|
+
animations: "duration-300 hover:scale-105",
|
|
27
27
|
};
|
|
28
28
|
const boxTitle = {
|
|
29
29
|
textstyles: "font-pretendard-bold text-lg text-center text-green-dark my-4 md:text-xl",
|
|
@@ -45,5 +45,5 @@ export default function Prizes() {
|
|
|
45
45
|
const prizeDetail = {
|
|
46
46
|
textstyles: "font-pretendard-medium",
|
|
47
47
|
};
|
|
48
|
-
return (_jsxs("div", { className: cn(container), children: [_jsx("div", { className: cn(medalHandler), children: _jsx("img", { src: "images/olympiad/img-oly-prize-medal.png", alt: "" }) }), _jsxs("div", { className: cn(sectionTitleBreaker), children: [_jsx("div", { className: cn(sectionTitle), children: "\uACE0\uB824\uB300\uD559\uAD50 \uAE30\uAD00\uC7A5\uC0C1\uC744" }), _jsx("div", { className: cn(sectionTitle), children: "\uC218\uC0C1\uD560 \uC218 \uC788\uB294 \uAE30\uD68C" })] }), _jsx("div", { className: "h-0.5 w-1/4 my-10 bg-green-dark rounded-lg" }), _jsx("div", { className: cn(prizeWrapper), children: _jsxs("div", { className: cn(prizeSet), children: [_jsx("div", { className: "px-8 max-w-lg flex flex-col md:max-w-2xl", children: _jsx("img", { src: "images/olympiad/img-oly-prize-certificate.png", alt: "\uCEF4\uD4E8\uD130\uB85C \uBB38\uC81C\uB97C \uD478\uB294 \uC5EC\uC131", className: "rounded-xl overflow-hidden shadow-
|
|
48
|
+
return (_jsxs("div", { className: cn(container), children: [_jsx("div", { className: cn(medalHandler), children: _jsx("img", { src: "images/olympiad/img-oly-prize-medal.png", alt: "" }) }), _jsxs("div", { className: cn(sectionTitleBreaker), children: [_jsx("div", { className: cn(sectionTitle), children: "\uACE0\uB824\uB300\uD559\uAD50 \uAE30\uAD00\uC7A5\uC0C1\uC744" }), _jsx("div", { className: cn(sectionTitle), children: "\uC218\uC0C1\uD560 \uC218 \uC788\uB294 \uAE30\uD68C" })] }), _jsx("div", { className: "h-0.5 w-1/4 my-10 bg-green-dark rounded-lg" }), _jsx("div", { className: cn(prizeWrapper), children: _jsxs("div", { className: cn(prizeSet), children: [_jsx("div", { className: "px-8 max-w-lg flex flex-col md:max-w-2xl", children: _jsx("img", { src: "images/olympiad/img-oly-prize-certificate.png", alt: "\uCEF4\uD4E8\uD130\uB85C \uBB38\uC81C\uB97C \uD478\uB294 \uC5EC\uC131", className: "rounded-xl overflow-hidden shadow-main hover:shadow-main-hover duration-300 hover:scale-105" }) }), _jsxs("div", { className: cn(prizeExplainWrapper), children: [_jsxs("div", { className: cn(prizeExplainSet), children: [_jsx("div", { className: cn(prizeTitle), children: "\uB300\uC0C1" }), _jsx("div", { className: cn(prizeDetail), children: "\uACE0\uB824\uB300\uD559\uAD50 \uACBD\uC601\uB300\uD559 \uD559\uC7A5\uC0C1" })] }), _jsxs("div", { className: cn(prizeExplainSet), children: [_jsx("div", { className: cn(prizeTitle), children: "\uAE08\uC0C1/\uC740\uC0C1/\uB3D9\uC0C1" }), _jsx("div", { className: cn(prizeDetail), children: "\uACE0\uB824\uB300\uD559\uAD50 \uC5B8\uC5B4\uC815\uBCF4\uC5F0\uAD6C\uC18C \uC18C\uC7A5\uC0C1" })] }), _jsxs("div", { className: cn(prizeExplainSet), children: [_jsx("div", { className: cn(prizeTitle), children: "\uC7A5\uB824\uC0C1" }), _jsx("div", { className: cn(prizeDetail), children: "\uACE0\uB824\uB300\uD559\uAD50 \uAD6D\uC81C\uD1A0\uC140\uC704\uC6D0\uD68C \uC704\uC6D0\uC7A5\uC0C1" })] })] })] }) })] }));
|
|
49
49
|
}
|
|
@@ -1,41 +1,92 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
2
|
+
import { cn } from "../../../util";
|
|
3
|
+
import { useRef } from "react";
|
|
4
4
|
export default function Promotion({ banners, option, }) {
|
|
5
5
|
const { className } = option ?? {};
|
|
6
|
+
const scrollContainerRef = useRef(null);
|
|
7
|
+
const cardWidth = 480; //card width
|
|
8
|
+
const handleScroll = (direction) => {
|
|
9
|
+
if (scrollContainerRef.current) {
|
|
10
|
+
const scrollAmount = cardWidth;
|
|
11
|
+
const currentScrollLeft = scrollContainerRef.current.scrollLeft;
|
|
12
|
+
const newScrollLeft = direction === "left"
|
|
13
|
+
? Math.max(currentScrollLeft - scrollAmount, 0)
|
|
14
|
+
: currentScrollLeft + scrollAmount;
|
|
15
|
+
scrollContainerRef.current.scrollTo({
|
|
16
|
+
left: newScrollLeft,
|
|
17
|
+
behavior: "smooth"
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
};
|
|
6
21
|
const container = {
|
|
7
|
-
positions: "relative",
|
|
22
|
+
positions: "relative z-10 group mt-20",
|
|
8
23
|
displays: "flex flex-col",
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
};
|
|
12
|
-
const
|
|
13
|
-
displays: "flex flex-row
|
|
14
|
-
sizes: "w-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
25
|
-
|
|
24
|
+
textstyles: "break-keep antialiased",
|
|
25
|
+
// test: "border-red-500 border-4",
|
|
26
|
+
};
|
|
27
|
+
const deckTitlePositioning = {
|
|
28
|
+
displays: "flex flex-row ml:justify-center ml:itmes-center",
|
|
29
|
+
sizes: "w-full",
|
|
30
|
+
};
|
|
31
|
+
const deckTitle = {
|
|
32
|
+
displays: "pl-5",
|
|
33
|
+
sizes: "max-w-300 w-full",
|
|
34
|
+
textstyles: "font-pretendard-var font-bold text-2xl text-green-dark",
|
|
35
|
+
};
|
|
36
|
+
const cardPositioning = {
|
|
37
|
+
displays: "flex flex-nowrap",
|
|
38
|
+
sizes: "w-screen",
|
|
39
|
+
};
|
|
40
|
+
const cardWrapper = {
|
|
41
|
+
sizes: "w-full overflow-x-auto scroll-smooth scrollbar-hidden scroll-px-4",
|
|
42
|
+
display: "flex flex-nowrap vertical-top",
|
|
43
|
+
spacings: "px-5 pt-4 md:pt-6 pb-12",
|
|
44
|
+
snap: "snap-x snap-mandatory scroll-ms-0",
|
|
45
|
+
};
|
|
46
|
+
//adjust the responsive right margin of scroller
|
|
47
|
+
const cardDeck = {
|
|
48
|
+
displays: "inline-flex",
|
|
49
|
+
spacings: "gap-5 ml:mr-[calc(100vw-1200px)]",
|
|
50
|
+
};
|
|
51
|
+
const buttonPositioning = {
|
|
52
|
+
displays: "hidden flex-row md:flex",
|
|
53
|
+
sizes: "w-full h-full",
|
|
54
|
+
spacings: "px-2",
|
|
55
|
+
positions: "absolute top-0 left-0 justify-between items-center opacity-0 group-hover:opacity-100 duration-300",
|
|
56
|
+
hovering: "group pointer-events-none",
|
|
57
|
+
};
|
|
58
|
+
const hoverButton = {
|
|
59
|
+
sizes: "rounded-full w-12 h-12 scale-50 group-hover:scale-100",
|
|
60
|
+
animation: "duration-300 ",
|
|
61
|
+
test: "bg-gray-medium/20 hover:bg-gray-medium/50 pointer-events-auto backdrop-blur-sm fill-red-500"
|
|
62
|
+
};
|
|
63
|
+
return (_jsxs("div", { className: cn(container), children: [_jsx("div", { className: cn(deckTitlePositioning), children: _jsx("div", { className: cn(deckTitle), children: "\uC0C8\uB85C\uC6B4 \uC18C\uC2DD" }) }), _jsx("div", { className: cn(cardPositioning), children: _jsx("div", { className: cn(cardWrapper), ref: scrollContainerRef, children: _jsx("div", { className: cn(cardDeck), children: banners.map((banner) => (_jsx(Banner, { ...banner }, banner.image.src))) }) }) }), _jsxs("div", { className: cn(buttonPositioning), children: [_jsx("div", { className: cn(hoverButton), onClick: () => handleScroll("left"), children: _jsx("img", { src: "images/home/handle-left.svg", alt: "" }) }), _jsx("div", { className: cn(hoverButton), onClick: () => handleScroll("right"), children: _jsx("img", { src: "images/home/handle-right.svg", alt: "" }) })] })] }));
|
|
26
64
|
}
|
|
27
65
|
function Banner({ image, option }) {
|
|
28
|
-
const { background
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
66
|
+
const { background } = option ?? {};
|
|
67
|
+
//ghost card snaps to the end of the viewport
|
|
68
|
+
const ghostCard = {
|
|
69
|
+
displays: "flex",
|
|
70
|
+
spacings: "ms-0 ps-0 ",
|
|
71
|
+
scroll: "snap-start",
|
|
72
|
+
};
|
|
73
|
+
//adjust the responsive left margin of scroller
|
|
74
|
+
//adjust the card size
|
|
75
|
+
const card = {
|
|
76
|
+
graphics: "shadow-main",
|
|
77
|
+
sizes: "w-65 h-40 xxxs:w-76 xxxs:h-47.5 md:w-120 md:h-75 rounded-2xl md:rounded-xl",
|
|
78
|
+
backgrounds: background,
|
|
79
|
+
hover: "hover:shadow-main-hover hover:scale-[1.03]",
|
|
80
|
+
position: "ml:translate-x-[calc(50vw-600px)]",
|
|
81
|
+
transition: "duration-300",
|
|
82
|
+
displays: "relative display-block overflow-hidden",
|
|
83
|
+
fonts: "font-pretendard-var"
|
|
35
84
|
};
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
85
|
+
const imageWrapper = {
|
|
86
|
+
sizes: "w-full h-full",
|
|
87
|
+
displays: "absolute",
|
|
88
|
+
positions: "bottom-0 left-0",
|
|
89
|
+
background: `bg-cover bg-center`
|
|
39
90
|
};
|
|
40
|
-
return (_jsx("div", { className: cn(
|
|
91
|
+
return (_jsx("div", { className: cn(ghostCard), children: _jsx("div", { className: cn(card), children: _jsx("div", { className: cn(imageWrapper), style: { backgroundImage: `url(${image?.src})` } }) }) }));
|
|
41
92
|
}
|
|
@@ -1,52 +1,106 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { useRef } from "react";
|
|
3
|
+
import { cn } from "../../../util";
|
|
3
4
|
export default function Service({ banners }) {
|
|
5
|
+
const scrollContainerRef = useRef(null);
|
|
6
|
+
const cardWidth = 400; // card width
|
|
7
|
+
const handleScroll = (direction) => {
|
|
8
|
+
if (scrollContainerRef.current) {
|
|
9
|
+
const scrollAmount = cardWidth;
|
|
10
|
+
const currentScrollLeft = scrollContainerRef.current.scrollLeft;
|
|
11
|
+
const newScrollLeft = direction === "left"
|
|
12
|
+
? Math.max(currentScrollLeft - scrollAmount, 0)
|
|
13
|
+
: currentScrollLeft + scrollAmount;
|
|
14
|
+
scrollContainerRef.current.scrollTo({
|
|
15
|
+
left: newScrollLeft,
|
|
16
|
+
behavior: "smooth",
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
};
|
|
4
20
|
const container = {
|
|
5
|
-
positions: "relative",
|
|
21
|
+
positions: "relative z-10 group",
|
|
6
22
|
displays: "flex flex-col",
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
textstyles: "break-keep antialiased",
|
|
24
|
+
// test: "border-red-500 border-4",
|
|
25
|
+
};
|
|
26
|
+
const deckTitlePositioning = {
|
|
27
|
+
displays: "flex flex-row ml:justify-center ml:itmes-center",
|
|
28
|
+
sizes: "w-full",
|
|
29
|
+
};
|
|
30
|
+
const deckTitle = {
|
|
31
|
+
displays: "pl-5",
|
|
32
|
+
sizes: "max-w-300 w-full",
|
|
33
|
+
textstyles: "font-pretendard-var font-bold text-2xl text-green-dark",
|
|
34
|
+
};
|
|
35
|
+
const cardPositioning = {
|
|
36
|
+
displays: "flex flex-nowrap",
|
|
37
|
+
sizes: "w-screen",
|
|
38
|
+
};
|
|
39
|
+
const cardWrapper = {
|
|
40
|
+
sizes: "w-full overflow-x-auto scroll-smooth scrollbar-hidden scroll-px-4",
|
|
41
|
+
display: "flex flex-nowrap vertical-top",
|
|
42
|
+
spacings: "px-5 pt-4 md:pt-6 pb-12",
|
|
43
|
+
snap: "snap-x snap-mandatory scroll-ms-0",
|
|
44
|
+
};
|
|
45
|
+
//adjust the responsive right margin of scroller
|
|
46
|
+
const cardDeck = {
|
|
47
|
+
displays: "inline-flex",
|
|
48
|
+
spacings: "gap-5 ml:mr-[calc(100vw-1200px)]",
|
|
49
|
+
};
|
|
50
|
+
const buttonPositioning = {
|
|
51
|
+
displays: "hidden flex-row md:flex",
|
|
52
|
+
sizes: "w-full h-full",
|
|
53
|
+
spacings: "px-2",
|
|
54
|
+
positions: "absolute top-0 left-0 justify-between items-center opacity-0 group-hover:opacity-100 duration-300",
|
|
55
|
+
hovering: "group pointer-events-none",
|
|
56
|
+
};
|
|
57
|
+
const hoverButton = {
|
|
58
|
+
sizes: "rounded-full w-12 h-12 scale-50 group-hover:scale-100",
|
|
59
|
+
animation: "duration-300 ",
|
|
60
|
+
test: "bg-gray-medium/20 hover:bg-gray-medium/50 pointer-events-auto backdrop-blur-sm fill-red-500",
|
|
61
|
+
};
|
|
62
|
+
return (_jsxs("div", { className: cn(container), children: [_jsx("div", { className: cn(deckTitlePositioning), children: _jsx("div", { className: cn(deckTitle), children: "\uD1A0\uC140\uC758 \uCC28\uBCC4\uD654\uB41C \uC11C\uBE44\uC2A4" }) }), _jsx("div", { className: cn(cardPositioning), children: _jsx("div", { className: cn(cardWrapper), ref: scrollContainerRef, children: _jsx("div", { className: cn(cardDeck), children: banners.map((banner) => (_jsx(Banner, { ...banner }, banner.titles.title))) }) }) }), _jsxs("div", { className: cn(buttonPositioning), children: [_jsx("div", { className: cn(hoverButton), onClick: () => handleScroll("left"), children: _jsx("img", { src: "images/home/handle-left.svg", alt: "" }) }), _jsx("div", { className: cn(hoverButton), onClick: () => handleScroll("right"), children: _jsx("img", { src: "images/home/handle-right.svg", alt: "" }) })] })] }));
|
|
23
63
|
}
|
|
24
64
|
function Banner({ titles, image, option }) {
|
|
25
65
|
const { background } = option ?? {};
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
displays: "flex
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
66
|
+
//ghost card snaps to the end of the viewport
|
|
67
|
+
const ghostCard = {
|
|
68
|
+
displays: "flex",
|
|
69
|
+
spacings: "ms-0 ps-0 ",
|
|
70
|
+
scroll: "snap-start",
|
|
71
|
+
};
|
|
72
|
+
//adjust the responsive left margin of scroller
|
|
73
|
+
//adjust the card size
|
|
74
|
+
const card = {
|
|
75
|
+
graphics: "shadow-main",
|
|
76
|
+
sizes: "h-100 w-65 xxxs:w-76 md:w-100 md:h-125 rounded-2xl md:rounded-xl",
|
|
77
|
+
backgrounds: background,
|
|
78
|
+
hover: "hover:shadow-main-hover hover:scale-[1.03]",
|
|
79
|
+
position: "ml:translate-x-[calc(50vw-600px)]",
|
|
80
|
+
transition: "duration-300",
|
|
81
|
+
displays: "relative display-block overflow-hidden",
|
|
82
|
+
fonts: "font-pretendard-var",
|
|
32
83
|
};
|
|
33
84
|
const titleBox = {
|
|
34
85
|
container: {
|
|
35
|
-
positions: "relative z-10",
|
|
36
|
-
|
|
86
|
+
positions: "relative flex flex-col z-10",
|
|
87
|
+
sizes: "w-full h-fit",
|
|
88
|
+
paddings: "p-7",
|
|
37
89
|
},
|
|
38
90
|
title: {
|
|
39
|
-
fonts: "text-
|
|
91
|
+
fonts: "text-xl font-bold md:text-2xl",
|
|
40
92
|
colors: titles.titleColor ?? "text-gray-dark ",
|
|
41
93
|
},
|
|
42
94
|
subtitle: {
|
|
43
|
-
fonts: "text-
|
|
95
|
+
fonts: "text-xs font-medium ",
|
|
44
96
|
colors: titles.subtitleColor ?? "text-gray-medium",
|
|
45
97
|
},
|
|
46
98
|
};
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
99
|
+
const imageWrapper = {
|
|
100
|
+
sizes: "w-full h-full",
|
|
101
|
+
displays: "absolute",
|
|
102
|
+
positions: "bottom-0 left-0",
|
|
103
|
+
background: `bg-cover bg-center`,
|
|
50
104
|
};
|
|
51
|
-
return (
|
|
105
|
+
return (_jsx("div", { className: cn(ghostCard), children: _jsxs("div", { className: cn(card), children: [_jsx("div", { className: cn(imageWrapper), style: { backgroundImage: `url(${image?.src})` } }), _jsxs("div", { className: cn(titleBox.container), children: [_jsx("div", { className: cn(titleBox.subtitle), children: titles.subtitle }), _jsx("div", { className: cn(titleBox.title), children: titles.title })] })] }) }));
|
|
52
106
|
}
|
|
@@ -2,14 +2,31 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { cn } from "../../../util";
|
|
3
3
|
export default function ShortcutBanner({ shortcuts, }) {
|
|
4
4
|
const container = {
|
|
5
|
-
displays: "flex
|
|
6
|
-
|
|
5
|
+
displays: "flex justify-center items-center",
|
|
6
|
+
spacings: "px-5 pt-16 pb-24"
|
|
7
|
+
};
|
|
8
|
+
const buttonWrapper = {
|
|
9
|
+
displays: "flex justify-center items-center flex-wrap",
|
|
10
|
+
sizes: "max-w-70 h-fit sm:max-w-full sm:w-full",
|
|
11
|
+
spacings: "gap-x-6 gap-y-4 xxxs:gap-x-10 sm:gap-x-6 md:gap-x-10",
|
|
12
|
+
graphics: "antialiased",
|
|
13
|
+
};
|
|
14
|
+
const buttonSet = {
|
|
15
|
+
displays: "group flex flex-col justify-center items-center",
|
|
16
|
+
sizes: "w-16 hover:scale-110",
|
|
17
|
+
animation: "duration-300",
|
|
18
|
+
spacings: "gap-2"
|
|
7
19
|
};
|
|
8
20
|
const tagBox = {
|
|
9
21
|
displays: "flex justify-center items-center",
|
|
10
|
-
sizes: "w-
|
|
11
|
-
fonts: "text-xs font-pretendard-
|
|
12
|
-
styles: "bg-gray-light rounded-md",
|
|
22
|
+
sizes: "w-full h-6.25 ",
|
|
23
|
+
fonts: "text-xs font-pretendard-var font-medium text-gray-medium group-hover:text-green-dark",
|
|
24
|
+
styles: "bg-gray-light/40 group-hover:bg-green-light rounded-md",
|
|
25
|
+
sapcings: "",
|
|
26
|
+
};
|
|
27
|
+
const iconContainer = {
|
|
28
|
+
sizes: "w-16 h-16 rounded-lg",
|
|
29
|
+
background: "group-hover:bg-gray-light/40"
|
|
13
30
|
};
|
|
14
|
-
return (_jsx("div", { className: cn(container), children: shortcuts.map((shortcut) => (_jsxs("button", { onClick: shortcut.onClick, className:
|
|
31
|
+
return (_jsx("div", { className: cn(container), children: _jsx("div", { className: cn(buttonWrapper), children: shortcuts.map((shortcut) => (_jsxs("button", { onClick: shortcut.onClick, className: cn(buttonSet), children: [_jsx("div", { className: cn(iconContainer), children: _jsx("img", { src: shortcut.icon, alt: shortcut.title }) }), _jsx("div", { className: cn(tagBox), children: shortcut.title })] }, shortcut.title))) }) }));
|
|
15
32
|
}
|
|
@@ -80,11 +80,14 @@ export default function Carousel({ contents, }) {
|
|
|
80
80
|
styles: "rounded-md",
|
|
81
81
|
};
|
|
82
82
|
const buttonBox = {
|
|
83
|
-
positions: !isMD && "absolute bottom-5 left-5 sm:bottom-10 sm:left-10",
|
|
84
83
|
animations: "duration-500",
|
|
85
|
-
displays: "justify-center items-center gap-1 flex",
|
|
86
|
-
sizes: "w-
|
|
87
|
-
paddings: "px-1.5 mt-12",
|
|
84
|
+
displays: "justify-center items-center gap-1 flex z-10",
|
|
85
|
+
sizes: "w-30 h-10 md:h-6.25 md:w-23.25 bg-gray-dark rounded-full",
|
|
86
|
+
paddings: "px-1.5 mt-0 mb-5 md:mt-12 ",
|
|
88
87
|
};
|
|
89
|
-
|
|
88
|
+
const buttonBoxPosition = {
|
|
89
|
+
display: "absolute flex justify-center items-center md:static md:justify-start",
|
|
90
|
+
sizes: "w-full h-fit left-0 bottom-0 z-10",
|
|
91
|
+
};
|
|
92
|
+
return (_jsx("div", { onClick: contents[index].onClick, className: cn(container), children: _jsxs("div", { className: cn(body), children: [_jsxs("div", { className: "duration-500 w-fit h-fit flex flex-col mt-4 xxs:mt-8 xxs:flex-row xxs:gap-8 md:flex-col md:flex-none md:w-72 md:pl-7.5 md:gap-6 md:mt-0", children: [_jsxs("div", { className: cn(titleSet), children: [_jsx("div", { className: cn(tagBox), children: tagString[tag.type] }), _jsx("div", { className: "font-pretendard-bold text-xl md:text-2xl", children: titles.title })] }), _jsx(LineBreaks, { className: "w-fit flex flex-col justify-center text-sm my-2 xxs:mt-0 md:text-base", texts: titles.subtitle }), _jsx("div", { className: cn(buttonBoxPosition), children: _jsxs("div", { className: cn(buttonBox), children: [_jsx("button", { onClick: handlePrev, className: "w-5 h-5 flex justify-center items-center", children: _jsx(SVG.Symbol.LessThan, {}) }), _jsxs("div", { className: "flex flex-row md:gap-2 gap-4 justify-center items-center", children: [_jsx("div", { className: "text-white w-2 text-sm", children: index + 1 }), _jsx("div", { className: "w-0.5 h-3 bg-gray-medium" }), _jsx("div", { className: "text-white w-2 text-sm", children: contents.length })] }), _jsx("button", { onClick: handleNext, className: "w-5 h-5 flex justify-center items-center", children: _jsx(SVG.Symbol.GreaterThan, {}) })] }) })] }), _jsx("div", { className: "h-full overflow-hidden w-fit", children: image && (_jsx(animated.img, { src: image, alt: "carousel-image", onLoad: () => setLoaded(true), className: "object-cover h-full z-0", style: transitionStyles })) })] }) }));
|
|
90
93
|
}
|
|
@@ -3,15 +3,44 @@ import { cn } from "../../../../util";
|
|
|
3
3
|
export default function Footer() {
|
|
4
4
|
const container = {
|
|
5
5
|
displays: "flex justify-center items-center",
|
|
6
|
-
sizes: "w-full h-
|
|
7
|
-
backgrounds: "bg-
|
|
8
|
-
|
|
6
|
+
sizes: "w-full h-fit",
|
|
7
|
+
backgrounds: "bg-[#FBFBFB]",
|
|
8
|
+
textstyles: "text-gray-medium font-pretendard-var text-sm break-keep antialiased",
|
|
9
9
|
};
|
|
10
10
|
const body = {
|
|
11
11
|
sizes: "w-full max-w-290",
|
|
12
|
-
paddings: "py-
|
|
12
|
+
paddings: "py-20 px-5",
|
|
13
13
|
};
|
|
14
|
-
|
|
14
|
+
const logoWrapper = {
|
|
15
|
+
displays: "flex flex-row gap-6",
|
|
16
|
+
};
|
|
17
|
+
const svgController = {
|
|
18
|
+
sizes: "h-8",
|
|
19
|
+
};
|
|
20
|
+
//general web info of TOSEL
|
|
21
|
+
const infoSet = {
|
|
22
|
+
diaplay: "flex flex-col gap-1 my-8 w-full",
|
|
23
|
+
};
|
|
24
|
+
const infoTitle = {
|
|
25
|
+
textstyling: "text-base font-bold",
|
|
26
|
+
};
|
|
27
|
+
const info = {
|
|
28
|
+
textstyling: "leading-normal text-sm",
|
|
29
|
+
};
|
|
30
|
+
//social button styling
|
|
31
|
+
const iconWrapper = {
|
|
32
|
+
displays: "flex items-center gap-3 mt-8",
|
|
33
|
+
};
|
|
34
|
+
const iconBox = {
|
|
35
|
+
sizes: "w-9 h-9 rounded-md",
|
|
36
|
+
displays: "flex justify-center items-center",
|
|
37
|
+
backgrounds: "bg-gray-medium/30 hover:bg-gray-medium",
|
|
38
|
+
animation: "duration-200"
|
|
39
|
+
};
|
|
40
|
+
const socialIconControl = {
|
|
41
|
+
siezes: "h-6",
|
|
42
|
+
};
|
|
43
|
+
return (_jsx("div", { className: cn(container), children: _jsxs("div", { className: cn(body), children: [_jsxs("div", { className: cn(logoWrapper), children: [_jsx("img", { className: cn(svgController), src: "/images/logos/logo-tosel-main.svg", alt: "" }), _jsx("img", { className: cn(svgController), src: "/images/logos/logo-itc-main.svg", alt: "" })] }), _jsxs("div", { className: "flex flex-wrap justify-between items-center border-b-1 border-gray-dark pb-4 mt-5 font-medium gap-y-1", children: [_jsx("div", { children: "Copyright TOSEL. \u24D2 All Rights Reserved." }), _jsx("div", { className: "flex gap-5", children: buttons.map((button, index) => (_jsx("div", { children: button.title }, index))) })] }), _jsxs("div", { className: cn(infoSet), children: [_jsx("div", { className: cn(infoTitle), children: "\uACE0\uAC1D\uBB38\uC758" }), _jsxs("div", { className: cn(info), children: ["\uB300\uD45C\uBC88\uD638 | 02-923-0505", _jsx("br", {}), " \uAC1C\uC778\uBB38\uC758 | tosel_cs@tosel.co.kr ", _jsx("br", {}), "\uB2E8\uCCB4\uBB38\uC758 | tosel_academy@tosel.co.kr"] })] }), _jsxs("div", { className: cn(infoSet), children: [_jsx("div", { className: cn(infoTitle), children: "\uAD6D\uC81C\uD1A0\uC140\uC704\uC6D0\uD68C" }), _jsxs("div", { className: cn(info), children: ["\uC6F9\uC11C\uBE44\uC2A4: \uC8FC\uC2DD\uD68C\uC0AC \uC5D0\uB4C0\uD1A0\uC140 | \uD1B5\uC2E0\uD310\uB9E4\uC5C5\uC2E0\uACE0\uBC88\uD638: \uC81C 2012-\uC11C\uC6B8\uC131\uBD81-0083\uD638", _jsx("br", {}), " \uC11C\uC6B8\uC2DC \uC131\uBD81\uAD6C \uC548\uC554\uB85C 145 \uACE0\uB824\uB300\uD559\uAD50 \uB77C\uC774\uC2DC\uC6C0 4\uCE35", _jsx("br", {}), " Lyceum Korea University, 145 Anam Ro, Seongbuk-Gu, Seoul, Korea 02841"] })] }), _jsxs("div", { className: cn(iconWrapper), children: [_jsx("a", { href: "https://blog.naver.com/ebs1503", children: _jsx("div", { className: cn(iconBox), children: _jsx("img", { className: cn(socialIconControl), src: "/images/logos/naver.svg", alt: "" }) }) }), _jsx("a", { href: "https://www.instagram.com/tosel_official/", children: _jsx("div", { className: cn(iconBox), children: _jsx("img", { className: cn(socialIconControl), src: "/images/logos/instagram.svg", alt: "" }) }) }), _jsx("a", { href: "https://www.youtube.com/@tosel_official", children: _jsx("div", { className: cn(iconBox), children: _jsx("img", { className: cn(socialIconControl), src: "/images/logos/youtube.svg", alt: "" }) }) })] })] }) }));
|
|
15
44
|
}
|
|
16
45
|
const buttons = [
|
|
17
46
|
// {
|
|
@@ -6,7 +6,8 @@ export default function Header({ logo, rightButton, contents, }) {
|
|
|
6
6
|
positions: "fixed top-0 left-0 z-40",
|
|
7
7
|
displays: "flex justify-center items-center",
|
|
8
8
|
sizes: "w-full",
|
|
9
|
-
styles: "bg-white box-shadow
|
|
9
|
+
styles: "bg-white box-shadow",
|
|
10
|
+
textstyles: "antialiased",
|
|
10
11
|
};
|
|
11
12
|
const body = {
|
|
12
13
|
displays: "flex items-center justify-center md:justify-between",
|
|
@@ -1 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
import { Button as _Button } from "../../../interface";
|
|
2
|
+
type EventType = "event" | "notice";
|
|
3
|
+
interface Event {
|
|
4
|
+
id: number;
|
|
5
|
+
type: EventType;
|
|
6
|
+
thumbnail: string;
|
|
7
|
+
createdAt: string;
|
|
8
|
+
startedAt?: string;
|
|
9
|
+
expiredAt?: string;
|
|
10
|
+
endData?: string;
|
|
11
|
+
title: string;
|
|
12
|
+
content: string;
|
|
13
|
+
button?: _Button;
|
|
14
|
+
}
|
|
15
|
+
export default function Layout({ events }: {
|
|
16
|
+
events: Event[];
|
|
17
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export {};
|
|
@@ -2,69 +2,8 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
2
2
|
import { useState } from "react";
|
|
3
3
|
import { IoIosSearch } from "react-icons/io";
|
|
4
4
|
import dayjs from "dayjs";
|
|
5
|
-
import {
|
|
6
|
-
export default function Layout() {
|
|
7
|
-
const eventsData = [
|
|
8
|
-
{
|
|
9
|
-
id: 1,
|
|
10
|
-
img: "/images/promotion/promotion1.png",
|
|
11
|
-
type: "0",
|
|
12
|
-
startDate: "2024-05-01",
|
|
13
|
-
endDate: "2024-12-31",
|
|
14
|
-
title: "5월 토셀 랩 세미나 개최",
|
|
15
|
-
body: "https://www.tosel.org/uploads/book-info-img/1697164321986Listening-Series_Pre-Starter.png",
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
id: 2,
|
|
19
|
-
img: "/images/promotion/promotion2.png",
|
|
20
|
-
type: "0",
|
|
21
|
-
regDate: "2024-09-01",
|
|
22
|
-
startDate: "2024-09-01",
|
|
23
|
-
endDate: "2024-09-30",
|
|
24
|
-
title: "83회 명예의 전당 등재자라면? 지금 바로 인터뷰에 참여해보세요",
|
|
25
|
-
body: "https://www.tosel.org/uploads/book-info-img/1697164321986Listening-Series_Pre-Starter.png",
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
id: 3,
|
|
29
|
-
img: "/images/promotion/promotion3.png",
|
|
30
|
-
type: "1",
|
|
31
|
-
regDate: "2024-09-01",
|
|
32
|
-
startDate: "0000-00-00",
|
|
33
|
-
endDate: "0000-00-00",
|
|
34
|
-
title: "소셜 로그인 이벤트! 네이버 계정 연동하고 쿠폰 받아가세요",
|
|
35
|
-
body: "https://www.tosel.org/uploads/book-info-img/1697164321986Listening-Series_Pre-Starter.png",
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
id: 4,
|
|
39
|
-
img: "/images/promotion/promotion4.png",
|
|
40
|
-
type: "2",
|
|
41
|
-
regDate: "2024-09-01",
|
|
42
|
-
startDate: "0000-00-00",
|
|
43
|
-
endDate: "0000-00-00",
|
|
44
|
-
title: "인사혁신처, 지방공기업 등에 TOSEL 확대 적용 발표",
|
|
45
|
-
body: "https://www.tosel.org/uploads/book-info-img/1697164321986Listening-Series_Pre-Starter.png",
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
id: 5,
|
|
49
|
-
img: "/images/promotion/promotion5.png",
|
|
50
|
-
type: "0",
|
|
51
|
-
regDate: "2024-09-01",
|
|
52
|
-
startDate: "2024-10-01",
|
|
53
|
-
endData: "2024-10-31",
|
|
54
|
-
title: "24년도 하반기 고려대학교 미래교육원 토셀 전문가 과정 모집",
|
|
55
|
-
body: "https://www.tosel.org/uploads/book-info-img/1697164321986Listening-Series_Pre-Starter.png",
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
id: 6,
|
|
59
|
-
img: "/images/promotion/promotion6.png",
|
|
60
|
-
type: "2",
|
|
61
|
-
regDate: "2024-09-01",
|
|
62
|
-
startDate: "0000-00-00",
|
|
63
|
-
endDate: "0000-00-00",
|
|
64
|
-
title: "토셀, 경찰대학교 편입학전형 / 졸업인증 평가 반영",
|
|
65
|
-
body: "https://www.tosel.org/uploads/book-info-img/1697164321986Listening-Series_Pre-Starter.png",
|
|
66
|
-
},
|
|
67
|
-
];
|
|
5
|
+
import { cn, isHTMLString } from "../../../util";
|
|
6
|
+
export default function Layout({ events }) {
|
|
68
7
|
const [selectedEvent, setSelectedEvent] = useState(null);
|
|
69
8
|
const [filter, setFilter] = useState("모두보기");
|
|
70
9
|
const [searchQuery, setSearchQuery] = useState("");
|
|
@@ -76,57 +15,61 @@ export default function Layout() {
|
|
|
76
15
|
};
|
|
77
16
|
const getStatusText = (event) => {
|
|
78
17
|
const now = dayjs();
|
|
79
|
-
const
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
18
|
+
const startedAt = dayjs(event.startedAt);
|
|
19
|
+
const expiredAt = event.expiredAt
|
|
20
|
+
? dayjs(event.expiredAt)
|
|
21
|
+
: dayjs(event.endData);
|
|
22
|
+
if (event.type === "event") {
|
|
23
|
+
if (event.expiredAt) {
|
|
24
|
+
if (now.isBefore(startedAt)) {
|
|
25
|
+
return (_jsx("span", { className: "px-2 py-1 text-2xs font-semibold rounded-md bg-green-dark text-white", children: "\uC624\uD508\uC608\uC815" }));
|
|
26
|
+
}
|
|
27
|
+
else if (now.isAfter(expiredAt)) {
|
|
28
|
+
return (_jsx("span", { className: "px-2 py-1 text-2xs font-semibold rounded-md bg-gray-light text-gray-mid", children: "\uB9C8\uAC10" }));
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
const diff = expiredAt.diff(now, "day");
|
|
32
|
+
return (_jsxs("span", { className: "px-2 py-1 text-2xs font-semibold rounded-md bg-green-dark/10 text-green-dark", children: ["\uC9C4\uD589\uC911 | D-", diff] }));
|
|
33
|
+
}
|
|
87
34
|
}
|
|
88
35
|
else {
|
|
89
|
-
|
|
90
|
-
|
|
36
|
+
return (_jsx("div", { className: "w-[63px] h-[22px] rounded-md bg-black flex items-center justify-center", style: {
|
|
37
|
+
background: "linear-gradient(269deg, rgba(118, 0, 35, 0.10) 0%, rgba(16, 86, 82, 0.10) 100%)",
|
|
38
|
+
}, children: _jsx("div", { className: "px-2 py-1 text-2xs font-semibold rounded-md", style: {
|
|
39
|
+
background: "linear-gradient(269deg, rgba(118, 0, 35) 0%, rgba(16, 86, 82) 100%)",
|
|
40
|
+
WebkitBackgroundClip: "text",
|
|
41
|
+
WebkitTextFillColor: "transparent",
|
|
42
|
+
}, children: "\uC0C1\uC2DC \uC774\uBCA4\uD2B8" }) }));
|
|
91
43
|
}
|
|
92
44
|
}
|
|
93
|
-
else if (event.type === "
|
|
94
|
-
return (_jsx("div", { className: "w-[63px] h-[22px] rounded-md bg-black flex items-center justify-center", style: {
|
|
95
|
-
background: "linear-gradient(269deg, rgba(118, 0, 35, 0.10) 0%, rgba(16, 86, 82, 0.10) 100%)",
|
|
96
|
-
}, children: _jsx("div", { className: "px-2 py-1 text-2xs font-semibold rounded-md", style: {
|
|
97
|
-
background: "linear-gradient(269deg, rgba(118, 0, 35) 0%, rgba(16, 86, 82) 100%)",
|
|
98
|
-
WebkitBackgroundClip: "text",
|
|
99
|
-
WebkitTextFillColor: "transparent",
|
|
100
|
-
}, children: "\uC0C1\uC2DC \uC774\uBCA4\uD2B8" }) }));
|
|
101
|
-
}
|
|
102
|
-
else if (event.type === "2") {
|
|
45
|
+
else if (event.type === "notice") {
|
|
103
46
|
return (_jsx("span", { className: "px-2 py-1 text-2xs font-semibold rounded-md bg-blue-navy/10 text-blue-navy", children: "\uD1A0\uC140 \uC18C\uC2DD" }));
|
|
104
47
|
}
|
|
105
48
|
else {
|
|
106
49
|
return "";
|
|
107
50
|
}
|
|
108
51
|
};
|
|
109
|
-
const filteredEvents =
|
|
52
|
+
const filteredEvents = events
|
|
110
53
|
.filter((event) => {
|
|
111
54
|
const now = dayjs();
|
|
112
|
-
const
|
|
113
|
-
const
|
|
114
|
-
? dayjs(event.endDate)
|
|
115
|
-
: dayjs(event.endData);
|
|
55
|
+
const startedAt = dayjs(event.startedAt);
|
|
56
|
+
const expiredAt = dayjs(event.expiredAt);
|
|
116
57
|
if (filter === "모두보기")
|
|
117
58
|
return true;
|
|
118
59
|
if (filter === "진행 중") {
|
|
119
|
-
return (event.
|
|
60
|
+
return (event.startedAt && now.isAfter(startedAt) && now.isBefore(expiredAt));
|
|
120
61
|
}
|
|
121
62
|
if (filter === "예정된") {
|
|
122
|
-
return event.
|
|
63
|
+
return event.startedAt && now.isBefore(startedAt);
|
|
123
64
|
}
|
|
124
65
|
if (filter === "토셀소식")
|
|
125
|
-
return event.type === "
|
|
66
|
+
return event.type === "notice";
|
|
126
67
|
return false;
|
|
127
68
|
})
|
|
128
69
|
.filter((event) => event.title.includes(searchQuery));
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
70
|
+
const button = () => ({
|
|
71
|
+
sizes: "w-full h-12 flex items-center justify-center rounded-md text-white cursor-pointer font-bold gap-3 text-sm xs:text-md",
|
|
72
|
+
backgrounds: "bg-gradient-to-l from-[#760023] to-[#105652]",
|
|
73
|
+
});
|
|
74
|
+
return (_jsx("div", { className: "min-h-screen w-full mx-auto", children: _jsx("div", { className: "mmd:max-w-300 h-full flex flex-col mx-auto px-10", children: selectedEvent ? (_jsxs("div", { className: "flex flex-col mmd:flex-row", children: [_jsx("div", { className: "min-w-[320px] h-auto p-5 mmd:sticky mmd:top-20 mmd:self-start", children: _jsxs("div", { className: "w-full h-auto rounded-xl sm:flex mmd:flex-col", children: [_jsx("div", { className: "w-full mmd:h-50 overflow-hidden", children: _jsx("img", { src: selectedEvent.thumbnail, alt: "", className: "rounded-xl h-full object-cover w-full" }) }), _jsxs("div", { className: "w-full h-auto pt-5 sm:p-5 mmd:p-0 mmd:pt-5 gap-3 flex flex-col", children: [_jsx("div", { className: "flex items-center", children: getStatusText(selectedEvent) }), _jsx("div", { className: "text-sm font-bold text-gray-dark flex items-center mb-2", children: selectedEvent.title }), selectedEvent.button && (_jsx("div", { onClick: selectedEvent.button.onClick, className: cn(button()), children: selectedEvent.button?.title }))] })] }, selectedEvent.id) }), _jsxs("div", { className: "flex-grow p-5", children: [_jsx("div", { children: isHTMLString(selectedEvent.content) ? (_jsx("div", { dangerouslySetInnerHTML: { __html: selectedEvent.content }, className: "w-full rounded-xl object-cover overflow-hidden" })) : (_jsx("div", { children: selectedEvent.content })) }), _jsx("button", { onClick: handleBackToList, className: "p-5 bg-green-dark/5 text-green-dark rounded-xl flex items-center justify-center hover:bg-green-dark/20 transition-all", children: "\uBAA9\uB85D\uC73C\uB85C \uB3CC\uC544\uAC00\uAE30" })] })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex flex-col sm:flex-row justify-between min-h-14.5 border-b-1", children: [_jsxs("div", { className: "w-full mb-5 h-9 sm:w-80 sm:h-9.5 flex items-center bg-[#f0f0f0]/10 rounded-xl", children: [_jsx(IoIosSearch, { className: "text-xl text-green-dark mr-3" }), _jsx("input", { type: "text", placeholder: "\uD0A4\uC6CC\uB4DC\uB97C \uC785\uB825\uD558\uC138\uC694.", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "w-full h-full text-sm bg-[#f0f0f0]/10 placeholder:text-[#7f7f7f] placeholder:font-light outline-none" })] }), _jsx("div", { className: "flex h-9 pb-5 sm:pb-0 sm:h-9.5 items-center sm:justify-center ", children: ["모두보기", "진행 중", "예정된", "토셀소식"].map((item) => (_jsx("div", { className: `text-xs sm:text-2xs md:text-xs p-2 sm:p-3 flex items-center justify-center cursor-pointer rounded-lg ${filter === item ? "bg-green-dark/10 text-green-dark" : ""}`, onClick: () => setFilter(item), children: item }, item))) })] }), _jsx("div", { className: "pt-5 flex grid sm:grid-cols-2 mmd:grid-cols-3 gap-5 rounded-xl", children: filteredEvents.map((event) => (_jsxs("div", { onClick: () => handleCardClick(event), className: "w-full max-h-84 shadow-md rounded-xl cursor-pointer box-shadow-green transition-all duration-500", children: [_jsx("div", { className: "w-full max-h-50 rounded-t-xl overflow-hidden relative", children: _jsx("img", { src: event.thumbnail, alt: "", className: "w-full" }) }), _jsxs("div", { className: "w-full min-h-34 p-8 gap-3 flex flex-col", children: [_jsx("div", { className: "flex items-center", children: getStatusText(event) }), _jsx("div", { className: "text-sm font-bold text-gray-dark flex items-center", children: event.title })] })] }, event.id))) })] })) }) }));
|
|
132
75
|
}
|
package/package.json
CHANGED
package/tailwind.config.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import tailwindcssAnimate from "tailwindcss-animate";
|
|
2
2
|
import type { Config } from "tailwindcss";
|
|
3
|
+
import type { PluginAPI } from "tailwindcss/types/config";
|
|
3
4
|
|
|
4
5
|
// import twElements from "tw-elements/dist/plugin";
|
|
5
6
|
// import tailwindcssDirectionalShadows from "tailwindcss-directional-shadows";
|
|
@@ -26,6 +27,13 @@ export default {
|
|
|
26
27
|
backgroundImage: {
|
|
27
28
|
"image-space": "url('/images/space/space.png')",
|
|
28
29
|
},
|
|
30
|
+
scrollbar: {
|
|
31
|
+
hidden: "hidden",
|
|
32
|
+
},
|
|
33
|
+
boxShadow: {
|
|
34
|
+
main: "0 2px 10px 0px rgba(0, 0, 0, 0.14)",
|
|
35
|
+
"main-hover": "0 10px 12px 0px rgba(0, 0, 0, 0.3)",
|
|
36
|
+
},
|
|
29
37
|
keyframes: {
|
|
30
38
|
slideBackground: {
|
|
31
39
|
"0%, 100%": { backgroundPosition: "left center" },
|
|
@@ -622,6 +630,25 @@ export default {
|
|
|
622
630
|
pattern: /delay-.*/,
|
|
623
631
|
},
|
|
624
632
|
],
|
|
625
|
-
plugins: [
|
|
633
|
+
plugins: [
|
|
634
|
+
tailwindcssAnimate,
|
|
635
|
+
function ({ addUtilities }: PluginAPI) {
|
|
636
|
+
addUtilities(
|
|
637
|
+
{
|
|
638
|
+
".scrollbar-hidden::-webkit-scrollbar": {
|
|
639
|
+
display: "none", // For WebKit browsers
|
|
640
|
+
},
|
|
641
|
+
".scrollbar-hidden": {
|
|
642
|
+
"-ms-overflow-style": "none", // For Internet Explorer and Edge
|
|
643
|
+
"scrollbar-width": "none", // For Firefox
|
|
644
|
+
},
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
respectPrefix: false,
|
|
648
|
+
respectImportant: false,
|
|
649
|
+
}
|
|
650
|
+
);
|
|
651
|
+
},
|
|
652
|
+
],
|
|
626
653
|
darkMode: "selector",
|
|
627
654
|
} satisfies Config;
|
package/version.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.133
|