@edu-tosel/design 1.0.4 → 1.0.6

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 (241) hide show
  1. package/.eslintrc.cjs +17 -0
  2. package/Dockerfile +16 -0
  3. package/LICENCE +19 -0
  4. package/README.md +20 -0
  5. package/docs/README.md +47 -0
  6. package/index.html +13 -0
  7. package/package.json +49 -28
  8. package/postcss.config.js +6 -0
  9. package/public/images/daeng.jpg +0 -0
  10. package/public/images/faker.jpg +0 -0
  11. package/public/images/haerin.png +0 -0
  12. package/public/images/haewon.png +0 -0
  13. package/public/images/hani.png +0 -0
  14. package/public/images/home/admin.png +0 -0
  15. package/public/images/home/dashboard.png +0 -0
  16. package/public/images/home/detection.png +0 -0
  17. package/public/images/home/homepage.png +0 -0
  18. package/public/images/home/olympiad.png +0 -0
  19. package/public/images/home/partner.png +0 -0
  20. package/public/images/home/report.png +0 -0
  21. package/public/images/home/space.png +0 -0
  22. package/public/images/home/sun.png +0 -0
  23. package/public/images/info.png +0 -0
  24. package/public/images/itc.png +0 -0
  25. package/public/images/jenkins.png +0 -0
  26. package/public/images/minji.png +0 -0
  27. package/public/images/seulgi.png +0 -0
  28. package/public/images/test-full.png +0 -0
  29. package/public/images/test-image.png +0 -0
  30. package/public/images/test-paper.png +0 -0
  31. package/public/images/tosel-blue-lab-spiral.png +0 -0
  32. package/public/images/tosel.png +0 -0
  33. package/public/images/yujin.png +0 -0
  34. package/public/videos/loading.gif +0 -0
  35. package/public/vite.svg +1 -0
  36. package/setupPackage.js +78 -0
  37. package/src/App.tsx +32 -0
  38. package/src/_components/asset/interface.ts +2 -0
  39. package/src/_components/asset/links.ts +17 -0
  40. package/src/_components/asset/mock/academies.ts +52 -0
  41. package/src/_components/asset/mock/chartData.ts +104 -0
  42. package/src/_components/asset/mock/exams.ts +42 -0
  43. package/src/_components/asset/mock/index.ts +2 -0
  44. package/src/_components/asset/mock/people.ts +291 -0
  45. package/src/_components/asset/mock/test.ts +67 -0
  46. package/src/_components/asset/navigation.ts +17 -0
  47. package/src/_components/asset/people.ts +226 -0
  48. package/src/_components/asset/planets.ts +49 -0
  49. package/src/_components/controller/store.ts +11 -0
  50. package/src/_components/hook/useRoute.ts +47 -0
  51. package/src/_components/hook/useTyping.ts +46 -0
  52. package/src/_components/types/Level.ts +1 -0
  53. package/src/_components/view/Explore.tsx +16 -0
  54. package/src/_components/view/Home.tsx +180 -0
  55. package/src/_components/view/LottiePlayer.tsx +17 -0
  56. package/src/app/admin/exam/page.tsx +36 -0
  57. package/src/app/admin/grade/page.tsx +5 -0
  58. package/src/app/admin/layout.tsx +56 -0
  59. package/src/app/admin/news/page.tsx +15 -0
  60. package/src/app/admin/page.tsx +42 -0
  61. package/src/app/admin/rnd/monthly-test/page.tsx +5 -0
  62. package/src/app/admin/rnd/page.tsx +17 -0
  63. package/src/app/admin/statistics/page.tsx +5 -0
  64. package/src/app/admin/user/page.tsx +147 -0
  65. package/src/app/agency/exam/page.tsx +5 -0
  66. package/src/app/agency/group/page.tsx +5 -0
  67. package/src/app/agency/layout.tsx +55 -0
  68. package/src/app/agency/page.tsx +68 -0
  69. package/src/app/agency/sales/page.tsx +5 -0
  70. package/src/app/convention/page.tsx +58 -0
  71. package/src/app/page.tsx +4 -0
  72. package/src/asset/fonts/Kostar.ttf +0 -0
  73. package/src/asset/fonts/Megrim.ttf +0 -0
  74. package/src/asset/fonts/NicoMoji.ttf +0 -0
  75. package/src/asset/fonts/Pretendard-Medium.otf +0 -0
  76. package/{board/index.d.ts → src/board/index.tsx} +4 -3
  77. package/src/board/template/CanvasBoard.tsx +17 -0
  78. package/src/board/template/ManageBoard.tsx +56 -0
  79. package/src/board/widget/Board.tsx +28 -0
  80. package/src/board/widget/DataField.tsx +70 -0
  81. package/src/board/widget/Header.tsx +63 -0
  82. package/src/board/widget/Tab.tsx +36 -0
  83. package/src/board/widget/Tags.tsx +81 -0
  84. package/{card/index.d.ts → src/card/index.tsx} +6 -5
  85. package/src/card/template/ChartCard.tsx +42 -0
  86. package/src/card/template/InfoCard.tsx +22 -0
  87. package/src/card/template/ProfileCard.tsx +36 -0
  88. package/src/card/template/RowCard.tsx +91 -0
  89. package/src/card/template/TableCard.tsx +41 -0
  90. package/src/card/template/TrumpCard.tsx +46 -0
  91. package/src/card/widget/Card.tsx +53 -0
  92. package/src/deck/Deck.tsx +46 -0
  93. package/{deck/index.d.ts → src/deck/index.tsx} +1 -1
  94. package/{index.d.ts → src/index.tsx} +11 -11
  95. package/src/interaction/Exception.tsx +10 -0
  96. package/src/interaction/LoadingSpinner.tsx +10 -0
  97. package/src/interaction/NoData.tsx +5 -0
  98. package/{interaction/index.d.ts → src/interaction/index.tsx} +2 -2
  99. package/src/interface/Board.ts +55 -0
  100. package/src/interface/Card.ts +66 -0
  101. package/src/interface/HTMLElement.ts +27 -0
  102. package/src/interface/Interaction.ts +4 -0
  103. package/src/interface/Menu.ts +5 -0
  104. package/src/interface/Modal.ts +19 -0
  105. package/{interface/Property.d.ts → src/interface/Property.ts} +46 -34
  106. package/src/interface/Widget.ts +4 -0
  107. package/{interface/index.d.ts → src/interface/index.ts} +3 -2
  108. package/src/layout/dashboard/Header.tsx +56 -0
  109. package/src/layout/dashboard/index.tsx +38 -0
  110. package/{layout/index.d.ts → src/layout/index.tsx} +1 -1
  111. package/src/main.tsx +10 -0
  112. package/src/menu/SideMenu.tsx +104 -0
  113. package/{menu/index.d.ts → src/menu/index.tsx} +1 -1
  114. package/src/modal/AlertModal.tsx +24 -0
  115. package/src/modal/ControllerModal.tsx +17 -0
  116. package/src/modal/Modal.tsx +66 -0
  117. package/src/modal/TestModal.tsx +19 -0
  118. package/{modal/index.d.ts → src/modal/index.tsx} +3 -3
  119. package/src/navigation/Navigation.tsx +37 -0
  120. package/{navigation/index.d.ts → src/navigation/index.tsx} +1 -1
  121. package/src/shelf/Shelf.tsx +3 -0
  122. package/{shelf/index.d.ts → src/shelf/index.tsx} +1 -1
  123. package/src/store/index.ts +66 -0
  124. package/src/text/LineBreaks.tsx +13 -0
  125. package/{text/index.d.ts → src/text/index.tsx} +1 -1
  126. package/src/util/classNames.ts +4 -0
  127. package/src/util/colors.ts +11 -0
  128. package/src/util/display.ts +31 -0
  129. package/src/util/displayResponsive.ts +17 -0
  130. package/{util/index.d.ts → src/util/index.ts} +7 -7
  131. package/src/util/pattern.ts +18 -0
  132. package/src/util/position.ts +43 -0
  133. package/src/util/shape.ts +3 -0
  134. package/src/vite-env.d.ts +1 -0
  135. package/tsconfig.build.json +42 -0
  136. package/tsconfig.json +28 -0
  137. package/tsconfig.node.json +10 -0
  138. package/vite.config.ts +10 -0
  139. package/board/index.js +0 -3
  140. package/board/template/CanvasBoard.d.ts +0 -2
  141. package/board/template/CanvasBoard.js +0 -10
  142. package/board/template/ManageBoard.d.ts +0 -4
  143. package/board/template/ManageBoard.js +0 -28
  144. package/board/widget/Board.d.ts +0 -2
  145. package/board/widget/Board.js +0 -16
  146. package/board/widget/DataField.d.ts +0 -6
  147. package/board/widget/DataField.js +0 -24
  148. package/board/widget/Header.d.ts +0 -2
  149. package/board/widget/Header.js +0 -22
  150. package/board/widget/Tab.d.ts +0 -4
  151. package/board/widget/Tab.js +0 -17
  152. package/board/widget/Tags.d.ts +0 -3
  153. package/board/widget/Tags.js +0 -30
  154. package/card/index.js +0 -5
  155. package/card/template/ChartCard.d.ts +0 -2
  156. package/card/template/ChartCard.js +0 -6
  157. package/card/template/ProfileCard.d.ts +0 -14
  158. package/card/template/ProfileCard.js +0 -8
  159. package/card/template/RowCard.d.ts +0 -5
  160. package/card/template/RowCard.js +0 -26
  161. package/card/template/TableCard.d.ts +0 -2
  162. package/card/template/TableCard.js +0 -12
  163. package/card/template/TrumpCard.d.ts +0 -2
  164. package/card/template/TrumpCard.js +0 -19
  165. package/card/widget/Card.d.ts +0 -2
  166. package/card/widget/Card.js +0 -45
  167. package/deck/Deck.d.ts +0 -16
  168. package/deck/Deck.js +0 -15
  169. package/deck/index.js +0 -1
  170. package/index.js +0 -11
  171. package/interaction/Exception.d.ts +0 -2
  172. package/interaction/Exception.js +0 -9
  173. package/interaction/LoadingSpinner.d.ts +0 -1
  174. package/interaction/LoadingSpinner.js +0 -5
  175. package/interaction/index.js +0 -2
  176. package/interface/Board.d.ts +0 -57
  177. package/interface/Board.js +0 -1
  178. package/interface/Card.d.ts +0 -73
  179. package/interface/Card.js +0 -1
  180. package/interface/HTMLElement.d.ts +0 -13
  181. package/interface/HTMLElement.js +0 -1
  182. package/interface/Interaction.d.ts +0 -5
  183. package/interface/Interaction.js +0 -1
  184. package/interface/Modal.d.ts +0 -18
  185. package/interface/Modal.js +0 -1
  186. package/interface/Property.js +0 -14
  187. package/interface/Widget.d.ts +0 -4
  188. package/interface/Widget.js +0 -1
  189. package/interface/index.js +0 -2
  190. package/layout/dashboard/Header.d.ts +0 -5
  191. package/layout/dashboard/Header.js +0 -19
  192. package/layout/dashboard/index.d.ts +0 -7
  193. package/layout/dashboard/index.js +0 -10
  194. package/layout/index.js +0 -1
  195. package/menu/SideMenu.d.ts +0 -1
  196. package/menu/SideMenu.js +0 -14
  197. package/menu/index.js +0 -1
  198. package/modal/AlertModal.d.ts +0 -2
  199. package/modal/AlertModal.js +0 -8
  200. package/modal/ControllerModal.d.ts +0 -6
  201. package/modal/ControllerModal.js +0 -6
  202. package/modal/Modal.d.ts +0 -2
  203. package/modal/Modal.js +0 -31
  204. package/modal/TestModal.d.ts +0 -8
  205. package/modal/TestModal.js +0 -6
  206. package/modal/index.js +0 -3
  207. package/navigation/Navigation.d.ts +0 -5
  208. package/navigation/Navigation.js +0 -24
  209. package/navigation/index.js +0 -1
  210. package/shelf/Shelf.d.ts +0 -4
  211. package/shelf/Shelf.js +0 -4
  212. package/shelf/index.js +0 -1
  213. package/store/index.d.ts +0 -16
  214. package/store/index.js +0 -39
  215. package/text/LineBreaks.d.ts +0 -4
  216. package/text/LineBreaks.js +0 -5
  217. package/text/index.js +0 -1
  218. package/util/classNames.d.ts +0 -1
  219. package/util/classNames.js +0 -4
  220. package/util/colors.d.ts +0 -10
  221. package/util/colors.js +0 -10
  222. package/util/display.d.ts +0 -25
  223. package/util/display.js +0 -25
  224. package/util/displayResponsive.d.ts +0 -3
  225. package/util/displayResponsive.js +0 -15
  226. package/util/index.js +0 -7
  227. package/util/pattern.d.ts +0 -7
  228. package/util/pattern.js +0 -15
  229. package/util/position.d.ts +0 -14
  230. package/util/position.js +0 -44
  231. package/util/shape.d.ts +0 -1
  232. package/util/shape.js +0 -3
  233. package/version.txt +0 -1
  234. /package/{asset → public}/fonts/Kostar.ttf +0 -0
  235. /package/{asset → public}/fonts/Megrim.ttf +0 -0
  236. /package/{asset → public}/fonts/NicoMoji.ttf +0 -0
  237. /package/{asset → public}/fonts/Pretendard-Medium.otf +0 -0
  238. /package/{asset → src/asset}/json/credit-lottie.json +0 -0
  239. /package/{asset → src/asset}/json/loading-lottie.json +0 -0
  240. /package/{asset → src/asset}/json/test.svg +0 -0
  241. /package/{globals.css → src/globals.css} +0 -0
