@edu-tosel/design 1.0.207 → 1.0.210
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/asset/url.d.ts +5 -0
- package/asset/url.js +7 -0
- package/asset/url.ts +10 -0
- package/interaction/template/ErrorPage.js +2 -1
- package/layout/template/Event/One.js +1 -1
- package/layout/template/Legacy/Integrate.js +2 -1
- package/layout/template/Legacy/Table.js +2 -2
- package/layout/template/Regexam/Banner.js +2 -1
- package/layout/template/Regexam/OfflineExam.js +2 -1
- package/layout/template/Regexam/Types.js +7 -7
- package/layout/template/Transcript/design/Transcript.js +4 -4
- package/layout/template/Transcript/design/TranscriptAdvanced.design.js +9 -2
- package/layout/template/Transcript/design/atom/CardTitle.js +1 -1
- package/layout/template/Transcript/design/molecule/BarGraphDuo.d.ts +7 -0
- package/layout/template/Transcript/design/molecule/BarGraphDuo.js +6 -0
- package/layout/template/Transcript/design/molecule/LSWRChart.d.ts +11 -0
- package/layout/template/Transcript/design/molecule/LSWRChart.js +43 -0
- package/layout/template/Transcript/design/molecule/OCIChart.d.ts +1 -0
- package/layout/template/Transcript/design/molecule/OCIChart.js +60 -0
- package/layout/template/Transcript/design/molecule/RadarGraph.d.ts +10 -0
- package/layout/template/Transcript/design/molecule/RadarGraph.js +5 -0
- package/layout/template/Transcript/design/organism/BarCardCol.js +3 -3
- package/layout/template/Transcript/design/organism/OCICard.d.ts +4 -0
- package/layout/template/Transcript/design/organism/OCICard.js +17 -0
- package/layout/template/Transcript/design/organism/RadarCard.d.ts +7 -0
- package/layout/template/Transcript/design/organism/RadarCard.js +54 -0
- package/layout/template/Transcript/interface.d.ts +17 -0
- package/layout/template/home/layout/Footer.js +2 -1
- package/package.json +2 -1
- package/tailwind.config.ts +5 -0
- package/version.txt +1 -1
package/asset/url.d.ts
ADDED
package/asset/url.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const homepage = (pathname) => ["https://new.tosel.org", pathname].filter((v) => v).join("");
|
|
2
|
+
const resource = (pathname) => ["https://resource.tosel.co.kr", pathname].filter((v) => v).join("");
|
|
3
|
+
const urlAsset = {
|
|
4
|
+
homepage,
|
|
5
|
+
resource,
|
|
6
|
+
};
|
|
7
|
+
export default urlAsset;
|
package/asset/url.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const homepage = (pathname?: string) =>
|
|
2
|
+
["https://new.tosel.org", pathname].filter((v) => v).join("");
|
|
3
|
+
const resource = (pathname?: string) =>
|
|
4
|
+
["https://resource.tosel.co.kr", pathname].filter((v) => v).join("");
|
|
5
|
+
|
|
6
|
+
const urlAsset = {
|
|
7
|
+
homepage,
|
|
8
|
+
resource,
|
|
9
|
+
};
|
|
10
|
+
export default urlAsset;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import urlAsset from "../../asset/url";
|
|
2
3
|
import { LineBreaks } from "../../text";
|
|
3
4
|
export default function ErrorPage({ message, statusCode, button, }) {
|
|
4
|
-
return (_jsx("div", { className: "flex justify-center items-center w-full h-screen", children: _jsxs("div", { className: "flex flex-col justify-center items-center", children: [_jsx("div", { className: "w-full h-fit flex justify-center items-center mb-5 text-green-dark", children: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", "stroke-width": "1.5", stroke: "currentColor", className: "md:size-10 size-6", children: _jsx("path", { "stroke-linecap": "round", "stroke-linejoin": "round", d: "M12 9v3.75m9-.75a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 3.75h.008v.008H12v-.008Z" }) }) }), _jsx(LineBreaks, { texts: message, className: "w-full text-center text-sm md:text-base font-medium text-gray-dark" }), _jsxs("div", { className: "relative flex justify-center items-center md:size-80 size-40", children: [_jsx("div", { className: "absolute flex justify-center items-center left-0 top-0 w-full h-full overflow-visible", children: _jsx("div", { className: "font-medium md:text-[200px] text-[100px] text-green-dark", children: statusCode }) }), _jsx("div", { className: "absolute flex justify-center items-center left-0 top-0 w-full h-full overflow-visible", children: _jsx("img", { src: "
|
|
5
|
+
return (_jsx("div", { className: "flex justify-center items-center w-full h-screen", children: _jsxs("div", { className: "flex flex-col justify-center items-center", children: [_jsx("div", { className: "w-full h-fit flex justify-center items-center mb-5 text-green-dark", children: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", "stroke-width": "1.5", stroke: "currentColor", className: "md:size-10 size-6", children: _jsx("path", { "stroke-linecap": "round", "stroke-linejoin": "round", d: "M12 9v3.75m9-.75a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 3.75h.008v.008H12v-.008Z" }) }) }), _jsx(LineBreaks, { texts: message, className: "w-full text-center text-sm md:text-base font-medium text-gray-dark" }), _jsxs("div", { className: "relative flex justify-center items-center md:size-80 size-40", children: [_jsx("div", { className: "absolute flex justify-center items-center left-0 top-0 w-full h-full overflow-visible", children: _jsx("div", { className: "font-medium md:text-[200px] text-[100px] text-green-dark", children: statusCode }) }), _jsx("div", { className: "absolute flex justify-center items-center left-0 top-0 w-full h-full overflow-visible", children: _jsx("img", { src: urlAsset.resource("/images/img-character-cocoon-main-new.png"), alt: "", className: "size-40 md:size-80 z-10 hover:scale-105 duration-300" }) })] }), _jsx("div", { className: "w-full text-center text-base font-medium text-gray-dark", children: _jsx("button", { onClick: () => button?.onClick ? button.onClick() : window.history.back(), className: "font-medium text-green-dark w-fit h-fit bg-green-light px-4 py-3 rounded-lg hover:shadow-green duration-300 text-sm hover:bg-white", children: button?.title ?? "이전 페이지로 돌아가기" }) })] }) }));
|
|
5
6
|
}
|
|
@@ -48,5 +48,5 @@ export default function One({ event }) {
|
|
|
48
48
|
: event.button?.title;
|
|
49
49
|
return (_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: event.thumbnail, alt: event.title, 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: _jsx(StatusText, { event: event }) }), _jsx("div", { className: "text-sm font-bold text-gray-dark flex flex-col items-start mb-2", children: lines.map((line, index) => (_jsxs("span", { children: [line, _jsx("br", {})] }, index))) }), event.button && (_jsx("div", { className: cn(button), onClick: () => {
|
|
50
50
|
event.button?.onClick && event.button.onClick();
|
|
51
|
-
}, children: buttonText }))] })] }, event.id) }), _jsxs("div", { className: "flex-grow p-5", children: [_jsx("div", { children: isHTMLString(event.content) ? (_jsx("div", { dangerouslySetInnerHTML: { __html: event.content }
|
|
51
|
+
}, children: buttonText }))] })] }, event.id) }), _jsxs("div", { className: "flex-grow p-5", children: [_jsx("div", { className: "w-full rounded-xl object-cover overflow-hidden max-w-[810px]", children: isHTMLString(event.content) ? (_jsx("div", { dangerouslySetInnerHTML: { __html: event.content } })) : (_jsx("div", { children: event.content })) }), _jsx("button", { onClick: () => history.back(), className: "mt-8 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" })] })] }));
|
|
52
52
|
}
|
|
@@ -4,6 +4,7 @@ import { Input, Label } from "../../../widget";
|
|
|
4
4
|
import Action from "../Action";
|
|
5
5
|
import { Loading } from "../../../interaction";
|
|
6
6
|
import { LineBreaks } from "../../../text";
|
|
7
|
+
import urlAsset from "../../../asset/url";
|
|
7
8
|
export default function Integrate({ isLoading, isUser, usernameState: [oldUsername, setUsername], passwordState: [oldPassword, setPassword], submit, }) {
|
|
8
9
|
const container = {
|
|
9
10
|
displays: "flex justify-center items-center",
|
|
@@ -36,5 +37,5 @@ export default function Integrate({ isLoading, isUser, usernameState: [oldUserna
|
|
|
36
37
|
height: "md",
|
|
37
38
|
text: "text-white",
|
|
38
39
|
background: "bg-crimson-burgundy",
|
|
39
|
-
} })] }), _jsx("button", { onClick: () => (window.location.href = "
|
|
40
|
+
} })] }), _jsx("button", { onClick: () => (window.location.href = urlAsset.homepage("/legacy")), className: "flex justify-end text-xs sm:text-sm text-gray-medium mt-3", children: "\uC5F0\uB3D9\uC774 \uC774\uBBF8 \uC644\uB8CC\uB418\uC5C8\uB098\uC694? \uBC14\uB85C \uC131\uC801\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694! (\uD074\uB9AD)" })] }) }) }));
|
|
40
41
|
}
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { cn } from "../../../util";
|
|
3
3
|
import Action from "../Action";
|
|
4
4
|
import { useState } from "react";
|
|
5
|
+
import urlAsset from "../../../asset/url";
|
|
5
6
|
export default function Table({ exams }) {
|
|
6
7
|
const container = {
|
|
7
8
|
displays: "flex flex-col lg:flex-row gap-x-16",
|
|
@@ -100,8 +101,7 @@ export default function Table({ exams }) {
|
|
|
100
101
|
};
|
|
101
102
|
return (_jsxs("div", { className: cn(container), children: [_jsxs("div", { className: cn(inputBoxWrapperWeb), children: [_jsxs("div", { className: cn(titleWrapperWeb), children: [_jsx("div", { className: cn(mainTitle), children: "\uC774\uC804 \uC131\uC801 \uC870\uD68C\uD558\uAE30" }), _jsx("div", { className: cn(subTitle), children: "85\uD68C \uC774\uC804\uC758 \uC131\uC801\uC744 \uC870\uD68C\uD569\uB2C8\uB2E4." })] }), _jsx("input", { type: "text", className: cn(inputBox), onChange: (e) => {
|
|
102
103
|
setFilterKey(e.target.value);
|
|
103
|
-
}, placeholder: "\uC2DC\uD5D8 \uC774\uB984\uC744 \uC785\uB825\uD574\uC8FC\uC138\uC694" }), _jsxs("div", { className: cn(buttonSetWrapper), children: [_jsx("div", { className: "text-xs text-green-dark", children: "\uB2E4\uB978 \uC11C\uBE44\uC2A4\uB97C \uC774\uC6A9\uD558\uACE0 \uC2F6\uB098\uC694?" }), _jsxs("div", { className: cn(buttonSet), children: [_jsx("div", { className: cn(linkButton), onClick: () => (window.location.href = "
|
|
104
|
-
"https://new.tosel.org/legacy/integrate"), children: "\uC5F0\uB3D9 \uACC4\uC815 \uCD94\uAC00\uD558\uAE30" }), _jsx("div", { className: cn(linkButton), onClick: () => (window.location.href = "https://tosel.org/HallofFame/main"), children: "\uBA85\uC608\uC758 \uC804\uB2F9" })] })] })] }), _jsxs("div", { className: cn(cardDeckWrapper), children: [_jsx("div", { className: cn(scrollWrapper), children: _jsxs("div", { className: cn(examsWrapper), children: [_jsxs("div", { className: cn(titleWrapperMobile), children: [_jsx("div", { className: cn(mainTitle), children: "\uC774\uC804 \uC131\uC801 \uC870\uD68C\uD558\uAE30" }), _jsx("div", { className: cn(subTitle), children: "85\uD68C \uC774\uC804\uC758 \uC131\uC801\uC744 \uC870\uD68C\uD569\uB2C8\uB2E4." })] }), _jsxs(Action.Replace, { actions: [
|
|
104
|
+
}, placeholder: "\uC2DC\uD5D8 \uC774\uB984\uC744 \uC785\uB825\uD574\uC8FC\uC138\uC694" }), _jsxs("div", { className: cn(buttonSetWrapper), children: [_jsx("div", { className: "text-xs text-green-dark", children: "\uB2E4\uB978 \uC11C\uBE44\uC2A4\uB97C \uC774\uC6A9\uD558\uACE0 \uC2F6\uB098\uC694?" }), _jsxs("div", { className: cn(buttonSet), children: [_jsx("div", { className: cn(linkButton), onClick: () => (window.location.href = urlAsset.homepage()), children: "\uD648\uC73C\uB85C" }), _jsx("div", { className: cn(linkButton), onClick: () => (window.location.href = urlAsset.homepage("/legacy/integrate")), children: "\uC5F0\uB3D9 \uACC4\uC815 \uCD94\uAC00\uD558\uAE30" }), _jsx("div", { className: cn(linkButton), onClick: () => (window.location.href = "https://tosel.org/HallofFame/main"), children: "\uBA85\uC608\uC758 \uC804\uB2F9" })] })] })] }), _jsxs("div", { className: cn(cardDeckWrapper), children: [_jsx("div", { className: cn(scrollWrapper), children: _jsxs("div", { className: cn(examsWrapper), children: [_jsxs("div", { className: cn(titleWrapperMobile), children: [_jsx("div", { className: cn(mainTitle), children: "\uC774\uC804 \uC131\uC801 \uC870\uD68C\uD558\uAE30" }), _jsx("div", { className: cn(subTitle), children: "85\uD68C \uC774\uC804\uC758 \uC131\uC801\uC744 \uC870\uD68C\uD569\uB2C8\uB2E4." })] }), _jsxs(Action.Replace, { actions: [
|
|
105
105
|
[
|
|
106
106
|
filteredExam.length === 0,
|
|
107
107
|
_jsxs("div", { className: cn(noResultWrapper), children: [_jsx("div", { className: cn(noResultImg), children: _jsx("img", { src: "/images/legacy/img-legacy-noresult.png", alt: "\uACB0\uACFC \uC5C6\uC74C" }) }), _jsx("div", { className: "text-sm text-center w-full font-medium", children: "\uC774\uB7F0, \uAC80\uC0C9\uACB0\uACFC\uAC00 \uC5C6\uC5B4\uC694" })] }),
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "../../../util";
|
|
3
3
|
import { useState, useEffect } from "react";
|
|
4
|
+
import urlAsset from "../../../asset/url";
|
|
4
5
|
export default function Banner() {
|
|
5
6
|
const [isHidden, setIsHidden] = useState(false);
|
|
6
7
|
useEffect(() => {
|
|
@@ -84,7 +85,7 @@ export default function Banner() {
|
|
|
84
85
|
backgrounds: "bg-white group hover:bg-green-dark",
|
|
85
86
|
other: "animate-bounce bg-white p-1 w-10 h-10 ring-1 ring-slate-900/5 shadow-lg rounded-full flex items-center justify-center",
|
|
86
87
|
};
|
|
87
|
-
return (_jsxs("div", { className: cn(container), children: [_jsxs("div", { className: "flex flex-col md:flex-row w-full max-w-6xl justify-between items-center", children: [_jsxs("div", { className: "flex flex-col w-full md:w-fit h-full shrink-0 justify-start", children: [_jsx("div", { className: cn(brandTextSub), children: "about" }), _jsx("div", { className: cn(brandTextCore), children: _jsx("img", { src: "/images/logos/logo-tosel-main.svg", alt: "", className: "h-full" }) }), _jsxs("div", { className: cn(explainer), children: ["15,000\uC5EC\uAC1C\uC758 \uD559\uAD50\uC640 \uD559\uC6D0\uC774 \uC120\uD0DD\uD55C ", _jsx("br", {}), "\uB300\uD55C\uBBFC\uAD6D \uB300\uD45C \uC601\uC5B4 \uC778\uC99D\uC2DC\uD5D8"] }), _jsxs("div", { onClick: () => (window.location.href =
|
|
88
|
+
return (_jsxs("div", { className: cn(container), children: [_jsxs("div", { className: "flex flex-col md:flex-row w-full max-w-6xl justify-between items-center", children: [_jsxs("div", { className: "flex flex-col w-full md:w-fit h-full shrink-0 justify-start", children: [_jsx("div", { className: cn(brandTextSub), children: "about" }), _jsx("div", { className: cn(brandTextCore), children: _jsx("img", { src: "/images/logos/logo-tosel-main.svg", alt: "", className: "h-full" }) }), _jsxs("div", { className: cn(explainer), children: ["15,000\uC5EC\uAC1C\uC758 \uD559\uAD50\uC640 \uD559\uC6D0\uC774 \uC120\uD0DD\uD55C ", _jsx("br", {}), "\uB300\uD55C\uBBFC\uAD6D \uB300\uD45C \uC601\uC5B4 \uC778\uC99D\uC2DC\uD5D8"] }), _jsxs("div", { onClick: () => (window.location.href = urlAsset.homepage("/dashboard")), className: cn(AdvertButton), children: [_jsx("div", { className: cn(buttonBackground1) }), _jsx("div", { className: cn(buttonBackground2) }), _jsx("div", { className: cn(buttonText), children: "\uC9C0\uAE08 \uC811\uC218\uD558\uAE30" })] })] }), _jsx("div", { className: cn(carouselWrapper), children: _jsx(InfiniteCarousel, {}) })] }), _jsxs("div", { className: cn(scrollGuideWrapper), children: [_jsx("div", { className: cn(scrollGuideText), children: "\uC790\uC138\uD55C \uB0B4\uC6A9\uC744 \uBCF4\uB824\uBA74 \uC544\uB798\uB85C \uC2A4\uD06C\uB864 \uD574\uBCF4\uC138\uC694" }), _jsx("div", { className: cn(scrollGuideButton), onClick: handleScroll, children: _jsx("svg", { className: "w-6 h-6 text-green-dark group-hover:text-white", fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round", "stroke-width": "2", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { d: "M19 14l-7 7m0 0l-7-7m7 7V3" }) }) })] })] }));
|
|
88
89
|
}
|
|
89
90
|
const InfiniteCarousel = () => {
|
|
90
91
|
const slides = [
|
|
@@ -4,6 +4,7 @@ import { gsap } from "gsap";
|
|
|
4
4
|
import { ScrollTrigger } from "gsap/ScrollTrigger";
|
|
5
5
|
import { cn } from "../../../util";
|
|
6
6
|
import { useResponsive } from "../../../hook";
|
|
7
|
+
import urlAsset from "../../../asset/url";
|
|
7
8
|
gsap.registerPlugin(ScrollTrigger);
|
|
8
9
|
export default function OfflineExam() {
|
|
9
10
|
const isMD = useResponsive("md");
|
|
@@ -95,7 +96,7 @@ export default function OfflineExam() {
|
|
|
95
96
|
sizes: "w-full h-0.5 mt-1",
|
|
96
97
|
colors: "bg-gradient-to-r from-crimson-burgundy to-green-dark flex-shrink-0",
|
|
97
98
|
};
|
|
98
|
-
return (_jsx("div", { className: cn(container), children: _jsxs("div", { className: cn(mainWrapper), children: [_jsxs("div", { className: cn(titleWrapper), ref: scrollWrapperRef, children: [_jsx("div", { className: cn(sectionTitle), children: "\uC815\uAE30\uC2DC\uD5D8 \uC548\uB0B4" }), _jsx("div", { className: cn(sectionSubTitle), children: "\uC5F0 4\uD68C, \uC624\uD504\uB77C\uC778\uC73C\uB85C \uAC1C\uCD5C\uB418\uB294 \uD1A0\uC140 \uC815\uAE30\uC2DC\uD5D8\uC785\uB2C8\uB2E4." }), isMD && (_jsxs("div", { onClick: () => (window.location.href =
|
|
99
|
+
return (_jsx("div", { className: cn(container), children: _jsxs("div", { className: cn(mainWrapper), children: [_jsxs("div", { className: cn(titleWrapper), ref: scrollWrapperRef, children: [_jsx("div", { className: cn(sectionTitle), children: "\uC815\uAE30\uC2DC\uD5D8 \uC548\uB0B4" }), _jsx("div", { className: cn(sectionSubTitle), children: "\uC5F0 4\uD68C, \uC624\uD504\uB77C\uC778\uC73C\uB85C \uAC1C\uCD5C\uB418\uB294 \uD1A0\uC140 \uC815\uAE30\uC2DC\uD5D8\uC785\uB2C8\uB2E4." }), isMD && (_jsxs("div", { onClick: () => (window.location.href = urlAsset.homepage("/dashboard")), className: cn(AdvertButton), children: [_jsx("div", { className: cn(buttonBackground1) }), _jsx("div", { className: cn(buttonBackground2) }), _jsx("div", { className: cn(buttonText), children: "\uC9C0\uAE08 \uC811\uC218\uD558\uAE30" })] }))] }), _jsxs("div", { className: cn(scrollWrapper), children: [_jsxs("div", { className: cn(miniBox), children: [_jsx("div", { className: cn(miniTitle), children: "\uC2DC\uD5D8\uAD6C\uC131" }), _jsx("div", { className: cn(miniDivider) }), _jsx("div", { className: "h-full w-full mt-5", children: _jsx(TableComponent, {}) })] }), _jsxs("div", { className: cn(miniBox), children: [_jsx("div", { className: cn(miniTitle), children: "\uC5F0\uAC04 \uC2DC\uD5D8 \uC77C\uC815" }), _jsx("div", { className: cn(miniDivider) }), _jsx("div", { className: "h-full w-full mt-5", children: _jsx(AnnualTableComponent, {}) })] }), _jsxs("div", { className: cn(miniBox), children: [_jsx("div", { className: cn(miniTitle), children: "\uB2F9\uC77C \uC138\uBD80\uC77C\uC815" }), _jsx("div", { className: cn(miniDivider) }), _jsx("div", { className: "h-full w-full mt-5", children: _jsx(TimeTableComponent, {}) }), _jsxs("div", { className: "flex flex-col mt-4", children: [_jsx("div", { className: "text-gray-medium font-medium text-sm", children: "*\uACE0\uC0AC\uC7A5 \uB0B4\uBD80\uC5D0\uB294 \uD559\uBD80\uBAA8\uC758 \uCD9C\uC785\uC774 \uC81C\uD55C\uB429\uB2C8\uB2E4." }), _jsx("div", { className: "text-gray-medium font-medium text-sm", children: "*\uC785\uC2E4\uB9C8\uAC10(13\uC2DC 10\uBD84)\uC2DC\uAC04\uC744 \uC900\uC218\uD574\uC8FC\uC2DC\uAE30 \uBC14\uB78D\uB2C8\uB2E4." })] })] })] }), !isMD && (_jsxs("div", { onClick: () => (window.location.href = urlAsset.homepage("/dashboard")), className: cn(AdvertButton), children: [_jsx("div", { className: cn(buttonBackground1) }), _jsx("div", { className: cn(buttonBackground2) }), _jsx("div", { className: cn(buttonText), children: "\uC9C0\uAE08 \uC811\uC218\uD558\uAE30" })] }))] }) }));
|
|
99
100
|
}
|
|
100
101
|
export function TableComponent() {
|
|
101
102
|
const data = [
|
|
@@ -5,6 +5,7 @@ import { useActionStore } from "../../../store";
|
|
|
5
5
|
import Action from "../Action";
|
|
6
6
|
import { ConfirmModal } from "../../../modal";
|
|
7
7
|
import { useResponsive, useVisibilityObserver } from "../../../hook";
|
|
8
|
+
import urlAsset from "../../../asset/url";
|
|
8
9
|
export default function Types() {
|
|
9
10
|
const scrollContainerRef = useRef(null);
|
|
10
11
|
const cardWidth = 400; // card width
|
|
@@ -78,9 +79,9 @@ const examStyles = {
|
|
|
78
79
|
isHallofFame: true,
|
|
79
80
|
report: "기본제공",
|
|
80
81
|
certificate: "3,900원",
|
|
81
|
-
link: "
|
|
82
|
+
link: urlAsset.homepage("/dashboard/user/applications"),
|
|
82
83
|
majorColor: "text-crimson-burgundy bg-crimson-burgundy",
|
|
83
|
-
imgSrc: "
|
|
84
|
+
imgSrc: urlAsset.resource("/images/img-buidling-official.png"),
|
|
84
85
|
buttonText: "개인 접수하기",
|
|
85
86
|
mainPrice: "33,000원",
|
|
86
87
|
subPrice: "39,000원",
|
|
@@ -106,7 +107,7 @@ const examStyles = {
|
|
|
106
107
|
isHallofFame: true,
|
|
107
108
|
report: "기본제공",
|
|
108
109
|
certificate: "기본제공",
|
|
109
|
-
link: "
|
|
110
|
+
link: urlAsset.homepage("/dashboard/academy/applications"),
|
|
110
111
|
majorColor: "text-green-dark bg-green-dark",
|
|
111
112
|
imgSrc: "https://resource.tosel.co.kr/images/img-buidling-official.png",
|
|
112
113
|
buttonText: "단체 접수하기",
|
|
@@ -134,9 +135,9 @@ const examStyles = {
|
|
|
134
135
|
isHallofFame: false,
|
|
135
136
|
report: "기본제공",
|
|
136
137
|
certificate: "미제공",
|
|
137
|
-
link: "
|
|
138
|
+
link: urlAsset.homepage("/events/28"),
|
|
138
139
|
majorColor: "text-green-dark bg-green-dark",
|
|
139
|
-
imgSrc: "
|
|
140
|
+
imgSrc: urlAsset.resource("/images/img-buidling-academy.png"),
|
|
140
141
|
buttonText: "기관시험 신청하기",
|
|
141
142
|
mainPrice: "33,000원",
|
|
142
143
|
subPrice: "39,000원",
|
|
@@ -260,8 +261,7 @@ const ExamCard = ({ id, type, name, place, isHallofFame, report, certificate, ma
|
|
|
260
261
|
{
|
|
261
262
|
title: "등록하기",
|
|
262
263
|
onClick: () => {
|
|
263
|
-
window.location.href =
|
|
264
|
-
"https://new.tosel.org/sign-up/academy";
|
|
264
|
+
window.location.href = urlAsset.homepage("/sign-up/academy");
|
|
265
265
|
},
|
|
266
266
|
option: {
|
|
267
267
|
text: "font-pretendard-var font-medium text-green-dark",
|
|
@@ -49,12 +49,12 @@ export const example = {
|
|
|
49
49
|
writingScript: { part5: "asd", part6: "qwe" },
|
|
50
50
|
},
|
|
51
51
|
oci: [
|
|
52
|
-
{ category: "Communicative Competency (CC)", average:
|
|
53
|
-
{ category: "Problem-Solving Competency (PS)", average:
|
|
52
|
+
{ category: "Communicative Competency (CC)", average: 25, result: 75 },
|
|
53
|
+
{ category: "Problem-Solving Competency (PS)", average: 35, result: 90 },
|
|
54
54
|
{
|
|
55
55
|
category: "Interpersonal/Social Competency (IS)",
|
|
56
|
-
average:
|
|
57
|
-
result:
|
|
56
|
+
average: 45,
|
|
57
|
+
result: 68,
|
|
58
58
|
},
|
|
59
59
|
],
|
|
60
60
|
};
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef } from "react";
|
|
3
3
|
import { paperSize } from "../../../../style/size";
|
|
4
4
|
import { cn } from "../../../../util";
|
|
5
5
|
import IdCard from "./organism/IdCard";
|
|
6
6
|
import { BarCardCol } from "./organism/BarCardCol";
|
|
7
|
+
import { RadarCard } from "./organism/RadarCard";
|
|
8
|
+
import { OCICard } from "./organism/OCICard";
|
|
9
|
+
import { OCIChart } from "./molecule/OCIChart";
|
|
7
10
|
function TranscriptDesign({ props }, ref) {
|
|
8
11
|
const { info, score, lswr, oci } = props;
|
|
9
12
|
const section1Score = score.result.part1 +
|
|
@@ -36,7 +39,11 @@ function TranscriptDesign({ props }, ref) {
|
|
|
36
39
|
spacings: "px-5 py-2",
|
|
37
40
|
backgrounds: "bg-gradient-to-r from-crimson-burgundy to-green-dark",
|
|
38
41
|
};
|
|
39
|
-
|
|
42
|
+
const RadarWrapper = {
|
|
43
|
+
displays: "flex flex-row gap-5",
|
|
44
|
+
siezs: "w-full h-fit",
|
|
45
|
+
};
|
|
46
|
+
return (_jsx(_Fragment, { children: _jsxs("div", { ref: ref, className: cn(container), children: [_jsxs("div", { className: cn(headerBox), children: [_jsx("img", { src: "https://resource.tosel.co.kr/images/header-logo2.png", alt: "\uD1A0\uC140 \uB85C\uACE0", className: "h-10 py-1" }), _jsx("div", { className: "text-white font-bold text-base", children: "Official Score Report" })] }), _jsx(IdCard, { info: info }), _jsx(BarCardCol, { section1: section1Data, section2: section2Data, theme: "red" }), _jsx(RadarCard, { data: lswr, theme: "red", title: "Section Scores" }), _jsxs("div", { className: cn("page-break"), children: [_jsx("div", { className: "w-full h-5 print:block" }), _jsxs("div", { className: cn(headerBox), children: [_jsx("img", { src: "https://resource.tosel.co.kr/images/header-logo2.png", alt: "\uD1A0\uC140 \uB85C\uACE0", className: "h-10 py-1" }), _jsx("div", { className: "text-white font-bold text-base", children: "Occupational Competency Index Report" })] }), _jsx(OCICard, { data: oci }), _jsx(OCIChart, {})] })] }) }));
|
|
40
47
|
}
|
|
41
48
|
function SectionBarGraphProps(title, score, total, script, subScripts, scale, subScore) {
|
|
42
49
|
return {
|
|
@@ -6,7 +6,7 @@ export default function CardTitle({ title, theme, }) {
|
|
|
6
6
|
sizes: "h-7 shrink-0 w-full",
|
|
7
7
|
theme: theme == "green"
|
|
8
8
|
? "text-green-dark bg-green-light"
|
|
9
|
-
: "text-crimson-burgundy
|
|
9
|
+
: "text-white bg-gradient-to-r from-crimson-burgundy to-green-dark",
|
|
10
10
|
textStyles: "font-medium text-sm",
|
|
11
11
|
};
|
|
12
12
|
return _jsx("div", { className: cn(cardTitle), children: title });
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function BarGraphDuo({ score, subScore, total }) {
|
|
3
|
+
const myWidthPercentage = (score / total) * 100;
|
|
4
|
+
const subWithPercentage = (subScore / total) * 100;
|
|
5
|
+
return (_jsxs("div", { className: "w-full h-fit flex flex-col gap-1 shrink-0 py-2 px-0 relative", children: [_jsx("div", { className: "h-fit text-[10px] bg-green-dark text-white text-start rounded-sm px-1", style: { width: `${myWidthPercentage}%` }, children: "My Score" }), _jsx("div", { className: "h-fit text-[10px] bg-crimson-burgundy text-white text-start px-1", style: { width: `${subWithPercentage}%` }, children: "Average" })] }));
|
|
6
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
const partDescription = [
|
|
3
|
+
{
|
|
4
|
+
number: 1,
|
|
5
|
+
description: "Evaluates the ability to listen to and comprehend short conversations.",
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
number: 2,
|
|
9
|
+
description: "Evaluates the ability to comprehend short conversations and select the most appropriate picture.",
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
number: 3,
|
|
13
|
+
description: "Evaluates the ability to understand short conversations and answer questions about them.",
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
number: 4,
|
|
17
|
+
description: "Evaluates the ability to understand short talks and infer the intended meanings by answering questions.",
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
number: 5,
|
|
21
|
+
description: "Evaluates the ability to recognize topics and implications in various reading materials and select the best answers to questions about them.",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
number: 6,
|
|
25
|
+
description: "Evaluates the ability to interpret sentence meanings and complete sentences using appropriate words, structure, and grammar.",
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
number: 7,
|
|
29
|
+
description: "Evaluates the ability to skim, analyze, and infer from practical reading materials and select the best answers to questions about them.",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
number: 8,
|
|
33
|
+
description: "Evaluates the ability to recognize topics and implications in various reading materials and select the best answers to questions about them.",
|
|
34
|
+
},
|
|
35
|
+
];
|
|
36
|
+
// const partDescriptionRecord = createRecord(partDescription, "number");
|
|
37
|
+
export function LSWRChart({ data }) {
|
|
38
|
+
return (_jsx("div", { className: "w-full h-full flex flex-col", children: data.map(({ partIndicies, subject, A, B }) => {
|
|
39
|
+
return (_jsxs("div", { className: "flex w-full h-full even:bg-white odd:bg-gray-light", children: [_jsx("div", { className: "p-2 font-bold bg-crimson-burgundy text-white w-10 shrink-0 text-center", children: subject }), _jsxs("div", { className: "w-16 shrink-0 flex flex-col justify-center items-center p-2 text-center leading-tight", children: [_jsxs("div", { className: "text-green-dark font-bold text-base", children: [A, "%"] }), _jsxs("div", { className: "text-crimson-burgundy font-medium text-xs leading-none", children: [B, "%"] })] }), _jsx("div", { className: "flex flex-col justify-center", children: partIndicies.map(() => {
|
|
40
|
+
return (_jsx("div", { className: "text-[10px] leading-tight p-1 ", children: _jsx("span", { className: "font-bold" }) }));
|
|
41
|
+
}) })] }));
|
|
42
|
+
}) }));
|
|
43
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function OCIChart(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../../../../util";
|
|
3
|
+
const ociDescription = [
|
|
4
|
+
{
|
|
5
|
+
name: "CC",
|
|
6
|
+
title: "Communicative Competency",
|
|
7
|
+
description: "The ability to communicate by understanding written and spoken texts through one's lexical knowledge, reading comprehension skills, and grammatical knowledge, as well as by comprehending topics, main points, and details in each text.",
|
|
8
|
+
profession: "Humanities and Social Sciences, Language Professions, Humanities Education, Writing",
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
name: "PS",
|
|
12
|
+
title: "Problem-Solving Competency",
|
|
13
|
+
description: "The ability to recognize a problem, propose and apply alternatives through creativity, logic, critical organization, classification, and synthesis of information, and to assess potential consequences.",
|
|
14
|
+
profession: "Accounting, IT, Legal, Social Activities",
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: "RM",
|
|
18
|
+
title: "Resource Management Competency",
|
|
19
|
+
description: "The ability to plan the use and allocation of resources in practical settings by identifying and gathering various resources, and by understanding and evaluating their relationships.",
|
|
20
|
+
profession: "Planning Services, Social Services, Educational Services",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: "IS",
|
|
24
|
+
title: "Interpersonal / Social Competency",
|
|
25
|
+
description: "The ability to discover shared interests with individuals from diverse backgrounds, to connect with and lead others, and to collaborate effectively.",
|
|
26
|
+
profession: "Management, Sales-related Services, Office Work, General Services",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: "IU",
|
|
30
|
+
title: "Information Utilization and Processing Competency",
|
|
31
|
+
description: "The ability to collect task-related information and to process it quickly and skillfully by performing cognitive tasks such as classifying or sorting information by type, characteristic, or size.",
|
|
32
|
+
profession: "Engineering, Video Technology, Web, Games, Animation",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: "OP",
|
|
36
|
+
title: "Organizational Performance Competency",
|
|
37
|
+
description: "The ability to understand and design organizational systems, and to think logically by applying deductive and inductive reasoning, classifying, identifying, and explaining information.",
|
|
38
|
+
profession: "Educational Services, Planning, Sales-related Services, Finance, and Management",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: "SS",
|
|
42
|
+
title: "Self-development and Self-regulation Competency",
|
|
43
|
+
description: "The ability to understand one's own characteristics, aptitudes, and interests, to acquire necessary qualifications through self-management, to self-motivate, and to foster positive learning experiences for ongoing personal development.",
|
|
44
|
+
profession: "Safety Professions, Medical Professions, Environmental Professions",
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
export function OCIChart() {
|
|
48
|
+
const cellHeader = {
|
|
49
|
+
textStyles: "text-center text-white text-sm font-medium",
|
|
50
|
+
displays: "flex justify-center items-center",
|
|
51
|
+
spacings: "p-2",
|
|
52
|
+
};
|
|
53
|
+
const cellNormal = {
|
|
54
|
+
textStyles: "text-gray-dark",
|
|
55
|
+
displays: "flex justify-center items-center",
|
|
56
|
+
};
|
|
57
|
+
return (_jsx("div", { className: cn("overflow-auto w-full scrollbar-hidden rounded-lg mt-5 print:border print:border-gray-medium/70 cursor-default shadow-main print:shadow-none"), children: _jsxs("div", { className: "min-w-[172mm] w-full", children: [_jsxs("div", { className: "flex flex-row bg-gradient-to-r from-crimson-burgundy to-green-dark", children: [_jsx("div", { className: cn(cellHeader, "flex-[1] print:static sticky left-0 bg-crimson-burgundy"), children: "Category" }), _jsx("div", { className: cn(cellHeader, "flex-[5] p-2"), children: "Competency Category" }), _jsx("div", { className: cn(cellHeader, "flex-[2]"), children: "Professional Areas" })] }), ociDescription.map(({ description, profession, title }) => {
|
|
58
|
+
return (_jsxs("div", { className: "flex flex-row text-sm bg-white odd:bg-gray-light", children: [_jsx("div", { className: cn(cellNormal, "flex-[1] print:static sticky left-0 border-r-1 p-2 border-crimson-burgundy backdrop-blur-md text-[10px]"), children: title }), _jsx("div", { className: cn(cellNormal, "flex-[5] text-xs p-2"), children: description }), _jsx("div", { className: cn(cellNormal, "flex-[2] text-xs p-2"), children: profession })] }));
|
|
59
|
+
})] }) }));
|
|
60
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Radar, RadarChart, PolarGrid, PolarAngleAxis, PolarRadiusAxis, ResponsiveContainer, } from "recharts";
|
|
3
|
+
export function RadarGraph({ data }) {
|
|
4
|
+
return (_jsx("div", { className: "w-full aspect-square flex items-center justify-center relative", children: _jsx("div", { className: "absolute top-0 left-0 w-full", children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", aspect: 1, children: _jsxs(RadarChart, { cx: "50%", cy: "50%", outerRadius: "80%", data: data, width: 500, height: 500, children: [_jsx(PolarGrid, {}), _jsx(PolarAngleAxis, { dataKey: "subject" }), _jsx(PolarRadiusAxis, { angle: 30, domain: [0, 100] }), _jsx(Radar, { name: "My Score", dataKey: "A", stroke: "#105652", fill: "#105652", fillOpacity: 0.2 }), _jsx(Radar, { name: "Average", dataKey: "B", stroke: "#910023", fill: "#910023", fillOpacity: 0.1 })] }) }) }) }));
|
|
5
|
+
}
|
|
@@ -18,13 +18,13 @@ export function BarCardCol({ section1, section2, theme }) {
|
|
|
18
18
|
displays: "flex justify-center items-center align-center",
|
|
19
19
|
spacings: "px-5",
|
|
20
20
|
sizes: "w-full h-full",
|
|
21
|
-
textStyles: "
|
|
21
|
+
textStyles: "break-keep leading-tight",
|
|
22
22
|
};
|
|
23
23
|
const subScriptStyles = {
|
|
24
24
|
listStyles: "list-disc list-inside",
|
|
25
25
|
sizes: "w-full",
|
|
26
26
|
spacings: "p-5",
|
|
27
|
-
textStyles: "leading-tight text-
|
|
27
|
+
textStyles: "leading-tight text-[10px]",
|
|
28
28
|
};
|
|
29
|
-
return (_jsxs("div", { className: cn(cardWrapper, printBoxStyles), children: [_jsx(CardTitle, { title: "Grade and Average Score", theme: theme }), _jsxs("div", { className: "flex sm:flex-row flex-col sm:mt-0 mt-5", children: [_jsxs("div", { className: cn(SectionWrapper), children: [_jsx(BarGraph, { title: section1.title ? section1.title : "section1", score: section1.score, total: section1.total, subScore: section1.subScore, scale: section1.scale ? section1.scale : 10, theme: theme }), _jsx("div", { className: cn(ScriptStyles), children: section1.script }), _jsx("div", { className: cn(subScriptStyles), children: section1.subScripts?.map((text, index) => (_jsx("li", { children: text }, index))) })] }), _jsxs("div", { className: cn(SectionWrapper), children: [_jsx(BarGraph, { title: section2.title ? section2.title : "section2", score: section2.score, total: section2.total, subScore: section2.subScore, scale: section2.scale ? section2.scale : 10, theme: theme }), _jsx("div", { className: cn(ScriptStyles), children: section2.script }), _jsx("div", { className: cn(subScriptStyles), children: section2.subScripts?.map((text, index) => (_jsx("li", { children: text }, index))) })] })] })] }));
|
|
29
|
+
return (_jsxs("div", { className: cn(cardWrapper, printBoxStyles), children: [_jsx(CardTitle, { title: "Grade and Average Score", theme: theme }), _jsxs("div", { className: "flex sm:flex-row flex-col sm:mt-0 mt-5", children: [_jsxs("div", { className: cn(SectionWrapper), children: [_jsx(BarGraph, { title: section1.title ? section1.title : "section1", score: section1.score, total: section1.total, subScore: section1.subScore, scale: section1.scale ? section1.scale : 10, theme: theme }), _jsx("div", { className: cn(ScriptStyles, section1.subScripts ? "text-xs" : "text-sm"), children: section1.script }), _jsx("div", { className: cn(subScriptStyles), children: section1.subScripts?.map((text, index) => (_jsx("li", { children: text }, index))) })] }), _jsxs("div", { className: cn(SectionWrapper), children: [_jsx(BarGraph, { title: section2.title ? section2.title : "section2", score: section2.score, total: section2.total, subScore: section2.subScore, scale: section2.scale ? section2.scale : 10, theme: theme }), _jsx("div", { className: cn(ScriptStyles, section1.subScripts ? "text-xs" : "text-sm"), children: section2.script }), _jsx("div", { className: cn(subScriptStyles), children: section2.subScripts?.map((text, index) => (_jsx("li", { children: text }, index))) })] })] })] }));
|
|
30
30
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../../../../util";
|
|
3
|
+
import { BarGraphDuo } from "../molecule/BarGraphDuo";
|
|
4
|
+
export function OCICard({ data }) {
|
|
5
|
+
const cellHeader = {
|
|
6
|
+
textStyles: "text-center text-white text-sm font-medium",
|
|
7
|
+
displays: "flex justify-center items-center",
|
|
8
|
+
spacings: "p-2",
|
|
9
|
+
};
|
|
10
|
+
const cellNormal = {
|
|
11
|
+
textStyles: "text-center text-gray-dark",
|
|
12
|
+
displays: "flex justify-center items-center",
|
|
13
|
+
};
|
|
14
|
+
return (_jsx("div", { className: cn("overflow-auto w-full scrollbar-hidden rounded-lg mt-5 print:border print:border-gray-medium/70 cursor-default shadow-main print:shadow-none"), children: _jsxs("div", { className: "min-w-[172mm] w-full", children: [_jsxs("div", { className: "flex flex-row bg-gradient-to-r from-crimson-burgundy to-green-dark", children: [_jsx("div", { className: cn(cellHeader, "flex-[1] print:static sticky left-0 bg-crimson-burgundy"), children: "Rank" }), _jsx("div", { className: cn(cellHeader, "flex-[3]"), children: "Competency Category" }), _jsx("div", { className: cn(cellHeader, "flex-[1]"), children: "Index" }), _jsx("div", { className: cn(cellHeader, "flex-[4]"), children: "Graph" })] }), data.map(({ category, average, result }, key) => {
|
|
15
|
+
return (_jsxs("div", { className: "flex flex-row text-sm bg-white", children: [_jsx("div", { className: cn(cellNormal, "flex-[1] print:static sticky left-0 border-r-1 px-1 border-crimson-burgundy bg-white/80 backdrop-blur-md"), children: key + 1 }), _jsx("div", { className: cn(cellNormal, "flex-[3] text-xs"), children: category }), _jsx("div", { className: cn(cellNormal, "flex-[1] text-base font-bold text-green-dark"), children: result }), _jsx("div", { className: cn(cellNormal, "flex-[4]"), children: _jsx(BarGraphDuo, { score: result, subScore: average, total: 100 }) })] }));
|
|
16
|
+
})] }) }));
|
|
17
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Theme } from "../../interface";
|
|
2
|
+
import { TranscriptAdvancedProps } from "../Transcript";
|
|
3
|
+
export declare function RadarCard({ data, theme, title, }: {
|
|
4
|
+
data: TranscriptAdvancedProps["lswr"];
|
|
5
|
+
theme: Theme;
|
|
6
|
+
title?: string;
|
|
7
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../../../../util";
|
|
3
|
+
import CardTitle from "../atom/CardTitle";
|
|
4
|
+
import { printBoxStyles } from "../atom/PrintBoxStyles";
|
|
5
|
+
import { LSWRChart } from "../molecule/LSWRChart";
|
|
6
|
+
import { RadarGraph } from "../molecule/RadarGraph";
|
|
7
|
+
function prepareRadarChartData(averageLSWR, resultLSWR) {
|
|
8
|
+
return [
|
|
9
|
+
{
|
|
10
|
+
subject: "L",
|
|
11
|
+
A: resultLSWR.listening,
|
|
12
|
+
B: averageLSWR.listening,
|
|
13
|
+
fullMark: 100,
|
|
14
|
+
title: "Listening",
|
|
15
|
+
partIndicies: [1, 3, 4],
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
subject: "S",
|
|
19
|
+
A: resultLSWR.speaking,
|
|
20
|
+
B: averageLSWR.speaking,
|
|
21
|
+
fullMark: 100,
|
|
22
|
+
title: "Speaking",
|
|
23
|
+
partIndicies: [2],
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
subject: "R",
|
|
27
|
+
A: resultLSWR.reading,
|
|
28
|
+
B: averageLSWR.reading,
|
|
29
|
+
fullMark: 100,
|
|
30
|
+
title: "Reading",
|
|
31
|
+
partIndicies: [7, 8],
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
subject: "W",
|
|
35
|
+
A: resultLSWR.writing,
|
|
36
|
+
B: averageLSWR.writing,
|
|
37
|
+
fullMark: 100,
|
|
38
|
+
title: "Writing",
|
|
39
|
+
partIndicies: [5, 6],
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
}
|
|
43
|
+
export function RadarCard({ data, theme, title, }) {
|
|
44
|
+
const cardWrapper = {
|
|
45
|
+
displays: "flex flex-col relative",
|
|
46
|
+
sizes: "w-full rounded-lg overflow-hidden",
|
|
47
|
+
backgrounds: "bg-white shadow-main",
|
|
48
|
+
};
|
|
49
|
+
const SectionWrapper = {
|
|
50
|
+
display: "flex flex-row items-center justify-center",
|
|
51
|
+
sizes: "w-full",
|
|
52
|
+
};
|
|
53
|
+
return (_jsxs("div", { className: "w-full h-fit flex flex-col-reverse md:flex-row gap-5 mt-5 print:flex-row", children: [_jsx("div", { className: cn(cardWrapper, printBoxStyles, "flex-[1]"), children: _jsx(LSWRChart, { data: prepareRadarChartData(data.average, data.result) }) }), _jsxs("div", { className: cn(cardWrapper, printBoxStyles, "flex-[1]"), children: [title && _jsx(CardTitle, { title: title, theme: theme }), _jsxs("div", { className: "flex flex-col p-5 h-full justify-center items-center", children: [_jsx("div", { className: cn(SectionWrapper), children: _jsx(RadarGraph, { data: prepareRadarChartData(data.average, data.result) }) }), _jsxs("div", { className: "w-full h-fit flex items-center justify-center gap-5", children: [_jsxs("div", { className: "flex flex-row justify-center items-center gap-2", children: [_jsx("div", { className: "rounded-full h-3 w-3 bg-green-dark" }), _jsx("div", { className: "text-green-dark text-xs", children: "My Score" })] }), _jsxs("div", { className: "flex flex-row justify-center items-center gap-2", children: [_jsx("div", { className: "rounded-full h-3 w-3 bg-crimson-burgundy" }), _jsx("div", { className: "text-crimson-burgundy text-xs", children: "Average" })] })] })] })] })] }));
|
|
54
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export type Theme = "green" | "red";
|
|
2
|
+
export type ScoreName = "Average" | "Your Score";
|
|
2
3
|
export interface SectionBarProps {
|
|
3
4
|
title: string;
|
|
4
5
|
score: number;
|
|
@@ -8,3 +9,19 @@ export interface SectionBarProps {
|
|
|
8
9
|
script: string | string[];
|
|
9
10
|
subScripts?: string[];
|
|
10
11
|
}
|
|
12
|
+
export interface Score {
|
|
13
|
+
part1: number;
|
|
14
|
+
part2: number;
|
|
15
|
+
part3: number;
|
|
16
|
+
part4: number;
|
|
17
|
+
part5: number;
|
|
18
|
+
part6: number;
|
|
19
|
+
part7: number;
|
|
20
|
+
part8: number;
|
|
21
|
+
}
|
|
22
|
+
export interface LSWRPercent {
|
|
23
|
+
listening: number;
|
|
24
|
+
speaking: number;
|
|
25
|
+
writing: number;
|
|
26
|
+
reading: number;
|
|
27
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import urlAsset from "../../../../asset/url";
|
|
2
3
|
import { cn } from "../../../../util";
|
|
3
4
|
export default function Footer() {
|
|
4
5
|
const container = {
|
|
@@ -48,7 +49,7 @@ const buttons = [
|
|
|
48
49
|
// },
|
|
49
50
|
{
|
|
50
51
|
title: "GLOBAL",
|
|
51
|
-
onClick: () => (window.location.href = "
|
|
52
|
+
onClick: () => (window.location.href = urlAsset.homepage("/global")),
|
|
52
53
|
},
|
|
53
54
|
{
|
|
54
55
|
title: "FAQ",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@edu-tosel/design",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.210",
|
|
4
4
|
"description": "UI components for International TOSEL Committee",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jsx",
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"type": "module",
|
|
15
15
|
"scripts": {},
|
|
16
16
|
"dependencies": {
|
|
17
|
+
"@edu-tosel/utils": "^0.0.30",
|
|
17
18
|
"@gsap/react": "^2.1.1",
|
|
18
19
|
"date-fns": "^2.30.0",
|
|
19
20
|
"date-fns-tz": "^2.0.1",
|
package/tailwind.config.ts
CHANGED
|
@@ -677,6 +677,11 @@ export default {
|
|
|
677
677
|
"-ms-overflow-style": "none", // For Internet Explorer and Edge
|
|
678
678
|
"scrollbar-width": "none", // For Firefox
|
|
679
679
|
},
|
|
680
|
+
// ".page-break": {
|
|
681
|
+
// "@media print": {
|
|
682
|
+
// "page-break-before": "always",
|
|
683
|
+
// },
|
|
684
|
+
// },
|
|
680
685
|
},
|
|
681
686
|
{
|
|
682
687
|
respectPrefix: false,
|
package/version.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.210
|