@edu-tosel/design 1.0.47 → 1.0.48
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/README.md +42 -42
- package/asset/SVG.d.ts +13 -0
- package/asset/SVG.js +4 -0
- package/asset/SVG.tsx +27 -23
- package/asset/svg/Close.tsx +32 -32
- package/asset/svg/Direction.tsx +36 -36
- package/asset/svg/Email.tsx +20 -20
- package/asset/svg/Icon.d.ts +17 -0
- package/asset/svg/Icon.js +28 -0
- package/asset/svg/Icon.tsx +186 -0
- package/asset/svg/Image.tsx +24 -24
- package/asset/svg/Notification.tsx +34 -34
- package/asset/svg/Operation.tsx +66 -66
- package/asset/svg/Phone.tsx +20 -20
- package/asset/svg/Profile.tsx +27 -27
- package/asset/svg/Symbol.d.ts +12 -0
- package/asset/svg/Symbol.js +21 -0
- package/asset/svg/Symbol.tsx +60 -0
- package/asset/svg/TOSEL.tsx +63 -63
- package/globals.css +226 -226
- package/interaction/design/Worm.design.js +2 -1
- package/interface/domain/Tag.d.ts +8 -0
- package/interface/domain/Tag.js +11 -0
- package/interface/domain/index.d.ts +1 -0
- package/interface/domain/index.js +1 -0
- package/interface/widget/Carousel.d.ts +12 -0
- package/interface/widget/Carousel.js +1 -0
- package/interface/widget/index.d.ts +1 -0
- package/interface/widget/index.js +1 -0
- package/layout/index.d.ts +1 -0
- package/layout/index.js +1 -0
- package/layout/template/home/Navigation.d.ts +4 -0
- package/layout/template/home/Navigation.js +32 -0
- package/layout/template/home/Notice.d.ts +14 -0
- package/layout/template/home/Notice.js +49 -0
- package/layout/template/home/Promotion.d.ts +18 -0
- package/layout/template/home/Promotion.js +41 -0
- package/layout/template/home/Service.d.ts +16 -0
- package/layout/template/home/Service.js +53 -0
- package/layout/template/home/Shortcut.d.ts +6 -0
- package/layout/template/home/Shortcut.js +15 -0
- package/layout/template/home/index.d.ts +17 -0
- package/layout/template/home/index.js +17 -0
- package/layout/template/home/layout/Carousel.d.ts +5 -0
- package/layout/template/home/layout/Carousel.js +43 -0
- package/layout/template/home/layout/Footer.d.ts +1 -0
- package/layout/template/home/layout/Footer.js +26 -0
- package/layout/template/home/layout/Header.d.ts +1 -0
- package/layout/template/home/layout/Header.js +34 -0
- package/layout/template/home/layout/index.d.ts +3 -0
- package/layout/template/home/layout/index.js +12 -0
- package/package.json +1 -1
- package/tailwind.config.ts +618 -605
- package/util/index.d.ts +0 -1
- package/util/index.js +0 -1
- package/version.txt +1 -1
- package/widget/design/Select.design.js +2 -1
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import SVG from "../../../asset/SVG";
|
|
3
|
+
import { cn, gradient } from "../../../util";
|
|
4
|
+
export default function Promotion({ banners, options, }) {
|
|
5
|
+
const { className } = options ?? {};
|
|
6
|
+
const container = {
|
|
7
|
+
positions: "relative",
|
|
8
|
+
displays: "flex flex-col",
|
|
9
|
+
boundaries: "pl-80",
|
|
10
|
+
className,
|
|
11
|
+
};
|
|
12
|
+
const body = {
|
|
13
|
+
displays: "flex flex-row gap-x-5",
|
|
14
|
+
sizes: "w-fit",
|
|
15
|
+
boundaries: "mt-7.5",
|
|
16
|
+
styles: "overflow-x-hidden",
|
|
17
|
+
};
|
|
18
|
+
const buttonBox = {
|
|
19
|
+
displays: "flex justify-between items-center",
|
|
20
|
+
sizes: "w-18 h-7.5",
|
|
21
|
+
boundaries: "mt-5 px-5",
|
|
22
|
+
backgrounds: gradient.bg.greenToRed,
|
|
23
|
+
styles: " rounded-full",
|
|
24
|
+
};
|
|
25
|
+
return (_jsxs("div", { className: cn(container), children: [_jsx("div", { className: "font-pretendard-bold text-green-dark text-3xl", children: "\uD504\uB85C\uBAA8\uC158" }), _jsx("div", { className: cn(body), children: banners.map((banner) => (_jsx(Banner, { ...banner }, banner.image.src))) }), _jsxs("div", { className: cn(buttonBox), children: [_jsx(SVG.Symbol.LessThan, { onClick: () => { } }), _jsx(SVG.Symbol.GreaterThan, { onClick: () => { } })] })] }));
|
|
26
|
+
}
|
|
27
|
+
function Banner({ image, options }) {
|
|
28
|
+
const { background, boundary } = options ?? {};
|
|
29
|
+
const container = {
|
|
30
|
+
positions: "relative",
|
|
31
|
+
sizes: "w-260 h-125",
|
|
32
|
+
backgrounds: background ?? "bg-white",
|
|
33
|
+
boundaries: boundary ?? "border-2 border-gray-light ",
|
|
34
|
+
styles: "rounded-xl overflow-hidden",
|
|
35
|
+
};
|
|
36
|
+
const imageBox = {
|
|
37
|
+
positions: "absolute",
|
|
38
|
+
locations: image.location ?? "bottom-0 right-0",
|
|
39
|
+
};
|
|
40
|
+
return (_jsx("div", { className: cn(container), children: _jsx("img", { src: image.src, alt: "banner-promotion", className: cn(imageBox) }) }));
|
|
41
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Titles } from "../../../interface";
|
|
2
|
+
export default function Service({ banners }: {
|
|
3
|
+
banners: BannerProps[];
|
|
4
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
interface BannerProps {
|
|
6
|
+
titles: Titles;
|
|
7
|
+
image?: {
|
|
8
|
+
src: string;
|
|
9
|
+
location?: string;
|
|
10
|
+
isBlur?: boolean;
|
|
11
|
+
};
|
|
12
|
+
options?: {
|
|
13
|
+
background?: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import SVG from "../../../asset/SVG";
|
|
3
|
+
import { cn, gradient } from "../../../util";
|
|
4
|
+
export default function Service({ banners }) {
|
|
5
|
+
const container = {
|
|
6
|
+
positions: "relative",
|
|
7
|
+
displays: "flex flex-col",
|
|
8
|
+
boundaries: "pl-80",
|
|
9
|
+
};
|
|
10
|
+
const body = {
|
|
11
|
+
displays: "flex flex-row gap-x-5",
|
|
12
|
+
sizes: "w-fit",
|
|
13
|
+
boundaries: "mt-7.5",
|
|
14
|
+
styles: "overflow-x-hidden",
|
|
15
|
+
};
|
|
16
|
+
const buttonBox = {
|
|
17
|
+
displays: "flex justify-between items-center",
|
|
18
|
+
sizes: "w-18 h-7.5",
|
|
19
|
+
boundaries: "mt-5 px-5",
|
|
20
|
+
backgrounds: gradient.bg.greenToRed,
|
|
21
|
+
styles: " rounded-full",
|
|
22
|
+
};
|
|
23
|
+
return (_jsxs("div", { className: cn(container), children: [_jsx("div", { className: "font-pretendard-bold text-green-dark text-3xl", children: "\uD1A0\uC140\uC758 \uCC28\uBCC4\uD654\uB41C \uC11C\uBE44\uC2A4" }), _jsx("div", { className: cn(body), children: banners.map((banner) => (_jsx(Banner, { ...banner }, banner.titles.title))) }), _jsxs("div", { className: cn(buttonBox), children: [_jsx(SVG.Symbol.LessThan, { onClick: () => { } }), _jsx(SVG.Symbol.GreaterThan, { onClick: () => { } })] })] }));
|
|
24
|
+
}
|
|
25
|
+
function Banner({ titles, image, options }) {
|
|
26
|
+
const { background } = options ?? {};
|
|
27
|
+
const container = {
|
|
28
|
+
positions: "relative",
|
|
29
|
+
displays: "flex flex-col",
|
|
30
|
+
sizes: "w-93 h-125",
|
|
31
|
+
backgrounds: background ?? "bg-gray-light",
|
|
32
|
+
styles: "rounded-md overflow-hidden",
|
|
33
|
+
};
|
|
34
|
+
const titleBox = {
|
|
35
|
+
container: {
|
|
36
|
+
positions: "relative z-10",
|
|
37
|
+
paddings: "pt-12 pl-12",
|
|
38
|
+
},
|
|
39
|
+
title: {
|
|
40
|
+
fonts: "text-2xl font-pretendard-bold",
|
|
41
|
+
colors: titles.titleColor ?? "text-gray-dark ",
|
|
42
|
+
},
|
|
43
|
+
subtitle: {
|
|
44
|
+
fonts: "text-lg font-pretendard-bold ",
|
|
45
|
+
colors: titles.subtitleColor ?? "text-gray-medium",
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
const imageBox = {
|
|
49
|
+
positions: "absolute z-0",
|
|
50
|
+
locations: image?.location ?? "bottom-0 right-0",
|
|
51
|
+
};
|
|
52
|
+
return (_jsxs("div", { className: cn(container), children: [_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 })] }), image && _jsx("img", { src: image?.src, alt: "banner", className: cn(imageBox) }), image?.isBlur && (_jsx("div", { className: "absolute bg-gradient-to-br from-white to-transparent z-0 w-full h-full" }))] }));
|
|
53
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../../util";
|
|
3
|
+
export default function ShortcutBanner({ shortcuts, }) {
|
|
4
|
+
const container = {
|
|
5
|
+
displays: "flex gap-x-10 justify-center items-center",
|
|
6
|
+
sizes: "w-full h-57.5",
|
|
7
|
+
};
|
|
8
|
+
const tagBox = {
|
|
9
|
+
displays: "flex justify-center items-center",
|
|
10
|
+
sizes: "w-16 h-6.25 ",
|
|
11
|
+
fonts: "text-xs font-pretendard-bold",
|
|
12
|
+
styles: "bg-gray-light rounded-md",
|
|
13
|
+
};
|
|
14
|
+
return (_jsx("div", { className: cn(container), children: shortcuts.map((shortcut) => (_jsxs("button", { onClick: shortcut.onClick, className: "flex flex-col gap-y-3.75", children: [_jsx("img", { src: shortcut.icon, alt: "shortcut-icon", width: 64, height: 64 }), _jsx("div", { className: cn(tagBox), children: shortcut.title })] }, shortcut.title))) }));
|
|
15
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import Layout from "./layout";
|
|
2
|
+
import Carousel from "./layout/Carousel";
|
|
3
|
+
import Navigation from "./Navigation";
|
|
4
|
+
import Notice from "./Notice";
|
|
5
|
+
import Promotion from "./Promotion";
|
|
6
|
+
import Service from "./Service";
|
|
7
|
+
import Shortcut from "./Shortcut";
|
|
8
|
+
declare const Home: {
|
|
9
|
+
Layout: typeof Layout;
|
|
10
|
+
Navigation: typeof Navigation;
|
|
11
|
+
Carousel: typeof Carousel;
|
|
12
|
+
Notice: typeof Notice;
|
|
13
|
+
Shortcut: typeof Shortcut;
|
|
14
|
+
Service: typeof Service;
|
|
15
|
+
Promotion: typeof Promotion;
|
|
16
|
+
};
|
|
17
|
+
export default Home;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import Layout from "./layout";
|
|
2
|
+
import Carousel from "./layout/Carousel";
|
|
3
|
+
import Navigation from "./Navigation";
|
|
4
|
+
import Notice from "./Notice";
|
|
5
|
+
import Promotion from "./Promotion";
|
|
6
|
+
import Service from "./Service";
|
|
7
|
+
import Shortcut from "./Shortcut";
|
|
8
|
+
const Home = {
|
|
9
|
+
Layout,
|
|
10
|
+
Navigation,
|
|
11
|
+
Carousel,
|
|
12
|
+
Notice,
|
|
13
|
+
Shortcut,
|
|
14
|
+
Service,
|
|
15
|
+
Promotion,
|
|
16
|
+
};
|
|
17
|
+
export default Home;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { cn } from "../../../../util";
|
|
4
|
+
import { useEase } from "../../../../hook";
|
|
5
|
+
import { LineBreaks } from "../../../../text";
|
|
6
|
+
import SVG from "../../../../asset/SVG";
|
|
7
|
+
import { TagStyles } from "../../../../interface/domain";
|
|
8
|
+
export default function Carousel({ contents, }) {
|
|
9
|
+
const [index, setIndex] = useState(0);
|
|
10
|
+
const [flag, inTime] = useEase(10000, 1000);
|
|
11
|
+
// useEffect(() => {
|
|
12
|
+
// if (flag) {
|
|
13
|
+
// setIndex((index + 1) % contents.length);
|
|
14
|
+
// }
|
|
15
|
+
// }, [flag]);
|
|
16
|
+
const { tag, titles, image, options } = contents[index];
|
|
17
|
+
const { text, background } = options ?? {};
|
|
18
|
+
const container = {
|
|
19
|
+
displays: "flex justify-center items-center",
|
|
20
|
+
sizes: "w-full h-100",
|
|
21
|
+
background,
|
|
22
|
+
};
|
|
23
|
+
const body = {
|
|
24
|
+
positions: "relative",
|
|
25
|
+
displays: "flex items-center",
|
|
26
|
+
sizes: "w-full max-w-256 h-full",
|
|
27
|
+
text: text ?? "text-gray-dark",
|
|
28
|
+
};
|
|
29
|
+
const tagBox = {
|
|
30
|
+
displays: "flex justify-center items-center",
|
|
31
|
+
sizes: "w-20 h-8",
|
|
32
|
+
background: TagStyles[tag].background,
|
|
33
|
+
fonts: "text-white font-pretendard-bold text-lg leading-none",
|
|
34
|
+
styles: "rounded-md",
|
|
35
|
+
};
|
|
36
|
+
const buttonBox = {
|
|
37
|
+
positions: "absolute bottom-0 left-0",
|
|
38
|
+
displays: "flex justify-between items-center",
|
|
39
|
+
sizes: "w-23.25 h-6.25 bg-gray-dark rounded-full",
|
|
40
|
+
paddings: "px-1.5",
|
|
41
|
+
};
|
|
42
|
+
return (_jsx("div", { className: cn(container), children: _jsxs("div", { className: cn(body), children: [_jsxs("div", { className: "relative w-64 h-50 flex flex-col", children: [_jsx("div", { className: cn(tagBox), children: TagStyles[tag].title }), _jsx("div", { className: "font-pretendard-bold text-2xl mt-2", children: titles.title }), _jsx(LineBreaks, { className: "mt-7.5", texts: titles.subtitle }), _jsxs("div", { className: cn(buttonBox), children: [_jsx("button", { onClick: () => setIndex((index - 1 + contents.length) % contents.length), className: "w-5 h-5 flex justify-center items-center", children: _jsx(SVG.Symbol.LessThan, {}) }), _jsxs("div", { className: "text-white", children: [index + 1, "/", contents.length] }), _jsx("button", { onClick: () => setIndex((index + 1) % contents.length), className: "w-5 h-5 flex justify-center items-center", children: _jsx(SVG.Symbol.GreaterThan, {}) })] })] }), image && (_jsx("img", { src: image, alt: "carousel-image", className: "absolute bottom-0 right-0" }))] }) }));
|
|
43
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function Footer(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../../../util";
|
|
3
|
+
export default function Footer() {
|
|
4
|
+
const container = {
|
|
5
|
+
displays: "flex justify-center items-center",
|
|
6
|
+
sizes: "w-full h-114",
|
|
7
|
+
backgrounds: "bg-gray-light",
|
|
8
|
+
styles: "text-gray-dark",
|
|
9
|
+
};
|
|
10
|
+
const body = {
|
|
11
|
+
sizes: "w-full max-w-290",
|
|
12
|
+
paddings: "py-8.5 px-7.5",
|
|
13
|
+
};
|
|
14
|
+
return (_jsx("div", { className: cn(container), children: _jsxs("div", { className: cn(body), children: [_jsxs("div", { className: "flex items-center gap-9.5", children: [_jsx("img", { src: "/images/logos/tosel.png", width: 147, height: 31.93 }), _jsx("img", { src: "/images/logos/itc-script.png", width: 122, height: 51 })] }), _jsxs("div", { className: "flex justify-between items-center border-b-1 border-gray-dark pb-4 mt-11.5", 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: "flex flex-col mt-4", children: [_jsx("div", { children: "\uC11C\uC6B8\uC2DC \uC131\uBD81\uAD6C \uC548\uC554\uB85C 145 \uACE0\uB824\uB300\uD559\uAD50 \uB77C\uC774\uC2DC\uC6C0 4\uCE35" }), _jsx("div", { children: "Lyceum Korea University, 145 Anam Ro, Seongbuk-Gu, Seoul, Korea 02841" })] })] }) }));
|
|
15
|
+
}
|
|
16
|
+
const buttons = [
|
|
17
|
+
{
|
|
18
|
+
title: "이용약관",
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
title: "개인정보 처리방침",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
title: "FAQ",
|
|
25
|
+
},
|
|
26
|
+
];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function Header(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../../../util";
|
|
3
|
+
export default function Header() {
|
|
4
|
+
const container = {
|
|
5
|
+
displays: "flex justify-center items-center",
|
|
6
|
+
sizes: "w-full",
|
|
7
|
+
styles: "bg-white box-shadow",
|
|
8
|
+
};
|
|
9
|
+
const body = {
|
|
10
|
+
displays: "flex items-center justify-between",
|
|
11
|
+
className: "w-full max-w-262 h-25",
|
|
12
|
+
};
|
|
13
|
+
return (_jsx("div", { className: cn(container), children: _jsxs("div", { className: cn(body), children: [_jsx("img", { src: "/images/logos/tosel.png", alt: "tosel-logo", width: 147, height: 31.93 }), _jsx("div", { className: "flex items-center gap-7.5", children: buttons.map((button, index) => (_jsx("div", { children: button.title }, index))) })] }) }));
|
|
14
|
+
}
|
|
15
|
+
const buttons = [
|
|
16
|
+
{
|
|
17
|
+
title: "About Us",
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
title: "정기시험",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
title: "교재/학습",
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
title: "LAB",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
title: "올림피아드",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
title: "게시판",
|
|
33
|
+
},
|
|
34
|
+
];
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../../../util";
|
|
3
|
+
import Footer from "./Footer";
|
|
4
|
+
import Header from "./Header";
|
|
5
|
+
export default function Layout({ children }) {
|
|
6
|
+
const container = {
|
|
7
|
+
displays: "flex flex-col",
|
|
8
|
+
sizes: "w-full min-h-screen",
|
|
9
|
+
overflows: "overflow-x-hidden",
|
|
10
|
+
};
|
|
11
|
+
return (_jsxs("div", { className: cn(container), children: [_jsx(Header, {}), children, _jsx(Footer, {})] }));
|
|
12
|
+
}
|