@edu-tosel/design 1.0.266 → 1.0.268

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.
Files changed (166) hide show
  1. package/asset/SVG.d.ts +4 -0
  2. package/asset/SVG.js +4 -0
  3. package/asset/SVG.tsx +4 -0
  4. package/asset/svg/MiniClose.d.ts +4 -0
  5. package/asset/svg/MiniClose.js +4 -0
  6. package/asset/svg/MiniClose.tsx +19 -0
  7. package/asset/svg/Search.d.ts +1 -0
  8. package/asset/svg/Search.js +4 -0
  9. package/asset/svg/Search.tsx +24 -0
  10. package/board/design/Board.design.js +2 -2
  11. package/board/design/Header.design.d.ts +1 -1
  12. package/board/design/Header.design.js +12 -3
  13. package/board/template/ManageBoard.js +1 -1
  14. package/globals.css +7 -2
  15. package/interface/Board.d.ts +11 -1
  16. package/layout/design/Shelf.design.js +2 -2
  17. package/layout/index.d.ts +0 -9
  18. package/layout/index.js +0 -9
  19. package/layout/template/DataField.js +1 -1
  20. package/layout/template/home/Promotion.js +1 -0
  21. package/layout/template/home/Service.js +1 -0
  22. package/layout/template/home/layout/Carousel.js +27 -8
  23. package/layout/template/home/layout/Navigation.js +86 -12
  24. package/package.json +2 -2
  25. package/util/createSearch.d.ts +4 -7
  26. package/util/createSearch.js +208 -24
  27. package/util/index.d.ts +1 -1
  28. package/util/index.js +1 -1
  29. package/version.txt +1 -1
  30. package/widget/template/Input/index.js +8 -0
  31. package/layout/template/About/SectionA.d.ts +0 -1
  32. package/layout/template/About/SectionA.js +0 -51
  33. package/layout/template/About/SectionB.d.ts +0 -2
  34. package/layout/template/About/SectionB.js +0 -55
  35. package/layout/template/About/SectionC.d.ts +0 -1
  36. package/layout/template/About/SectionC.js +0 -35
  37. package/layout/template/About/SectionCCards.d.ts +0 -13
  38. package/layout/template/About/SectionCCards.js +0 -13
  39. package/layout/template/About/SectionCD.d.ts +0 -1
  40. package/layout/template/About/SectionCD.js +0 -15
  41. package/layout/template/About/SectionCLeaf.d.ts +0 -15
  42. package/layout/template/About/SectionCLeaf.js +0 -104
  43. package/layout/template/About/SectionD.d.ts +0 -1
  44. package/layout/template/About/SectionD.js +0 -131
  45. package/layout/template/About/SectionE.d.ts +0 -1
  46. package/layout/template/About/SectionE.js +0 -7
  47. package/layout/template/About/SectionECards.d.ts +0 -1
  48. package/layout/template/About/SectionECards.js +0 -79
  49. package/layout/template/About/SectionF.d.ts +0 -1
  50. package/layout/template/About/SectionF.js +0 -4
  51. package/layout/template/About/SectionG.d.ts +0 -10
  52. package/layout/template/About/SectionG.js +0 -27
  53. package/layout/template/About/index.d.ts +0 -19
  54. package/layout/template/About/index.js +0 -19
  55. package/layout/template/Books/Books.layout.d.ts +0 -1
  56. package/layout/template/Books/Books.layout.js +0 -13
  57. package/layout/template/Books/SectionA.d.ts +0 -2
  58. package/layout/template/Books/SectionA.js +0 -430
  59. package/layout/template/Books/index.d.ts +0 -5
  60. package/layout/template/Books/index.js +0 -5
  61. package/layout/template/MonthlyProgressReport/Layout.d.ts +0 -4
  62. package/layout/template/MonthlyProgressReport/Layout.js +0 -52
  63. package/layout/template/MonthlyProgressReport/Report.d.ts +0 -46
  64. package/layout/template/MonthlyProgressReport/Report.js +0 -124
  65. package/layout/template/MonthlyProgressReport/index.d.ts +0 -8
  66. package/layout/template/MonthlyProgressReport/index.js +0 -7
  67. package/layout/template/Olympiad/Banner.d.ts +0 -1
  68. package/layout/template/Olympiad/Banner.js +0 -31
  69. package/layout/template/Olympiad/Conditions.d.ts +0 -1
  70. package/layout/template/Olympiad/Conditions.js +0 -168
  71. package/layout/template/Olympiad/Features.d.ts +0 -1
  72. package/layout/template/Olympiad/Features.js +0 -44
  73. package/layout/template/Olympiad/Olympiad.layout.d.ts +0 -1
  74. package/layout/template/Olympiad/Olympiad.layout.js +0 -19
  75. package/layout/template/Olympiad/Prizes.d.ts +0 -1
  76. package/layout/template/Olympiad/Prizes.js +0 -49
  77. package/layout/template/Olympiad/Sponsors.d.ts +0 -1
  78. package/layout/template/Olympiad/Sponsors.js +0 -31
  79. package/layout/template/Olympiad/Videoset.d.ts +0 -1
  80. package/layout/template/Olympiad/Videoset.js +0 -71
  81. package/layout/template/Olympiad/index.d.ts +0 -15
  82. package/layout/template/Olympiad/index.js +0 -15
  83. package/layout/template/Regexam/Banner.d.ts +0 -1
  84. package/layout/template/Regexam/Banner.js +0 -183
  85. package/layout/template/Regexam/Evaluation.d.ts +0 -3
  86. package/layout/template/Regexam/Evaluation.js +0 -132
  87. package/layout/template/Regexam/OfflineExam.d.ts +0 -4
  88. package/layout/template/Regexam/OfflineExam.js +0 -204
  89. package/layout/template/Regexam/Regexam.layout.d.ts +0 -1
  90. package/layout/template/Regexam/Regexam.layout.js +0 -13
  91. package/layout/template/Regexam/Types.d.ts +0 -1
  92. package/layout/template/Regexam/Types.js +0 -294
  93. package/layout/template/Regexam/index.d.ts +0 -11
  94. package/layout/template/Regexam/index.js +0 -11
  95. package/layout/template/Transcript/Layout.d.ts +0 -6
  96. package/layout/template/Transcript/Layout.js +0 -52
  97. package/layout/template/Transcript/design/Transcript.d.ts +0 -228
  98. package/layout/template/Transcript/design/Transcript.design.d.ts +0 -13
  99. package/layout/template/Transcript/design/Transcript.design.js +0 -58
  100. package/layout/template/Transcript/design/Transcript.js +0 -181
  101. package/layout/template/Transcript/design/TranscriptAdvanced.design.d.ts +0 -5
  102. package/layout/template/Transcript/design/TranscriptAdvanced.design.js +0 -55
  103. package/layout/template/Transcript/design/atom/CardTitle.d.ts +0 -5
  104. package/layout/template/Transcript/design/atom/CardTitle.js +0 -13
  105. package/layout/template/Transcript/design/atom/CardTitleDivided.d.ts +0 -0
  106. package/layout/template/Transcript/design/atom/CardTitleDivided.js +0 -1
  107. package/layout/template/Transcript/design/atom/GetPartDescriptionFromLevel.d.ts +0 -3
  108. package/layout/template/Transcript/design/atom/GetPartDescriptionFromLevel.js +0 -4
  109. package/layout/template/Transcript/design/atom/GetPartTitleFromLevel.d.ts +0 -3
  110. package/layout/template/Transcript/design/atom/GetPartTitleFromLevel.js +0 -4
  111. package/layout/template/Transcript/design/atom/GetStyleFromLevel.d.ts +0 -2
  112. package/layout/template/Transcript/design/atom/GetStyleFromLevel.js +0 -4
  113. package/layout/template/Transcript/design/atom/LevelToPartDescriptionMap.d.ts +0 -6
  114. package/layout/template/Transcript/design/atom/LevelToPartDescriptionMap.js +0 -95
  115. package/layout/template/Transcript/design/atom/LevelToPartTitleMap.d.ts +0 -6
  116. package/layout/template/Transcript/design/atom/LevelToPartTitleMap.js +0 -95
  117. package/layout/template/Transcript/design/atom/LevelToStyleMap.d.ts +0 -6
  118. package/layout/template/Transcript/design/atom/LevelToStyleMap.js +0 -42
  119. package/layout/template/Transcript/design/atom/PrintBoxStyles.d.ts +0 -4
  120. package/layout/template/Transcript/design/atom/PrintBoxStyles.js +0 -4
  121. package/layout/template/Transcript/design/molecule/BarGraph.d.ts +0 -11
  122. package/layout/template/Transcript/design/molecule/BarGraph.js +0 -81
  123. package/layout/template/Transcript/design/molecule/BarGraphDuo.d.ts +0 -10
  124. package/layout/template/Transcript/design/molecule/BarGraphDuo.js +0 -6
  125. package/layout/template/Transcript/design/molecule/BarGraphMulti.d.ts +0 -11
  126. package/layout/template/Transcript/design/molecule/BarGraphMulti.js +0 -9
  127. package/layout/template/Transcript/design/molecule/CircularGauge.d.ts +0 -10
  128. package/layout/template/Transcript/design/molecule/CircularGauge.js +0 -68
  129. package/layout/template/Transcript/design/molecule/LSWRChart.d.ts +0 -11
  130. package/layout/template/Transcript/design/molecule/LSWRChart.js +0 -44
  131. package/layout/template/Transcript/design/molecule/LevelIndex.d.ts +0 -3
  132. package/layout/template/Transcript/design/molecule/LevelIndex.js +0 -14
  133. package/layout/template/Transcript/design/molecule/MIChart.d.ts +0 -1
  134. package/layout/template/Transcript/design/molecule/MIChart.js +0 -51
  135. package/layout/template/Transcript/design/molecule/OCIChart.d.ts +0 -1
  136. package/layout/template/Transcript/design/molecule/OCIChart.js +0 -60
  137. package/layout/template/Transcript/design/molecule/RadarGraph.d.ts +0 -10
  138. package/layout/template/Transcript/design/molecule/RadarGraph.js +0 -5
  139. package/layout/template/Transcript/design/organism/BarCardCol.d.ts +0 -8
  140. package/layout/template/Transcript/design/organism/BarCardCol.js +0 -30
  141. package/layout/template/Transcript/design/organism/BarCardRow.d.ts +0 -8
  142. package/layout/template/Transcript/design/organism/BarCardRow.js +0 -30
  143. package/layout/template/Transcript/design/organism/HonorCard.d.ts +0 -4
  144. package/layout/template/Transcript/design/organism/HonorCard.js +0 -16
  145. package/layout/template/Transcript/design/organism/IdCard.d.ts +0 -8
  146. package/layout/template/Transcript/design/organism/IdCard.js +0 -64
  147. package/layout/template/Transcript/design/organism/IntelligenceCard.d.ts +0 -12
  148. package/layout/template/Transcript/design/organism/IntelligenceCard.js +0 -39
  149. package/layout/template/Transcript/design/organism/NationalPositionCard.d.ts +0 -4
  150. package/layout/template/Transcript/design/organism/NationalPositionCard.js +0 -14
  151. package/layout/template/Transcript/design/organism/OCICard.d.ts +0 -4
  152. package/layout/template/Transcript/design/organism/OCICard.js +0 -17
  153. package/layout/template/Transcript/design/organism/PerformanceCard.d.ts +0 -5
  154. package/layout/template/Transcript/design/organism/PerformanceCard.js +0 -25
  155. package/layout/template/Transcript/design/organism/RadarCard.d.ts +0 -7
  156. package/layout/template/Transcript/design/organism/RadarCard.js +0 -54
  157. package/layout/template/Transcript/design/organism/ResultGaugeCard.d.ts +0 -7
  158. package/layout/template/Transcript/design/organism/ResultGaugeCard.js +0 -19
  159. package/layout/template/Transcript/design/organism/ScoreCard.d.ts +0 -4
  160. package/layout/template/Transcript/design/organism/ScoreCard.js +0 -11
  161. package/layout/template/Transcript/design/organism/SectionRadarCard.d.ts +0 -8
  162. package/layout/template/Transcript/design/organism/SectionRadarCard.js +0 -42
  163. package/layout/template/Transcript/index.d.ts +0 -11
  164. package/layout/template/Transcript/index.js +0 -9
  165. package/layout/template/Transcript/interface.d.ts +0 -50
  166. package/layout/template/Transcript/interface.js +0 -1