@@ -0,0 +1,291 @@
1
+ import { Level } from "../../types/Level";
2
+
3
+ export interface User {
4
+ id: number;
5
+ name: string;
6
+ birthday: string;
7
+ level: Level;
8
+ phone: string;
9
+ }
10
+ export const users: User[] | undefined = [
11
+ {
12
+ id: 1,
13
+ name: "홍길동",
14
+ birthday: "1990-01-01",
15
+ level: "PS",
16
+ phone: "010-1234-5678",
17
+ },
18
+ {
19
+ id: 2,
20
+ name: "김토셀",
21
+ birthday: "1995-02-02",
22
+ level: "PS",
23
+ phone: "010-2345-6789",
24
+ },
25
+ {
26
+ id: 3,
27
+ name: "히토시스리키박주니어",
28
+ birthday: "2000-03-03",
29
+ level: "ST",
30
+ phone: "010-3456-7890",
31
+ },
32
+ {
33
+ id: 4,
34
+ name: "Jason Seo",
35
+ birthday: "2005-04-04",
36
+ level: "HJ",
37
+ phone: "010-4567-8901",
38
+ },
39
+ {
40
+ id: 5,
41
+ name: "최영미",
42
+ birthday: "2010-05-05",
43
+ level: "JR",
44
+ phone: "010-5678-9012",
45
+ },
46
+ {
47
+ id: 6,
48
+ name: "정영철",
49
+ birthday: "2015-06-06",
50
+ level: "BA",
51
+ phone: "010-6789-0123",
52
+ },
53
+ {
54
+ id: 7,
55
+ name: "이영희",
56
+ birthday: "2000-03-03",
57
+ level: "ST",
58
+ phone: "010-3456-7890",
59
+ },
60
+ {
61
+ id: 8,
62
+ name: "박영수",
63
+ birthday: "2005-04-04",
64
+ level: "HJ",
65
+ phone: "010-4567-8901",
66
+ },
67
+ {
68
+ id: 9,
69
+ name: "최영미",
70
+ birthday: "2010-05-05",
71
+ level: "JR",
72
+ phone: "010-5678-9012",
73
+ },
74
+ {
75
+ id: 10,
76
+ name: "Michael Jackson",
77
+ birthday: "2015-06-06",
78
+ level: "BA",
79
+ phone: "010-6789-0123",
80
+ },
81
+ {
82
+ id: 11,
83
+ name: "박명수",
84
+ birthday: "1995-07-03",
85
+ level: "HJ",
86
+ phone: "010-5921-3802",
87
+ },
88
+ {
89
+ id: 12,
90
+ name: "노홍철",
91
+ birthday: "1993-07-14",
92
+ level: "ST",
93
+ phone: "010-9454-2481",
94
+ },
95
+ {
96
+ id: 13,
97
+ name: "김수현",
98
+ birthday: "1994-05-22",
99
+ level: "PS",
100
+ phone: "010-3214-6542",
101
+ },
102
+ {
103
+ id: 14,
104
+ name: "조세호",
105
+ birthday: "1992-02-19",
106
+ level: "JR",
107
+ phone: "010-5643-7890",
108
+ },
109
+ {
110
+ id: 15,
111
+ name: "김신영",
112
+ birthday: "1996-08-05",
113
+ level: "BA",
114
+ phone: "010-4321-1987",
115
+ },
116
+ {
117
+ id: 16,
118
+ name: "안정환",
119
+ birthday: "1991-07-27",
120
+ level: "HJ",
121
+ phone: "010-7890-4563",
122
+ },
123
+ {
124
+ id: 17,
125
+ name: "박세리",
126
+ birthday: "1993-03-01",
127
+ level: "ST",
128
+ phone: "010-2134-5467",
129
+ },
130
+ {
131
+ id: 18,
132
+ name: "김연아",
133
+ birthday: "1994-09-05",
134
+ level: "JR",
135
+ phone: "010-6789-1234",
136
+ },
137
+ {
138
+ id: 19,
139
+ name: "손나은",
140
+ birthday: "1995-10-10",
141
+ level: "PS",
142
+ phone: "010-9876-5432",
143
+ },
144
+ {
145
+ id: 20,
146
+ name: "최강창민",
147
+ birthday: "1992-04-18",
148
+ level: "BA",
149
+ phone: "010-4567-8901",
150
+ },
151
+ {
152
+ id: 21,
153
+ name: "윤아",
154
+ birthday: "1993-05-30",
155
+ level: "HJ",
156
+ phone: "010-1122-3344",
157
+ },
158
+ {
159
+ id: 22,
160
+ name: "이광수",
161
+ birthday: "1991-07-14",
162
+ level: "ST",
163
+ phone: "010-2233-4455",
164
+ },
165
+ {
166
+ id: 23,
167
+ name: "김태호",
168
+ birthday: "1990-11-23",
169
+ level: "JR",
170
+ phone: "010-3344-5566",
171
+ },
172
+ {
173
+ id: 24,
174
+ name: "박지성",
175
+ birthday: "1994-02-25",
176
+ level: "PS",
177
+ phone: "010-4455-6677",
178
+ },
179
+ {
180
+ id: 25,
181
+ name: "이승기",
182
+ birthday: "1992-01-13",
183
+ level: "BA",
184
+ phone: "010-5566-7788",
185
+ },
186
+ {
187
+ id: 26,
188
+ name: "공유",
189
+ birthday: "1993-07-10",
190
+ level: "HJ",
191
+ phone: "010-6677-8899",
192
+ },
193
+ {
194
+ id: 27,
195
+ name: "손흥민",
196
+ birthday: "1992-07-08",
197
+ level: "ST",
198
+ phone: "010-7788-9900",
199
+ },
200
+ {
201
+ id: 28,
202
+ name: "이민호",
203
+ birthday: "1991-06-22",
204
+ level: "JR",
205
+ phone: "010-8899-0011",
206
+ },
207
+ {
208
+ id: 29,
209
+ name: "배수지",
210
+ birthday: "1994-10-10",
211
+ level: "PS",
212
+ phone: "010-9900-1122",
213
+ },
214
+ {
215
+ id: 30,
216
+ name: "강다니엘",
217
+ birthday: "1996-12-10",
218
+ level: "BA",
219
+ phone: "010-0011-2233",
220
+ },
221
+ {
222
+ id: 31,
223
+ name: "진지희",
224
+ birthday: "1995-08-25",
225
+ level: "HJ",
226
+ phone: "010-1122-3344",
227
+ },
228
+ {
229
+ id: 32,
230
+ name: "이효리",
231
+ birthday: "1993-05-10",
232
+ level: "ST",
233
+ phone: "010-2233-4455",
234
+ },
235
+ {
236
+ id: 33,
237
+ name: "양세형",
238
+ birthday: "1991-08-09",
239
+ level: "JR",
240
+ phone: "010-3344-5566",
241
+ },
242
+ {
243
+ id: 34,
244
+ name: "정준하",
245
+ birthday: "1992-03-18",
246
+ level: "PS",
247
+ phone: "010-4455-6677",
248
+ },
249
+ {
250
+ id: 35,
251
+ name: "하하",
252
+ birthday: "1994-07-20",
253
+ level: "BA",
254
+ phone: "010-5566-7788",
255
+ },
256
+ {
257
+ id: 36,
258
+ name: "김종국",
259
+ birthday: "1995-04-25",
260
+ level: "HJ",
261
+ phone: "010-6677-8899",
262
+ },
263
+ {
264
+ id: 37,
265
+ name: "정형돈",
266
+ birthday: "1993-02-07",
267
+ level: "ST",
268
+ phone: "010-7788-9900",
269
+ },
270
+ {
271
+ id: 38,
272
+ name: "송민호",
273
+ birthday: "1994-03-30",
274
+ level: "JR",
275
+ phone: "010-8899-0011",
276
+ },
277
+ {
278
+ id: 39,
279
+ name: "강호동",
280
+ birthday: "1991-06-11",
281
+ level: "PS",
282
+ phone: "010-9900-1122",
283
+ },
284
+ {
285
+ id: 40,
286
+ name: "유재석",
287
+ birthday: "1972-08-14",
288
+ level: "BA",
289
+ phone: "010-0011-2233",
290
+ },
291
+ ];
@@ -0,0 +1,67 @@
1
+ import { HTMLElementSetting } from "../../../interface";
2
+ import { Level } from "../../types/Level";
3
+
4
+ export interface User {
5
+ id: number;
6
+ name: string;
7
+ birthday: string;
8
+ level: Level;
9
+ phone: string;
10
+ }
11
+
12
+ export const settings: HTMLElementSetting = {
13
+ id: {
14
+ label: "ID",
15
+ type: "input",
16
+ },
17
+ level: {
18
+ label: "레벨",
19
+ type: "select" as const,
20
+ options: [
21
+ ["PS", "Pre-Starter"],
22
+ ["ST", "Starter"],
23
+ ["BA", "Basic"],
24
+ ["JR", "Junior"],
25
+ ["HJ", "High Junior"],
26
+ ] as [string, string][],
27
+ },
28
+ };
29
+
30
+ export const users: User[] | undefined = [
31
+ {
32
+ id: 1,
33
+ name: "홍길동",
34
+ birthday: "1990-01-01",
35
+ level: "PS",
36
+ phone: "010-1234-5678",
37
+ },
38
+ {
39
+ id: 2,
40
+ name: "김토셀",
41
+ birthday: "1995-02-02",
42
+ level: "PS",
43
+ phone: "010-2345-6789",
44
+ },
45
+ ];
46
+
47
+ interface UserLog {
48
+ id: number;
49
+ title: string;
50
+ paymentKey: string;
51
+ date: string;
52
+ }
53
+
54
+ export const userLogs: UserLog[] | undefined = [
55
+ {
56
+ id: 1,
57
+ title: "정기시험 1회 응시",
58
+ paymentKey: "1234",
59
+ date: "2021-01-01",
60
+ },
61
+ {
62
+ id: 2,
63
+ title: "정기시험 2회 응시",
64
+ paymentKey: "2345",
65
+ date: "2021-02-01",
66
+ },
67
+ ];
@@ -0,0 +1,17 @@
1
+ export const contents = [
2
+ {
3
+ title: "홈",
4
+ href: "/dashboard",
5
+ icon: "",
6
+ },
7
+ {
8
+ title: "접수",
9
+ href: "/dashboard/application",
10
+ icon: "",
11
+ },
12
+ {
13
+ title: "성적확인",
14
+ href: "/dashboard/report",
15
+ icon: "",
16
+ },
17
+ ];
@@ -0,0 +1,226 @@
1
+ export const people = [
2
+ {
3
+ info: {
4
+ name: "이상혁",
5
+ birthday: "1996-05-07",
6
+ image: "/images/faker.jpg",
7
+ },
8
+ },
9
+ {
10
+ info: {
11
+ name: "젠킨스",
12
+ birthday: "1997-05-08",
13
+ image: "/images/jenkins.png",
14
+ },
15
+ },
16
+ {
17
+ info: {
18
+ name: "댕댕이",
19
+ birthday: "2012-04-13",
20
+ image: "/images/daeng.jpg",
21
+ },
22
+ },
23
+ {
24
+ info: {
25
+ name: "김민지",
26
+ birthday: "2004-05-07",
27
+ image: "/images/minji.png",
28
+ },
29
+ },
30
+ {
31
+ info: {
32
+ name: "팜하니",
33
+ birthday: "2004-10-06",
34
+ image: "/images/hani.png",
35
+ },
36
+ },
37
+ {
38
+ info: {
39
+ name: "오해원",
40
+ birthday: "2003-02-25",
41
+ image: "/images/haewon.png",
42
+ },
43
+ },
44
+ {
45
+ info: {
46
+ name: "안유진",
47
+ birthday: "2003-09-01",
48
+ image: "/images/yujin.png",
49
+ },
50
+ },
51
+ {
52
+ info: {
53
+ name: "강슬기",
54
+ birthday: "1994-02-10",
55
+ image: "/images/seulgi.png",
56
+ },
57
+ },
58
+ {
59
+ info: {
60
+ name: "강해린",
61
+ birthday: "2006-05-15",
62
+ image: "/images/haerin.png",
63
+ },
64
+ },
65
+ {
66
+ info: {
67
+ name: "TOSEL",
68
+ birthday: "2006-05-15",
69
+ image: null,
70
+ },
71
+ },
72
+ {
73
+ info: {
74
+ name: "TOSEL",
75
+ birthday: "2006-05-15",
76
+ image: null,
77
+ },
78
+ },
79
+ {
80
+ info: {
81
+ name: "TOSEL",
82
+ birthday: "2006-05-15",
83
+ image: null,
84
+ },
85
+ },
86
+ {
87
+ info: {
88
+ name: "TOSEL",
89
+ birthday: "2006-05-15",
90
+ image: null,
91
+ },
92
+ },
93
+ {
94
+ info: {
95
+ name: "TOSEL",
96
+ birthday: "2006-05-15",
97
+ image: null,
98
+ },
99
+ },
100
+ {
101
+ info: {
102
+ name: "TOSEL",
103
+ birthday: "2006-05-15",
104
+ image: null,
105
+ },
106
+ },
107
+ {
108
+ info: {
109
+ name: "TOSEL",
110
+ birthday: "2006-05-15",
111
+ image: null,
112
+ },
113
+ },
114
+ {
115
+ info: {
116
+ name: "TOSEL",
117
+ birthday: "2006-05-15",
118
+ image: null,
119
+ },
120
+ },
121
+ {
122
+ info: {
123
+ name: "TOSEL",
124
+ birthday: "2006-05-15",
125
+ image: null,
126
+ },
127
+ },
128
+ {
129
+ info: {
130
+ name: "TOSEL",
131
+ birthday: "2006-05-15",
132
+ image: null,
133
+ },
134
+ },
135
+ {
136
+ info: {
137
+ name: "TOSEL",
138
+ birthday: "2006-05-15",
139
+ image: null,
140
+ },
141
+ },
142
+ {
143
+ info: {
144
+ name: "TOSEL",
145
+ birthday: "2006-05-15",
146
+ image: null,
147
+ },
148
+ },
149
+ {
150
+ info: {
151
+ name: "TOSEL",
152
+ birthday: "2006-05-15",
153
+ image: null,
154
+ },
155
+ },
156
+ {
157
+ info: {
158
+ name: "TOSEL",
159
+ birthday: "2006-05-15",
160
+ image: null,
161
+ },
162
+ },
163
+ {
164
+ info: {
165
+ name: "TOSEL",
166
+ birthday: "2006-05-15",
167
+ image: null,
168
+ },
169
+ },
170
+ {
171
+ info: {
172
+ name: "TOSEL",
173
+ birthday: "2006-05-15",
174
+ image: null,
175
+ },
176
+ },
177
+ {
178
+ info: {
179
+ name: "TOSEL",
180
+ birthday: "2006-05-15",
181
+ image: null,
182
+ },
183
+ },
184
+ {
185
+ info: {
186
+ name: "TOSEL",
187
+ birthday: "2006-05-15",
188
+ image: null,
189
+ },
190
+ },
191
+ {
192
+ info: {
193
+ name: "TOSEL",
194
+ birthday: "2006-05-15",
195
+ image: null,
196
+ },
197
+ },
198
+ {
199
+ info: {
200
+ name: "TOSEL",
201
+ birthday: "2006-05-15",
202
+ image: null,
203
+ },
204
+ },
205
+ {
206
+ info: {
207
+ name: "TOSEL",
208
+ birthday: "2006-05-15",
209
+ image: null,
210
+ },
211
+ },
212
+ {
213
+ info: {
214
+ name: "TOSEL",
215
+ birthday: "2006-05-15",
216
+ image: null,
217
+ },
218
+ },
219
+ {
220
+ info: {
221
+ name: "TOSEL",
222
+ birthday: "2006-05-15",
223
+ image: null,
224
+ },
225
+ },
226
+ ];
@@ -0,0 +1,49 @@
1
+ import { Planet } from "./interface";
2
+
3
+ export const planets: Record<Planet, Record<string, string>> = {
4
+ olympiad: {
5
+ title: "PROJECT: OLYMPIAD",
6
+ href: "https://olympiad.tosel.co.kr",
7
+ description: `
8
+ 올림피아드는 IBT방식의 영어단어 경시대회 및 영어말하기 대회로 기획되었다.
9
+ 브라우저에서 도입할 수 있는 치팅 방지 시스템을 개발하였다.
10
+ 또한, 영어말하기 대회에서는 녹음을 통해 음성을 전송할 예정이다.
11
+
12
+ 올림피아드를 참고하여 토셀 IBT 시험도 개발될 예정이다.
13
+ `,
14
+ },
15
+ admin: {
16
+ title: "PROJECT: ADMIN",
17
+ href: "/admin",
18
+ description: `
19
+ 와썹폐기
20
+ `,
21
+ },
22
+ partner: {
23
+ title: "PROJECT: PARTNER",
24
+ href: "/partner",
25
+ description: `
26
+ 지본용
27
+ `,
28
+ },
29
+ report: {
30
+ title: "PROJECT: REPORT",
31
+ href: "/report",
32
+ description: `
33
+ 기존의 성적 분석 자료 및 성적표를 대체할 새로운 성적 분석 자료로 기획되었다.
34
+ 온라인 친화적인 웹뷰와 함께, 다양한 기능을 제공할 것이다.
35
+ 또한, 기존의 출력물을 대체할 수 있도록, 다양한 출력물을 제공할 것이다.
36
+
37
+ 성적표 프로젝트를 진행하면서 성적 처리 시스템도 보완하였다.
38
+ `,
39
+ },
40
+ homepage: {
41
+ title: "PROJECT: HOMEPAGE (NEW)",
42
+ href: "/homepage",
43
+ description: `
44
+ TOSEL의 신규사이트이다.
45
+ 기존의 사이트는 불필요한 정보가 많아서 사용자가 원하는 정보를 찾기 어려웠다.
46
+ 이를 개선하기 위해 새로운 사이트를 기획하였다.
47
+ `,
48
+ },
49
+ };
@@ -0,0 +1,11 @@
1
+ import { create } from "zustand";
2
+
3
+ interface PreviewProps {
4
+ planet: string;
5
+ setPlanet: (planet: string) => void;
6
+ }
7
+
8
+ export const usePreviewStore = create<PreviewProps>((set) => ({
9
+ planet: "",
10
+ setPlanet: (planet) => set({ planet }),
11
+ }));
@@ -0,0 +1,47 @@
1
+ import { useState, useEffect, ComponentType } from "react";
2
+
3
+ type PageComponent = ComponentType<any>;
4
+
5
+ type RouteItem = {
6
+ path: string;
7
+ component: PageComponent;
8
+ layout: PageComponent | null;
9
+ };
10
+ const LAYOUTS = import.meta.glob("/src/app/**/layout.tsx") as Record<
11
+ string,
12
+ () => Promise<{ default: PageComponent }>
13
+ >;
14
+ const COMPONENTS = import.meta.glob("/src/app/**/[a-z[]*.tsx") as Record<
15
+ string,
16
+ () => Promise<{ default: PageComponent }>
17
+ >;
18
+
19
+ export default function useRoute() {
20
+ const [routes, setRoutes] = useState<RouteItem[]>([]);
21
+ useEffect(() => {
22
+ const loadRoutes = async () => {
23
+ const routeItems: RouteItem[] = await Promise.all(
24
+ Object.keys(COMPONENTS).map(async (key) => {
25
+ const path = key
26
+ .replace(/\/src\/app|page|\.tsx$/g, "")
27
+ .replace(/\[\.{3}.+\]/, "*")
28
+ .replace(/\[(.+)\]/, ":$1");
29
+ const Component = (await COMPONENTS[key]()).default;
30
+ const layoutPath = Object.keys(LAYOUTS).find((layoutKey) =>
31
+ key.startsWith(layoutKey.replace(/layout.tsx$/, ""))
32
+ );
33
+ const Layout = layoutPath
34
+ ? (await LAYOUTS[layoutPath]()).default
35
+ : null;
36
+
37
+ return { path, component: Component, layout: Layout };
38
+ })
39
+ );
40
+
41
+ setRoutes(routeItems);
42
+ };
43
+ loadRoutes();
44
+ }, []);
45
+
46
+ return routes;
47
+ }