@@ -1,430 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useEffect, useRef } from "react";
3
- import gsap from "gsap";
4
- import ScrollTrigger from "gsap/ScrollTrigger";
5
- import { cn } from "../../../util";
6
- import { useResponsive } from "../../../hook";
7
- gsap.registerPlugin(ScrollTrigger);
8
- const bookData = [
9
- {
10
- id: 1,
11
- type: "학습 시리즈",
12
- title: "Reading Series",
13
- imgSrc: "https://resource.tosel.co.kr/images/book_mockup_RD_HJ1.png",
14
- description: "Reading 학습을 위한 토셀의 학습 시리즈입니다. 독해 & 실용문 연습을 위한 지문과 Comprehension 문항이 수록되어, 이해도 확인 및 정확한 진단이 가능합니다. 숙지한 독해 지문을 원어민 음성으로 들으며 리딩을 위한 완벽한 학습 커리큘럼을 마련해보세요.",
15
- levelLow: "PS",
16
- levelHigh: "HJ",
17
- link: "https://smartstore.naver.com/tosel/category/bde68e05417e4db99a86ebbd4aa3e925?cp=1",
18
- },
19
- {
20
- id: 2,
21
- type: "학습 시리즈",
22
- title: "Story Series",
23
- imgSrc: "https://resource.tosel.co.kr/images/book_mockup_SY1_BA.png",
24
- description: "독해능력을 기를 수 있는 Story Series 입니다. 이야기 지문과 단어를 함께 연결지어 학생들의 독해 능력을 평가합니다. 재미있는 스토리와 함께 다양한 문제를 풀어가며 독해실력을 집중적으로 향상시켜 보세요.",
25
- levelLow: "PS",
26
- levelHigh: "HJ",
27
- link: "https://smartstore.naver.com/tosel/category/cd8df3ab036942f7a3ea6e14a7ab3a9a?cp=1",
28
- },
29
- {
30
- id: 3,
31
- type: "학습 시리즈",
32
- title: "Listening Series",
33
- imgSrc: "https://resource.tosel.co.kr/images/LSJU_mockup.png",
34
- description: "Listening을 익힐수 있는 토셀의 학습교재 입니다. 초등/중등 교과과정을 연계한 말하기&듣기 학습을 세분화된 레벨로 만나보세요. 기출문제 연습과 최신 수능 출제 문법을 포함하여, 수능/내신 대비가 가능합니다.",
35
- levelLow: "PS",
36
- levelHigh: "HJ",
37
- link: "https://smartstore.naver.com/tosel/category/2f11488810464cb5bbe77b004965f4ae?cp=1",
38
- },
39
- {
40
- id: 4,
41
- type: "학습 시리즈",
42
- title: "Speaking Series",
43
- imgSrc: "https://resource.tosel.co.kr/images/book_mockup_SP_PS.png",
44
- description: "2024년 출간된 토셀의 Speaking 학습 교재입니다. 레벨에 맞게 문장 구성요소를 단계적으로 학습할 수 있도록 구성되어있습니다. 실제 TOSEL 시험의 빈출 문항은 물론, Grammar, Voca, Listening 교재와의 높은 연계율을 고려하여 고안되었습니다.",
45
- levelLow: "PS",
46
- levelHigh: "HJ",
47
- link: "https://smartstore.naver.com/tosel/category/28dc52dc67a3443ea010812d40accb69?cp=1",
48
- },
49
- {
50
- id: 5,
51
- type: "학습 시리즈",
52
- title: "Grammar Series",
53
- imgSrc: "https://resource.tosel.co.kr/images/book_mockup_GR1_ST.png",
54
- description: "초등/중등 교과과정과 연계된 문법을 다룬 학습 시리즈입니다. TOSEL 기출문제와 최신 수능 출제 문법을 포함해 수능/내신을 대비할 수 있습니다. 또한 신전 감각 향상과 점검을 위한 기출 문제가 같이 수록되어있어 개념 학습부터 실전 응용까지 다룰 수 있는 교재입니다.",
55
- levelLow: "PS",
56
- levelHigh: "HJ",
57
- link: "https://smartstore.naver.com/tosel/category/c88067049a904b8e8d78ada305b2779b?cp=1",
58
- },
59
- {
60
- id: 6,
61
- type: "학습 시리즈",
62
- title: "VOCA Series",
63
- imgSrc: "https://resource.tosel.co.kr/images/book_mockup_VC_HJ_noshadow.png",
64
- description: "단어 학습을 위한 학습교재 시리즈입니다. TOSEL 시험을 기준으로 빈출 지표를 활용한 예문과 문제가 구성되어있습니다. 실제 TOSEL 지문을 예문으로 활용하여 보다 실용적인 연계 학습 환경을 제공합니다. ",
65
- levelLow: "PS",
66
- levelHigh: "HJ",
67
- link: "https://smartstore.naver.com/tosel/category/78551dca50de4636bc212c46543d4137?cp=1",
68
- },
69
- {
70
- id: 7,
71
- type: "시험 대비 교재",
72
- title: "유형분석집",
73
- imgSrc: "https://resource.tosel.co.kr/images/book_mockup_YH1_ST.png",
74
- description: "최근 TOSEL 시험의 문항들을 유형별로 소개하는 지침서입니다. 국내외 15,000여개 학교/학원 단체 응시 인원 중 엄선한 100만명 이상의 성적 데이터를 기반으로 속성 분석 프로그램을 이용해 문제 유형을 분류하였습니다.",
75
- levelLow: "PS",
76
- levelHigh: "HJ",
77
- link: "https://smartstore.naver.com/tosel/category/00590516c9ea4041b17bcea6527850ed?cp=1",
78
- },
79
- {
80
- id: 8,
81
- type: "시험 대비 교재",
82
- title: "예상문제집",
83
- imgSrc: "https://resource.tosel.co.kr/images/book_mockup_YS_JR.png",
84
- description: "TOSEL의 최신 유형을 반영한 실전 모의고사가 5회 수록된 시험대비 교재입니다. TOSEL 기출문제 중 정답률에 따라 분류하여 평이한 정답률을 가진 문항으로 구성되어 있습니다. 필수 어휘를 포함한 모의고사 빈출 어휘가 수록되어 있어, 일반적인 시험 문제에 대비할 수 있습니다.",
85
- levelLow: "PS",
86
- levelHigh: "JR",
87
- link: "https://smartstore.naver.com/tosel/category/263ed55441ee47fc994b7e2e7d77c37f?cp=1",
88
- },
89
- {
90
- id: 9,
91
- type: "시험 대비 교재",
92
- title: "실전문제집 1 & 2",
93
- imgSrc: "https://resource.tosel.co.kr/images/book_mockup_SJ2_BA.png",
94
- description: "TOSEL의 최신 유형을 반영한 실전 모의고사가 5회 수록된 시험대비 교재입니다. 실전 감각 향상을 고려하여 난이별 TOSEL 출제 문항이 수록되어있습니다. 필수 어휘를 포함한 모의고사 빈출 어휘가 수록되어 있어, 일반적인 시험 문제에 대비할 수 있습니다.",
95
- levelLow: "PS",
96
- levelHigh: "HJ",
97
- link: "https://smartstore.naver.com/tosel/category/50ea23099a1344d99b0902bfb65305aa?cp=1",
98
- },
99
- {
100
- id: 10,
101
- type: "시험 대비 교재",
102
- title: "심화문제집",
103
- imgSrc: "https://resource.tosel.co.kr/images/book_mockup_SH_ST.png",
104
- description: "응시생들이 가장 많이 틀린 최신 유형이 수록된 모의고사 5회 분량의 문제집입니다. 실제 정답률 분석을 통해 다수의 수험자가 오답을 선택한 핵심 원인이 설명되어 있으며, 심화 문제 및 만점 전략을 제시합니다. ",
105
- levelLow: "PS",
106
- levelHigh: "JR",
107
- link: "https://smartstore.naver.com/tosel/category/f3c92dd261b7497aace96620f760aacd?cp=1",
108
- },
109
- {
110
- id: 11,
111
- type: "시험 대비 교재",
112
- title: "Cocoon 유형분석집",
113
- imgSrc: "https://resource.tosel.co.kr/images/book_mockup_YH_CO.png",
114
- description: "코쿤은 한국의 교육 커리큘럼에 맞는 TOSEL 시험평가제도의 시작단계입니다. 연령예 맞는 시험문제 구성으로 5-7세의 미취학 아동들이 즐겁게 학습할 수 있도록 구성한 교재입니다. 다른 TOSEL 시험과 마찬가지로 실제 Cocoon을 응시할 경우 성적분석자료를 제공합니다.",
115
- levelLow: "CO",
116
- link: "https://smartstore.naver.com/tosel/products/6654890597",
117
- },
118
- {
119
- id: 12,
120
- type: "시험 대비 교재",
121
- title: "Advanced 공식실전서",
122
- imgSrc: "https://resource.tosel.co.kr/images/book_mockup_GS_AD.png",
123
- description: "대학 편입학/졸업자격, 공무원 임용, 기업체 및 국가자격증 시험 등에 반영되는 TOSEL Advanced 시험의 공식 실전서입니다. 삽입된 OMR 부록을 활용해 실제 시험상황과 동일한 조건의 연습시험이 가능합니다.",
124
- levelLow: "AD",
125
- link: "https://smartstore.naver.com/tosel/products/10668962060",
126
- },
127
- ];
128
- let divIndex = 0;
129
- const bookNumber = bookData.length;
130
- export default function SectionA() {
131
- const stickyRef = useRef(null);
132
- const bookRef = useRef(null);
133
- const mainTitleRef = useRef(null);
134
- const subTitleRef = useRef(null);
135
- const bgRef = useRef(null);
136
- const buttonRef = useRef(null);
137
- const bookScrollRef = useRef(null);
138
- const refs = useRef([]);
139
- const isMD = useResponsive("md");
140
- const isXM = useResponsive("xm");
141
- const cardHeight = isXM ? 560 : 400;
142
- console.log(isMD);
143
- console.log(cardHeight);
144
- //훅 스크롤에 따라 해당하는 책을 디스플레이
145
- const bookScroller = () => {
146
- if (bookScrollRef.current) {
147
- const scrollAmount = cardHeight;
148
- const newScrollTop = scrollAmount * divIndex;
149
- bookScrollRef.current.scrollTo({
150
- top: newScrollTop,
151
- behavior: "smooth",
152
- });
153
- }
154
- };
155
- useEffect(() => {
156
- const ctx = gsap.context(() => {
157
- const vh = window.innerHeight * 0.01;
158
- const scrollWrapper = stickyRef.current;
159
- const bookWrapper = bookRef.current;
160
- const sectionEndPoint = `${50 * vh}px`;
161
- const bookScrollEndPoint = `${((bookNumber + 1) * 100 + 40) * vh}px`;
162
- // 스크롤 방지 함수
163
- const preventScroll = (e) => {
164
- if (bookScrollRef.current &&
165
- bookScrollRef.current.contains(e.target)) {
166
- e.preventDefault(); // 스크롤 방지
167
- }
168
- };
169
- // 터치스크린에서 스크롤 방지 함수
170
- const preventTouchScroll = (e) => {
171
- if (bookScrollRef.current &&
172
- bookScrollRef.current.contains(e.target)) {
173
- e.preventDefault(); // 터치스크롤 방지
174
- }
175
- };
176
- // bookScrollRef에 wheel 이벤트 리스너 추가
177
- if (bookScrollRef.current) {
178
- bookScrollRef.current.addEventListener("wheel", preventScroll, {
179
- passive: false,
180
- });
181
- bookScrollRef.current.addEventListener("touchstart", preventTouchScroll, { passive: false });
182
- bookScrollRef.current.addEventListener("touchmove", preventTouchScroll, { passive: false });
183
- }
184
- if (scrollWrapper && bookWrapper) {
185
- // 첫 번째 ScrollTrigger: stickyRef를 고정하고 mainTitle의 투명도와 크기 조정
186
- const scrollTrigger = ScrollTrigger.create({
187
- trigger: scrollWrapper,
188
- start: "top top",
189
- end: `bottom ${sectionEndPoint}`,
190
- pin: true,
191
- markers: false,
192
- scrub: true,
193
- });
194
- // mainTitle의 투명도와 크기를 스크롤 위치에 따라 조절하는 애니메이션
195
- if (mainTitleRef.current) {
196
- gsap.to(mainTitleRef.current, {
197
- opacity: 0,
198
- scale: 0.7, // 크기를 70%로 줄임
199
- scrollTrigger: {
200
- trigger: scrollWrapper,
201
- start: `top-=10 top`,
202
- end: `bottom ${sectionEndPoint}`,
203
- markers: false,
204
- scrub: true,
205
- },
206
- });
207
- }
208
- // 배경 그라디언트를 투명하게 만드는 애니메이션
209
- if (bgRef.current) {
210
- gsap.to(bgRef.current, {
211
- opacity: 0,
212
- scrollTrigger: {
213
- trigger: scrollWrapper,
214
- start: `top-=10 top`,
215
- end: `bottom ${sectionEndPoint}`,
216
- markers: false,
217
- scrub: true,
218
- },
219
- });
220
- }
221
- // 교재몰 바로가기 버튼의 위치를 스크롤이 시작되면 하단으로 조정
222
- if (buttonRef.current) {
223
- const tween = gsap.to(buttonRef.current, {
224
- bottom: "60px",
225
- duration: 0.3,
226
- ease: "power2.inOut",
227
- scrollTrigger: {
228
- trigger: "",
229
- start: `top+=1 top-=1`,
230
- end: `bottom bottom`,
231
- markers: false,
232
- toggleActions: "play play play reverse",
233
- },
234
- });
235
- // 책 이미지 전환 훅
236
- refs.current.forEach((ref) => {
237
- if (ref) {
238
- gsap.to(ref, {
239
- scrollTrigger: {
240
- trigger: ref,
241
- start: "start bottom",
242
- end: "bottom bottom",
243
- snap: {
244
- snapTo: 1,
245
- duration: 0.5,
246
- ease: "power3.inOut",
247
- },
248
- markers: false,
249
- onEnter: () => {
250
- divIndex++;
251
- bookScroller();
252
- console.log(`onEnter: ${divIndex}`);
253
- },
254
- onLeaveBack: () => {
255
- divIndex--;
256
- bookScroller();
257
- console.log(`onLeaveBack: ${divIndex}`);
258
- },
259
- },
260
- });
261
- }
262
- });
263
- }
264
- // 두 번째 ScrollTrigger: bookWrapper가 뷰포트 상단에 도달하면 sticky하게 붙기
265
- const bookTrigger = ScrollTrigger.create({
266
- trigger: bookWrapper,
267
- start: "top top",
268
- end: `${bookScrollEndPoint} bottom`,
269
- pin: true,
270
- pinSpacing: false,
271
- markers: false,
272
- });
273
- return () => {
274
- scrollTrigger.kill();
275
- bookTrigger.kill();
276
- // 이벤트 리스너 제거
277
- if (bookScrollRef.current) {
278
- bookScrollRef.current.removeEventListener("wheel", preventScroll);
279
- bookScrollRef.current.removeEventListener("touchstart", preventTouchScroll);
280
- bookScrollRef.current.removeEventListener("touchmove", preventTouchScroll);
281
- }
282
- };
283
- }
284
- });
285
- return () => ctx.kill();
286
- }, [bookScroller, useResponsive]);
287
- const container = {
288
- sizes: "w-full h-fit relative",
289
- displays: "flex flex-col justify-start items-center",
290
- textstyles: "antialiased",
291
- backgrounds: "bg-white bg-cover bg-center",
292
- };
293
- const absoluteWrapperBottom = {
294
- sizes: "w-full h-[200vh]",
295
- displays: "absolute flex flex-col",
296
- positions: "top-0 left-0 z-0",
297
- };
298
- const absoluteWrapperTop = {
299
- sizes: "w-full h-[100vh]",
300
- displays: "flex flex-col justify-center items-center fixed",
301
- positions: "top-0 left-0 z-100",
302
- animations: "pointer-events-none",
303
- };
304
- const buttonStyling = {
305
- sizes: "w-fit h-fit rounded-2xl",
306
- spacings: "p-4 absolute mt-40",
307
- display: "flex flex-row gap-2",
308
- textStyling: "font-bold text-green-dark",
309
- backgrounds: "shadow-main bg-white",
310
- animation: "duration-300 hover:bg-green-dark hover:text-white pointer-events-auto",
311
- };
312
- const TitleWrapper = {
313
- spacings: "pt-[20vh] z-5",
314
- sizes: "w-full h-[100vh]",
315
- display: "flex flex-col justify-start items-center",
316
- };
317
- const miniTitle = {
318
- textstyles: "text-center font-bold text-xl text-white",
319
- };
320
- const mainTitle = {
321
- display: "flex flex-row gap-4 md:gap-10 mt-[5vh]",
322
- textstyles: "text-center font-medium text-5xl md:text-8xl ml:text-10xl text-white leading-none",
323
- };
324
- const bookWrapper = {
325
- displays: "flex flex-col justify-center items-center -translate-y-[40vh]",
326
- sizes: "p-10 w-full h-screen z-1 pointer-events-none",
327
- };
328
- const bookExplainWrapper = {
329
- displays: "flex flex-col md:flex-row justify-center items-center",
330
- sizes: "h-screen w-full max-w-[1200px]",
331
- };
332
- const bookTextWrapper = {
333
- displays: "flex items-end md:items-start",
334
- sizes: "h-full xm:max-h-140 max-h-100 w-full shrink",
335
- textStyling: "font-bold text-2xl pl-0 md:pl-[76px]",
336
- };
337
- const bookTextBox = {
338
- displays: "flex flex-col justify-end items-center md:justify-start md:items-start",
339
- sizes: "w-full h-fit rounded-lg p-5",
340
- };
341
- return (_jsxs("div", { className: cn(container), children: [_jsx("div", { className: cn(absoluteWrapperBottom, "bg-gradient-to-tr from-crimson-burgundy to-green-dark"), ref: bgRef }), _jsx("div", { className: cn(absoluteWrapperTop), children: _jsxs("div", { className: cn(buttonStyling), ref: buttonRef, onClick: () => {
342
- window.location.href = "https://smartstore.naver.com/tosel";
343
- }, children: [_jsx("div", { children: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", className: "size-6", children: _jsx("path", { d: "M2.25 2.25a.75.75 0 0 0 0 1.5h1.386c.17 0 .318.114.362.278l2.558 9.592a3.752 3.752 0 0 0-2.806 3.63c0 .414.336.75.75.75h15.75a.75.75 0 0 0 0-1.5H5.378A2.25 2.25 0 0 1 7.5 15h11.218a.75.75 0 0 0 .674-.421 60.358 60.358 0 0 0 2.96-7.228.75.75 0 0 0-.525-.965A60.864 60.864 0 0 0 5.68 4.509l-.232-.867A1.875 1.875 0 0 0 3.636 2.25H2.25ZM3.75 20.25a1.5 1.5 0 1 1 3 0 1.5 1.5 0 0 1-3 0ZM16.5 20.25a1.5 1.5 0 1 1 3 0 1.5 1.5 0 0 1-3 0Z" }) }) }), "\uAD50\uC7AC\uBAB0 \uBC14\uB85C\uAC00\uAE30"] }) }), _jsxs("div", { className: cn(TitleWrapper), ref: stickyRef, children: [_jsx("div", { className: cn(miniTitle), ref: subTitleRef, children: "\uB2F9\uC2E0\uC774 \uBBFF\uC744 \uC218 \uC788\uB294 \uC601\uC5B4\uAD50\uC7AC" }), _jsxs("div", { className: cn(mainTitle), ref: mainTitleRef, children: [_jsx("div", { className: "flex justify-center items-center w-40 md:w-80 ml:w-120", children: _jsx("img", { src: "https://resource.tosel.co.kr/images/img-logo-tosel-darkmode.svg", alt: "", className: "max-w-full h-auto" }) }), _jsx("div", { className: "h-full w-0.5 bg-white" }), _jsx("div", { children: " books " })] })] }), _jsx("div", { className: cn(bookWrapper), ref: bookRef, children: _jsx("div", { className: cn("md:pointer-events-none w-72 h-100 xm:w-100 xm:h-140 bg-white backdrop-blur-md z-10 rounded-xl shadow-main overflow-y-scroll scrollbar-hidden snap-y snap-mandatory"), ref: bookScrollRef, children: _jsx(ScrollBookComponent, {}) }) }), _jsx("div", { className: "", children: bookData.map((item, index) => {
344
- // item.levelLow 값을 LevelKey로 변환하기 전에 유효성 검사
345
- const lowLevelStyle = getLevelStyle(item.levelLow); // 안전하게 캐스팅
346
- const highLevelStyle = getLevelStyle(item.levelHigh); // 이 부분도 마찬가지로
347
- return (_jsxs("div", { className: cn(bookExplainWrapper), ref: (el) => {
348
- if (el) {
349
- refs.current[index] = el;
350
- }
351
- }, children: [_jsx("div", { className: cn(bookTextWrapper), children: _jsxs("div", { className: cn(bookTextBox, item.type == "학습 시리즈"
352
- ? "md:bg-gray-light/50 text-hj-blue"
353
- : "md:bg-gray-light/50 text-crimson-burgundy"), children: [_jsx("div", { children: item.title }), _jsx("div", { className: "text-base text-gray-medium", children: item.type }), isMD && (_jsxs("div", { className: "w-fit h-fit flex flex-col lg:flex-row gap-2 mt-5 lg:items-center items-start", children: [_jsx("div", { className: `w-fit h-fit px-2 py-1 text-xs xm:text-sm rounded-md font-bold ${lowLevelStyle.textColor} ${lowLevelStyle.bgColor}`, children: lowLevelStyle.name }), item.levelHigh && (_jsxs("div", { className: "flex flex-row gap-2 items-center lg:m-0 ml-5", children: ["~", _jsx("div", { className: `w-fit h-fit px-2 py-1 text-xs xm:text-sm rounded-md font-bold ${highLevelStyle.textColor} ${highLevelStyle.bgColor}`, children: highLevelStyle.name })] }))] }))] }) }), isMD ? (_jsx("div", { className: "h-full w-72 xm:w-120 shrink-0" })) : (_jsx("div", { className: "h-100 w-full shrink-0" })), _jsx("div", { className: "h-full w-full pt-5 flex flex-col justify-start md:justify-center items-center md:items-end md:pr-5 pr-0", children: isMD ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "text-base font-bold text-gray-medium w-full text-start", children: ["About", " ", _jsx("span", { className: cn("ml-2", item.type == "학습 시리즈"
354
- ? "text-hj-blue"
355
- : "text-crimson-burgundy"), children: item.title })] }), _jsx("div", { className: cn("text-base p-5 rounded-lg text-gray-dark font-medium mt-5 w-full", item.type == "학습 시리즈"
356
- ? "bg-blue-pastel/30"
357
- : "bg-crimson-burgundy/5"), children: item.description })] })) : (_jsxs("div", { className: "w-fit h-fit flex flex-row gap-2", children: [_jsx("div", { className: `w-fit h-fit px-2 py-1 text-sm rounded-md font-bold ${lowLevelStyle.textColor} ${lowLevelStyle.bgColor}`, children: lowLevelStyle.name }), item.levelHigh && (_jsxs(_Fragment, { children: [_jsx("span", { children: "~" }), _jsx("div", { className: `w-fit h-fit px-2 py-1 text-sm rounded-md font-bold ${highLevelStyle.textColor} ${highLevelStyle.bgColor}`, children: highLevelStyle.name })] }))] })) })] }, item.id));
358
- }) })] }));
359
- }
360
- const levelStyles = {
361
- CO: {
362
- name: "cocoon",
363
- textColor: "text-co-green",
364
- bgColor: "bg-co-green-light",
365
- },
366
- PS: {
367
- name: "Pre-Starter",
368
- textColor: "text-ps-pink",
369
- bgColor: "bg-ps-pink-light",
370
- },
371
- ST: {
372
- name: "Starter",
373
- textColor: "text-st-orange",
374
- bgColor: "bg-st-orange-light",
375
- },
376
- BA: {
377
- name: "Basic",
378
- textColor: "text-ba-yellow",
379
- bgColor: "bg-ba-yellow-light",
380
- },
381
- JR: {
382
- name: "Junior",
383
- textColor: "text-jr-blue",
384
- bgColor: "bg-jr-blue-light",
385
- },
386
- HJ: {
387
- name: "High Junior",
388
- textColor: "text-hj-blue",
389
- bgColor: "bg-hj-blue-light",
390
- },
391
- AD: {
392
- name: "Advanced",
393
- textColor: "text-crimson-burgundy",
394
- bgColor: "bg-crimson-burgundy/10",
395
- },
396
- };
397
- const getLevelStyle = (level) => {
398
- return levelStyles[level];
399
- };
400
- export function ScrollBookComponent() {
401
- const isMD = useResponsive("md");
402
- const container = {
403
- sizes: "w-full h-fit relative",
404
- displyas: "flex flex-col",
405
- backgrounds: "",
406
- };
407
- const imageWrapper = {
408
- display: "relative",
409
- sizes: "w-72 h-100 xm:w-100 xm:h-140",
410
- imgStyling: " z-10 p-20",
411
- scrollActions: "snap-start",
412
- };
413
- const toggleWrapper = {
414
- displays: "absolute flex flex-col justify-center items-center",
415
- sizes: "w-full h-full",
416
- spacings: "top-0 left-0 p-5",
417
- animations: "group pointer-events-auto bg-white/30 opacity-0 hover:opacity-100 duration-300 hover:backdrop-blur-sm",
418
- };
419
- const infoButton = {
420
- displays: "flex flex-col justify-center items-center",
421
- sizes: "gap-2 w-20 h-20 rounded-lg",
422
- colors: "bg-white text-green-dark hover:bg-green-dark hover:text-white",
423
- animations: "duration-300 shadow-main pointer-events-auto",
424
- };
425
- return (_jsxs("div", { className: cn(container), children: [_jsx("div", { className: cn(imageWrapper), children: _jsx("div", { className: "absolute top-0 left-0 w-full h-full bg-contain bg-no-repeat bg-center", style: {
426
- backgroundImage: `url(https://resource.tosel.co.kr/images/SP-COVER-PS.png)`,
427
- } }) }), bookData.map((item) => (_jsxs("div", { className: cn(imageWrapper), children: [_jsx("div", { className: "absolute top-12 left-12 w-[calc(100%-96px)] h-[calc(100%-96px)] bg-contain bg-no-repeat bg-center", style: { backgroundImage: `url(${item.imgSrc})` } }), isMD && (_jsx("div", { className: cn(toggleWrapper), children: _jsxs("div", { className: cn(infoButton), onClick: () => {
428
- window.location.href = item.link;
429
- }, children: [_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", "stroke-width": "1.5", stroke: "currentColor", className: "size-8", children: _jsx("path", { "stroke-linecap": "round", "stroke-linejoin": "round", d: "M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m3.75 9v6m3-3H9m1.5-12H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z" }) }), _jsx("div", { className: "font-medium text-xs", children: "\uB354 \uC54C\uC544\uBCF4\uAE30" })] }) }))] }, item.id)))] }));
430
- }
@@ -1,5 +0,0 @@
1
- import SectionA from "./SectionA";
2
- declare const Books: {
3
- SectionA: typeof SectionA;
4
- };
5
- export default Books;
@@ -1,5 +0,0 @@
1
- import SectionA from "./SectionA";
2
- const Books = {
3
- SectionA,
4
- };
5
- export default Books;
@@ -1,4 +0,0 @@
1
- import { ProgressReportProps } from "./Report";
2
- export default function Layout({ props }: {
3
- props: ProgressReportProps;
4
- }): import("react/jsx-runtime").JSX.Element;
@@ -1,52 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useRef } from "react";
3
- import { cn } from "../../../util";
4
- import { Label } from "../../../widget";
5
- import Action from "../Action";
6
- import ModalProvider from "../../../modal/design/Modal.design";
7
- import { useActionStore } from "../../../store";
8
- import { useReactToPrint } from "react-to-print";
9
- import MonthlyProgressReport from ".";
10
- export default function Layout({ props }) {
11
- const { setModal } = useActionStore();
12
- const container = {
13
- displays: "flex flex-col justify-center items-center",
14
- fonts: "font-pretendard-var",
15
- sizes: "w-full min-h-screen",
16
- };
17
- const header = {
18
- displays: "flex justify-end gap-3.5",
19
- sizes: "w-full max-w-[297mm]",
20
- };
21
- const ref = useRef(null);
22
- const handlePrint = useReactToPrint({
23
- contentRef: ref,
24
- });
25
- return (_jsx("div", { className: cn(container), children: _jsxs(Action.Show, { actions: [
26
- [
27
- "whatIsMPR",
28
- _jsx(ModalProvider, { titles: {
29
- title: "Monthly Progress Report",
30
- subtitle: [
31
- "MPR에서 학생들의 학습 성취도를 확인할 수 있습니다.",
32
- "토셀 랩의 커리큘럼으로 학습 능력을 끌어올리세요!",
33
- ],
34
- }, children: _jsx("div", { className: "flex justify-center items-center w-full h-80", children: _jsx("img", { src: "/images/progress/mock.png", className: "w-full h-full" }) }) }),
35
- ],
36
- ], children: [_jsxs("div", { className: cn(header), children: [_jsx(Label.Button, { title: "MPR\uC774\uB780?", option: {
37
- width: "xs",
38
- height: "xs",
39
- background: "bg-blue-navy",
40
- text: "text-white",
41
- }, onClick: () => setModal("whatIsMPR") }), _jsx(Label.Button, { title: "\uAD50\uC7AC \uB77C\uC778\uC5C5", option: {
42
- width: "xs",
43
- height: "xs",
44
- background: "bg-blue-navy",
45
- text: "text-white",
46
- }, onClick: () => window.open("https://smartstore.naver.com/tosel/shoppingstory/detail?id=5001356529&page=1") }), _jsx(Label.Button, { title: "\uCD9C\uB825\uD558\uAE30", option: {
47
- width: "xs",
48
- height: "xs",
49
- background: "bg-blue-navy",
50
- text: "text-white",
51
- }, onClick: () => handlePrint() })] }), _jsx(MonthlyProgressReport.Report, { ref: ref, props: props })] }) }));
52
- }
@@ -1,46 +0,0 @@
1
- type Score = number | null;
2
- export interface Result {
3
- createdTimestamp: number;
4
- updatedTimestamp: number;
5
- academyId: number;
6
- etc: null;
7
- report: {
8
- section1Part1: Score;
9
- section1Part2: Score;
10
- section1Part3: Score;
11
- section1Part4: Score;
12
- section2Part1: Score;
13
- section2Part2: Score;
14
- section2Part3: Score;
15
- section2Part4: Score;
16
- };
17
- rank: number;
18
- percentRank: number;
19
- id: number;
20
- setId: number;
21
- level: string;
22
- answers: number[];
23
- userId: number;
24
- }
25
- export interface ProgressReportProps {
26
- studentInfo: {
27
- name: string;
28
- birthday: string;
29
- belong?: string;
30
- academy?: string;
31
- image: string;
32
- };
33
- recentResult: Result & {
34
- examName: string;
35
- };
36
- results: {
37
- date: number;
38
- score: number;
39
- }[];
40
- comment: string | string[];
41
- commentType?: "director" | "tosel";
42
- }
43
- declare const _default: import("react").ForwardRefExoticComponent<{
44
- props: ProgressReportProps;
45
- } & import("react").RefAttributes<HTMLDivElement>>;
46
- export default _default;