@tipp/ui 2.3.35 → 2.3.37
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/dist/app/index.cjs.map +1 -1
- package/dist/app/index.js +59 -59
- package/dist/app/platform/coach-question-list.cjs.map +1 -1
- package/dist/app/platform/coach-question-list.js +26 -26
- package/dist/app/platform/contents-card.cjs.map +1 -1
- package/dist/app/platform/contents-card.js +26 -26
- package/dist/app/platform/curriculum-card.js +2 -2
- package/dist/app/platform/edit-coaching-time.cjs.map +1 -1
- package/dist/app/platform/edit-coaching-time.js +47 -47
- package/dist/app/platform/edit-service-type.cjs.map +1 -1
- package/dist/app/platform/edit-service-type.js +47 -47
- package/dist/app/platform/goal-manage-card-edit.cjs.map +1 -1
- package/dist/app/platform/goal-manage-card-edit.js +48 -48
- package/dist/app/platform/goal-manage-card-read.cjs.map +1 -1
- package/dist/app/platform/goal-manage-card-read.js +26 -26
- package/dist/app/platform/on-offline-radio-card.cjs.map +1 -1
- package/dist/app/platform/on-offline-radio-card.js +47 -47
- package/dist/app/platform/report-card.cjs.map +1 -1
- package/dist/app/platform/report-card.js +26 -26
- package/dist/app/platform/reservation-card.cjs.map +1 -1
- package/dist/app/platform/reservation-card.js +48 -48
- package/dist/app/platform/session-card.cjs.map +1 -1
- package/dist/app/platform/session-card.js +48 -48
- package/dist/app/platform/session-review-simple-read.cjs.map +1 -1
- package/dist/app/platform/session-review-simple-read.js +26 -26
- package/dist/app/platform/userInfos/coaching-customer-info/index.cjs.map +1 -1
- package/dist/app/platform/userInfos/coaching-customer-info/index.js +28 -28
- package/dist/app/platform/userInfos/coaching-customer-info/large.cjs.map +1 -1
- package/dist/app/platform/userInfos/coaching-customer-info/large.js +26 -26
- package/dist/app/platform/userInfos/coaching-customer-info/medium.cjs.map +1 -1
- package/dist/app/platform/userInfos/coaching-customer-info/medium.js +26 -26
- package/dist/app/platform/userInfos/coaching-customer-info/small.cjs.map +1 -1
- package/dist/app/platform/userInfos/coaching-customer-info/small.js +25 -25
- package/dist/app/platform/userInfos/session-user-info-detail.cjs.map +1 -1
- package/dist/app/platform/userInfos/session-user-info-detail.js +25 -25
- package/dist/app/platform/userInfos/utils.cjs.map +1 -1
- package/dist/app/platform/userInfos/utils.js +25 -25
- package/dist/atoms/index.cjs +21 -28
- package/dist/atoms/index.cjs.map +1 -1
- package/dist/atoms/index.js +60 -60
- package/dist/atoms/pagination.cjs +21 -28
- package/dist/atoms/pagination.cjs.map +1 -1
- package/dist/atoms/pagination.d.cts +1 -1
- package/dist/atoms/pagination.d.ts +1 -1
- package/dist/atoms/pagination.js +1 -1
- package/dist/{chunk-P5GENHKO.js → chunk-2XNWJT3U.js} +9 -9
- package/dist/{chunk-WH6QD4SY.js → chunk-3DEAIJBF.js} +10 -10
- package/dist/{chunk-RM5CQ77X.js → chunk-3JRHAKLV.js} +7 -7
- package/dist/{chunk-QKZTZUWP.js → chunk-3Z2XZ4ZG.js} +4 -4
- package/dist/{chunk-CIQ7ELE6.js → chunk-4QHXYLE4.js} +4 -4
- package/dist/{chunk-7R65MUL6.js → chunk-6UXCNYVO.js} +4 -4
- package/dist/{chunk-QEDJOAP6.js → chunk-BFRNEBJN.js} +4 -4
- package/dist/{chunk-YPEB36YK.js → chunk-BKYPABII.js} +5 -5
- package/dist/{chunk-AYWPBD4T.js → chunk-CI2XFT7Y.js} +4 -4
- package/dist/{chunk-LATTGN7W.js → chunk-E5ZJDDZH.js} +4 -4
- package/dist/{chunk-V3F7KAR6.js → chunk-GFRYS4IN.js} +2 -2
- package/dist/{chunk-OILH5J7Q.js → chunk-GXG26SHU.js} +4 -4
- package/dist/{chunk-5WX7CODZ.js → chunk-GXPEADVY.js} +7 -7
- package/dist/{chunk-2U7C7J5P.js → chunk-GXWE3QNN.js} +4 -4
- package/dist/{chunk-ESM3HX57.js → chunk-HIMIOODO.js} +3 -3
- package/dist/{chunk-U3FBMFRL.js → chunk-I5RQ5T4B.js} +10 -10
- package/dist/{chunk-NTJLECYY.js → chunk-JFJ3N4V5.js} +4 -4
- package/dist/{chunk-ZA4NYPSW.js → chunk-JRSZNGFD.js} +5 -5
- package/dist/{chunk-GTO7GG2K.js → chunk-KCAOUZCT.js} +2 -2
- package/dist/{chunk-62HSZXVT.js → chunk-KD6EXWP7.js} +4 -4
- package/dist/{chunk-AA6OYHCE.js → chunk-MIATMZDP.js} +4 -4
- package/dist/{chunk-SLJLEPD2.js → chunk-MLAQDU6U.js} +14 -1
- package/dist/chunk-MLAQDU6U.js.map +1 -0
- package/dist/{chunk-HTNDVNLQ.js → chunk-MPZJH3PI.js} +4 -4
- package/dist/{chunk-F7LTJOOC.js → chunk-OXZ25J7F.js} +23 -36
- package/dist/chunk-OXZ25J7F.js.map +1 -0
- package/dist/{chunk-2TNZVHXZ.js → chunk-QANVXCYU.js} +2 -2
- package/dist/{chunk-64XYTE54.js → chunk-RFXVHZAN.js} +4 -4
- package/dist/{chunk-F7JSPN5P.js → chunk-SACH3XVV.js} +4 -4
- package/dist/{chunk-DWBYAHIR.js → chunk-SNPAB3HJ.js} +4 -4
- package/dist/{chunk-5TZNUXBT.js → chunk-SSSGPTRM.js} +4 -4
- package/dist/{chunk-6MQMVYEP.js → chunk-TTVJOFG5.js} +3 -3
- package/dist/{chunk-SRZK4OC5.js → chunk-V7MD4RRM.js} +2 -2
- package/dist/{chunk-PGUDVR3V.js → chunk-XWNFR24N.js} +2 -2
- package/dist/{chunk-TCFXG4AX.js → chunk-XXMZLXDE.js} +7 -7
- package/dist/{chunk-7R5KG7SJ.js → chunk-ZKS3IW7D.js} +4 -4
- package/dist/{chunk-5OLJJUMC.js → chunk-ZVSATS4O.js} +7 -7
- package/dist/context/index.js +1 -1
- package/dist/index.cjs +34 -28
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +104 -104
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.js +7 -7
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-body.js +6 -6
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-radio.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-option.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-text.js +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-text.js +3 -3
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.js +10 -10
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.js +11 -11
- package/dist/molecules/curriculumV2/CurriculumContents/index.js +12 -12
- package/dist/molecules/curriculumV2/CurriculumSidebar/index.js +1 -1
- package/dist/molecules/curriculumV2/index.js +13 -13
- package/dist/molecules/description-json-render.js +2 -2
- package/dist/molecules/dynamic-field.js +3 -3
- package/dist/molecules/dynamic-form-editor-field-editor-panel.js +3 -3
- package/dist/molecules/dynamic-form-editor-field-list-panel.js +2 -2
- package/dist/molecules/dynamic-form-editor-issues-panel.js +2 -2
- package/dist/molecules/dynamic-form-editor-preview-panel.js +6 -6
- package/dist/molecules/dynamic-form-editor.js +11 -11
- package/dist/molecules/dynamic-form.js +4 -4
- package/dist/molecules/expand-table/index.cjs +21 -28
- package/dist/molecules/expand-table/index.cjs.map +1 -1
- package/dist/molecules/expand-table/index.js +3 -3
- package/dist/molecules/index.cjs +34 -28
- package/dist/molecules/index.cjs.map +1 -1
- package/dist/molecules/index.js +38 -38
- package/dist/molecules/learning-post.js +2 -2
- package/dist/molecules/stepper.js +2 -2
- package/dist/molecules/tag-selector.js +3 -3
- package/dist/molecules/training-info-guideline.cjs +13 -0
- package/dist/molecules/training-info-guideline.cjs.map +1 -1
- package/dist/molecules/training-info-guideline.js +1 -1
- package/dist/types/index.d.cts +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/training-info-guideline-schema-generated.cjs.map +1 -1
- package/dist/types/training-info-guideline-schema-generated.d.cts +7 -2
- package/dist/types/training-info-guideline-schema-generated.d.ts +7 -2
- package/package.json +1 -1
- package/src/atoms/pagination.tsx +24 -40
- package/src/constrant/training-info-guideline.schema.json +12 -1
- package/src/molecules/training-info-guideline.tsx +13 -0
- package/src/types/training-info-guideline-schema-generated.ts +10 -1
- package/dist/chunk-F7LTJOOC.js.map +0 -1
- package/dist/chunk-SLJLEPD2.js.map +0 -1
- /package/dist/{chunk-P5GENHKO.js.map → chunk-2XNWJT3U.js.map} +0 -0
- /package/dist/{chunk-WH6QD4SY.js.map → chunk-3DEAIJBF.js.map} +0 -0
- /package/dist/{chunk-RM5CQ77X.js.map → chunk-3JRHAKLV.js.map} +0 -0
- /package/dist/{chunk-QKZTZUWP.js.map → chunk-3Z2XZ4ZG.js.map} +0 -0
- /package/dist/{chunk-CIQ7ELE6.js.map → chunk-4QHXYLE4.js.map} +0 -0
- /package/dist/{chunk-7R65MUL6.js.map → chunk-6UXCNYVO.js.map} +0 -0
- /package/dist/{chunk-QEDJOAP6.js.map → chunk-BFRNEBJN.js.map} +0 -0
- /package/dist/{chunk-YPEB36YK.js.map → chunk-BKYPABII.js.map} +0 -0
- /package/dist/{chunk-AYWPBD4T.js.map → chunk-CI2XFT7Y.js.map} +0 -0
- /package/dist/{chunk-LATTGN7W.js.map → chunk-E5ZJDDZH.js.map} +0 -0
- /package/dist/{chunk-V3F7KAR6.js.map → chunk-GFRYS4IN.js.map} +0 -0
- /package/dist/{chunk-OILH5J7Q.js.map → chunk-GXG26SHU.js.map} +0 -0
- /package/dist/{chunk-5WX7CODZ.js.map → chunk-GXPEADVY.js.map} +0 -0
- /package/dist/{chunk-2U7C7J5P.js.map → chunk-GXWE3QNN.js.map} +0 -0
- /package/dist/{chunk-ESM3HX57.js.map → chunk-HIMIOODO.js.map} +0 -0
- /package/dist/{chunk-U3FBMFRL.js.map → chunk-I5RQ5T4B.js.map} +0 -0
- /package/dist/{chunk-NTJLECYY.js.map → chunk-JFJ3N4V5.js.map} +0 -0
- /package/dist/{chunk-ZA4NYPSW.js.map → chunk-JRSZNGFD.js.map} +0 -0
- /package/dist/{chunk-GTO7GG2K.js.map → chunk-KCAOUZCT.js.map} +0 -0
- /package/dist/{chunk-62HSZXVT.js.map → chunk-KD6EXWP7.js.map} +0 -0
- /package/dist/{chunk-AA6OYHCE.js.map → chunk-MIATMZDP.js.map} +0 -0
- /package/dist/{chunk-HTNDVNLQ.js.map → chunk-MPZJH3PI.js.map} +0 -0
- /package/dist/{chunk-2TNZVHXZ.js.map → chunk-QANVXCYU.js.map} +0 -0
- /package/dist/{chunk-64XYTE54.js.map → chunk-RFXVHZAN.js.map} +0 -0
- /package/dist/{chunk-F7JSPN5P.js.map → chunk-SACH3XVV.js.map} +0 -0
- /package/dist/{chunk-DWBYAHIR.js.map → chunk-SNPAB3HJ.js.map} +0 -0
- /package/dist/{chunk-5TZNUXBT.js.map → chunk-SSSGPTRM.js.map} +0 -0
- /package/dist/{chunk-6MQMVYEP.js.map → chunk-TTVJOFG5.js.map} +0 -0
- /package/dist/{chunk-SRZK4OC5.js.map → chunk-V7MD4RRM.js.map} +0 -0
- /package/dist/{chunk-PGUDVR3V.js.map → chunk-XWNFR24N.js.map} +0 -0
- /package/dist/{chunk-TCFXG4AX.js.map → chunk-XXMZLXDE.js.map} +0 -0
- /package/dist/{chunk-7R5KG7SJ.js.map → chunk-ZKS3IW7D.js.map} +0 -0
- /package/dist/{chunk-5OLJJUMC.js.map → chunk-ZVSATS4O.js.map} +0 -0
package/dist/molecules/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import "../chunk-SYMOHU2B.js";
|
|
|
2
2
|
import "../chunk-AS7ID74X.js";
|
|
3
3
|
import {
|
|
4
4
|
CurriculumBody
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-QANVXCYU.js";
|
|
6
6
|
import "../chunk-KFUBWOCN.js";
|
|
7
7
|
import {
|
|
8
8
|
CurriculumSidebar
|
|
@@ -14,20 +14,20 @@ import "../chunk-MJMHPIYX.js";
|
|
|
14
14
|
import "../chunk-4TST4UK5.js";
|
|
15
15
|
import "../chunk-VH37R5IH.js";
|
|
16
16
|
import "../chunk-ZFTQ2XBH.js";
|
|
17
|
-
import "../chunk-
|
|
18
|
-
import "../chunk-
|
|
19
|
-
import "../chunk-
|
|
20
|
-
import "../chunk-
|
|
17
|
+
import "../chunk-V7MD4RRM.js";
|
|
18
|
+
import "../chunk-HIMIOODO.js";
|
|
19
|
+
import "../chunk-XWNFR24N.js";
|
|
20
|
+
import "../chunk-ZKS3IW7D.js";
|
|
21
21
|
import "../chunk-W7TBPRHG.js";
|
|
22
|
-
import "../chunk-
|
|
22
|
+
import "../chunk-XXMZLXDE.js";
|
|
23
23
|
import "../chunk-76PNGKCB.js";
|
|
24
24
|
import "../chunk-SAEPW5JF.js";
|
|
25
25
|
import "../chunk-VK6INFSB.js";
|
|
26
|
-
import "../chunk-
|
|
27
|
-
import "../chunk-
|
|
26
|
+
import "../chunk-GXG26SHU.js";
|
|
27
|
+
import "../chunk-JFJ3N4V5.js";
|
|
28
28
|
import "../chunk-CNW3YEAK.js";
|
|
29
29
|
import "../chunk-NIMLBANB.js";
|
|
30
|
-
import "../chunk-
|
|
30
|
+
import "../chunk-4QHXYLE4.js";
|
|
31
31
|
import "../chunk-GMKRNFH5.js";
|
|
32
32
|
import {
|
|
33
33
|
CurriculumSubNav
|
|
@@ -48,7 +48,7 @@ import {
|
|
|
48
48
|
import {
|
|
49
49
|
ExpandTable,
|
|
50
50
|
createColumnHelper
|
|
51
|
-
} from "../chunk-
|
|
51
|
+
} from "../chunk-GFRYS4IN.js";
|
|
52
52
|
import "../chunk-JCG2AUFJ.js";
|
|
53
53
|
import "../chunk-2ISIAPFS.js";
|
|
54
54
|
import {
|
|
@@ -56,10 +56,10 @@ import {
|
|
|
56
56
|
} from "../chunk-CSKNBWPB.js";
|
|
57
57
|
import {
|
|
58
58
|
Stepper
|
|
59
|
-
} from "../chunk-
|
|
59
|
+
} from "../chunk-3Z2XZ4ZG.js";
|
|
60
60
|
import {
|
|
61
61
|
TagSelector
|
|
62
|
-
} from "../chunk-
|
|
62
|
+
} from "../chunk-ZVSATS4O.js";
|
|
63
63
|
import {
|
|
64
64
|
TimeSelect
|
|
65
65
|
} from "../chunk-7PF6I4RN.js";
|
|
@@ -70,7 +70,7 @@ import "../chunk-NRPDVI76.js";
|
|
|
70
70
|
import "../chunk-2BPFXK4L.js";
|
|
71
71
|
import {
|
|
72
72
|
TrainingInfoGuideline
|
|
73
|
-
} from "../chunk-
|
|
73
|
+
} from "../chunk-MLAQDU6U.js";
|
|
74
74
|
import {
|
|
75
75
|
DynamicFormResponseItem
|
|
76
76
|
} from "../chunk-77H5BUYO.js";
|
|
@@ -83,7 +83,7 @@ import {
|
|
|
83
83
|
} from "../chunk-5JQOU3IR.js";
|
|
84
84
|
import {
|
|
85
85
|
LearningPost
|
|
86
|
-
} from "../chunk-
|
|
86
|
+
} from "../chunk-SACH3XVV.js";
|
|
87
87
|
import "../chunk-7FKRQQYK.js";
|
|
88
88
|
import {
|
|
89
89
|
Navigation
|
|
@@ -97,70 +97,67 @@ import {
|
|
|
97
97
|
} from "../chunk-OHNBVT52.js";
|
|
98
98
|
import {
|
|
99
99
|
DynamicFormEditor
|
|
100
|
-
} from "../chunk-
|
|
101
|
-
import "../chunk-
|
|
102
|
-
import "../chunk-
|
|
103
|
-
import "../chunk-
|
|
104
|
-
import "../chunk-
|
|
100
|
+
} from "../chunk-BKYPABII.js";
|
|
101
|
+
import "../chunk-GXPEADVY.js";
|
|
102
|
+
import "../chunk-6UXCNYVO.js";
|
|
103
|
+
import "../chunk-MIATMZDP.js";
|
|
104
|
+
import "../chunk-JRSZNGFD.js";
|
|
105
105
|
import {
|
|
106
106
|
DynamicForm,
|
|
107
107
|
createYupValidation
|
|
108
|
-
} from "../chunk-
|
|
108
|
+
} from "../chunk-KCAOUZCT.js";
|
|
109
109
|
import {
|
|
110
110
|
DynamicFormField
|
|
111
|
-
} from "../chunk-
|
|
111
|
+
} from "../chunk-MPZJH3PI.js";
|
|
112
112
|
import "../chunk-Z7WNKARH.js";
|
|
113
113
|
import {
|
|
114
114
|
AutocompleteTextfield
|
|
115
115
|
} from "../chunk-LSDD4TAP.js";
|
|
116
116
|
import {
|
|
117
117
|
DescriptionJsonRender
|
|
118
|
-
} from "../chunk-
|
|
118
|
+
} from "../chunk-BFRNEBJN.js";
|
|
119
119
|
import "../chunk-LT6LBTA7.js";
|
|
120
120
|
import {
|
|
121
121
|
DotNavigation
|
|
122
122
|
} from "../chunk-IJOOKMKQ.js";
|
|
123
123
|
import "../chunk-4U6DFH7Z.js";
|
|
124
124
|
import "../chunk-QDC3LFHS.js";
|
|
125
|
-
import "../chunk-5ZITU5L7.js";
|
|
126
125
|
import "../chunk-5XYPLDI5.js";
|
|
127
126
|
import "../chunk-6NPTJBFE.js";
|
|
128
|
-
import "../chunk-MUPK4L3U.js";
|
|
129
127
|
import "../chunk-X2GMDZ7M.js";
|
|
130
128
|
import "../chunk-HYITAA4J.js";
|
|
131
129
|
import "../chunk-FR2GDOU2.js";
|
|
132
|
-
import "../chunk-
|
|
133
|
-
import "../chunk-F7LTJOOC.js";
|
|
134
|
-
import "../chunk-5AVBYDPB.js";
|
|
130
|
+
import "../chunk-5ZITU5L7.js";
|
|
135
131
|
import "../chunk-365QMK4D.js";
|
|
136
132
|
import "../chunk-6IVCARWS.js";
|
|
137
133
|
import "../chunk-6DJOIRMF.js";
|
|
138
134
|
import "../chunk-FPD73OHW.js";
|
|
139
|
-
import "../chunk-
|
|
135
|
+
import "../chunk-MUPK4L3U.js";
|
|
140
136
|
import "../chunk-XQOL7UBI.js";
|
|
141
137
|
import "../chunk-TULWX7D6.js";
|
|
142
138
|
import "../chunk-DHZVOXFM.js";
|
|
143
|
-
import "../chunk-
|
|
144
|
-
import "../chunk-
|
|
145
|
-
import "../chunk-
|
|
146
|
-
import "../chunk-XK6VEVOK.js";
|
|
147
|
-
import "../chunk-HF6GNDPV.js";
|
|
139
|
+
import "../chunk-JIJLOKVN.js";
|
|
140
|
+
import "../chunk-OXZ25J7F.js";
|
|
141
|
+
import "../chunk-5AVBYDPB.js";
|
|
148
142
|
import "../chunk-SMLC2O3V.js";
|
|
149
|
-
import "../chunk-
|
|
150
|
-
import "../chunk-RP2RGCAW.js";
|
|
143
|
+
import "../chunk-EGEQY3KT.js";
|
|
151
144
|
import "../chunk-W7X7KSJP.js";
|
|
152
145
|
import "../chunk-VYCYVN3L.js";
|
|
153
146
|
import "../chunk-OHMOP5PV.js";
|
|
154
147
|
import "../chunk-NFDQJVFA.js";
|
|
155
|
-
import "../chunk-
|
|
156
|
-
import "../chunk-
|
|
157
|
-
import "../chunk-
|
|
148
|
+
import "../chunk-B5CKZFDM.js";
|
|
149
|
+
import "../chunk-BESTU2AY.js";
|
|
150
|
+
import "../chunk-U7N2PWMO.js";
|
|
151
|
+
import "../chunk-XK6VEVOK.js";
|
|
152
|
+
import "../chunk-HF6GNDPV.js";
|
|
158
153
|
import "../chunk-4Y5BEXVN.js";
|
|
159
154
|
import "../chunk-PMJIFLDT.js";
|
|
160
155
|
import "../chunk-LDBWASUA.js";
|
|
161
156
|
import "../chunk-25HMMI7R.js";
|
|
162
157
|
import "../chunk-ZVDAEY5Q.js";
|
|
163
158
|
import "../chunk-LQY4RKWI.js";
|
|
159
|
+
import "../chunk-B6XJN6EC.js";
|
|
160
|
+
import "../chunk-RP2RGCAW.js";
|
|
164
161
|
import "../chunk-DLP4UUNG.js";
|
|
165
162
|
import "../chunk-VD7AQ7HK.js";
|
|
166
163
|
import "../chunk-ZQE7SP6P.js";
|
|
@@ -178,6 +175,9 @@ import "../chunk-5OM2H6RI.js";
|
|
|
178
175
|
import "../chunk-ZUYCXCPW.js";
|
|
179
176
|
import "../chunk-YVFNJE4E.js";
|
|
180
177
|
import "../chunk-EAXUQEO5.js";
|
|
178
|
+
import "../chunk-6SYFG6YY.js";
|
|
179
|
+
import "../chunk-K36TPMKL.js";
|
|
180
|
+
import "../chunk-U3BQT7ZO.js";
|
|
181
181
|
import "../chunk-CRTRMMJ7.js";
|
|
182
182
|
export {
|
|
183
183
|
AutocompleteTextfield,
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
LearningPost
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-SACH3XVV.js";
|
|
4
4
|
import "../chunk-7FKRQQYK.js";
|
|
5
5
|
import "../chunk-EGEQY3KT.js";
|
|
6
6
|
import "../chunk-BESTU2AY.js";
|
|
7
|
-
import "../chunk-U3BQT7ZO.js";
|
|
8
7
|
import "../chunk-4Y5BEXVN.js";
|
|
9
8
|
import "../chunk-PMJIFLDT.js";
|
|
10
9
|
import "../chunk-LDBWASUA.js";
|
|
@@ -12,6 +11,7 @@ import "../chunk-25HMMI7R.js";
|
|
|
12
11
|
import "../chunk-ZVDAEY5Q.js";
|
|
13
12
|
import "../chunk-LQY4RKWI.js";
|
|
14
13
|
import "../chunk-EAXUQEO5.js";
|
|
14
|
+
import "../chunk-U3BQT7ZO.js";
|
|
15
15
|
import "../chunk-CRTRMMJ7.js";
|
|
16
16
|
export {
|
|
17
17
|
LearningPost
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Stepper
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-K36TPMKL.js";
|
|
3
|
+
} from "../chunk-3Z2XZ4ZG.js";
|
|
5
4
|
import "../chunk-PMJIFLDT.js";
|
|
6
5
|
import "../chunk-LDBWASUA.js";
|
|
7
6
|
import "../chunk-25HMMI7R.js";
|
|
@@ -21,6 +20,7 @@ import "../chunk-YSYJCYHY.js";
|
|
|
21
20
|
import "../chunk-5OM2H6RI.js";
|
|
22
21
|
import "../chunk-ZUYCXCPW.js";
|
|
23
22
|
import "../chunk-YVFNJE4E.js";
|
|
23
|
+
import "../chunk-K36TPMKL.js";
|
|
24
24
|
import "../chunk-CRTRMMJ7.js";
|
|
25
25
|
export {
|
|
26
26
|
Stepper
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TagSelector
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-ZVSATS4O.js";
|
|
4
4
|
import "../chunk-MUPK4L3U.js";
|
|
5
5
|
import "../chunk-5AVBYDPB.js";
|
|
6
6
|
import "../chunk-EGEQY3KT.js";
|
|
7
|
-
import "../chunk-6SYFG6YY.js";
|
|
8
|
-
import "../chunk-U3BQT7ZO.js";
|
|
9
7
|
import "../chunk-PMJIFLDT.js";
|
|
10
8
|
import "../chunk-LDBWASUA.js";
|
|
11
9
|
import "../chunk-25HMMI7R.js";
|
|
@@ -27,6 +25,8 @@ import "../chunk-YSYJCYHY.js";
|
|
|
27
25
|
import "../chunk-5OM2H6RI.js";
|
|
28
26
|
import "../chunk-ZUYCXCPW.js";
|
|
29
27
|
import "../chunk-YVFNJE4E.js";
|
|
28
|
+
import "../chunk-6SYFG6YY.js";
|
|
29
|
+
import "../chunk-U3BQT7ZO.js";
|
|
30
30
|
import "../chunk-CRTRMMJ7.js";
|
|
31
31
|
export {
|
|
32
32
|
TagSelector
|
|
@@ -474,6 +474,19 @@ function TrainingInfoGuidelineItem({
|
|
|
474
474
|
}
|
|
475
475
|
);
|
|
476
476
|
}
|
|
477
|
+
if (value.type === "youtube-shorts") {
|
|
478
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
479
|
+
TrainingInfoGuidelineButton,
|
|
480
|
+
{
|
|
481
|
+
description: "TIPP \uC1FC\uCE20 \uBCF4\uAE30",
|
|
482
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react_icons2.VideoIcon, {}),
|
|
483
|
+
onClick: () => {
|
|
484
|
+
window.open(value.url, "_blank");
|
|
485
|
+
},
|
|
486
|
+
title: value.title
|
|
487
|
+
}
|
|
488
|
+
);
|
|
489
|
+
}
|
|
477
490
|
if (value.type === "video") {
|
|
478
491
|
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Dialog.Root, { children: [
|
|
479
492
|
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Dialog.Trigger, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/molecules/training-info-guideline.tsx","../../src/atoms/aspect-ratio.tsx","../../src/atoms/button.tsx","../../src/utils/convert-button-size.ts","../../src/atoms/dialog.tsx","../../src/theme/portal-provider.tsx","../../src/atoms/heading.tsx","../../src/utils/map-with-responsive.ts","../../src/atoms/icon-button.tsx","../../src/utils/convert-icon-button-size.ts","../../src/atoms/spinner.tsx","../../src/atoms/box.tsx","../../src/atoms/separator.tsx","../../src/atoms/typo.tsx","../../src/atoms/flex.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { FileTextIcon, VideoIcon } from '@radix-ui/react-icons';\nimport { AspectRatio } from '@/atoms/aspect-ratio';\nimport { Button } from '@/atoms/button';\nimport type { TrainingInfoGuidelineContents } from '@/types/training-info-guideline-schema-generated';\nimport { Dialog } from '@/atoms/dialog';\nimport { Spinner } from '@/atoms/spinner';\nimport { Box } from '@/atoms/box';\nimport { Separator } from '@/atoms/separator';\nimport { Typo } from '@/atoms/typo';\nimport { Flex } from '../atoms/flex';\n\nexport interface TrainingInfoGuidelineProps {\n values: TrainingInfoGuidelineContents['values'];\n onClickFileDownload: (args: { url: string; filename: string }) => void;\n}\n\nexport function TrainingInfoGuideline({\n values,\n onClickFileDownload,\n}: TrainingInfoGuidelineProps): React.ReactElement {\n return (\n <>\n {values.map((value) => (\n <TrainingInfoGuidelineItem\n key={getItemKey(value)}\n onClickFileDownload={onClickFileDownload}\n value={value}\n />\n ))}\n </>\n );\n}\n\ntype TrainingInfoGuidelineValue =\n TrainingInfoGuidelineContents['values'][number];\n\nfunction getItemKey(value: TrainingInfoGuidelineValue): string {\n return value.url;\n}\n\ninterface TrainingInfoGuidelineItemProps {\n value: TrainingInfoGuidelineValue;\n onClickFileDownload: TrainingInfoGuidelineProps['onClickFileDownload'];\n}\n\nfunction TrainingInfoGuidelineItem({\n value,\n onClickFileDownload,\n}: TrainingInfoGuidelineItemProps): React.ReactElement | null {\n const [isLoading, setIsLoading] = useState(true);\n\n if (value.type === 'file') {\n return (\n <TrainingInfoGuidelineButton\n description=\"파일 다운로드\"\n icon={<FileTextIcon />}\n onClick={() => {\n onClickFileDownload({ url: value.url, filename: value.filename });\n }}\n title={value.downloadButtonName}\n />\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- 차후 다른 타입 추가 시 사용\n if (value.type === 'video') {\n return (\n <Dialog.Root>\n <Dialog.Trigger>\n <TrainingInfoGuidelineButton\n description=\"영상 자료\"\n icon={<VideoIcon />}\n title={value.videoTitle}\n />\n </Dialog.Trigger>\n <Dialog.Content\n height=\"100%\"\n maxHeight=\"500px\"\n maxWidth=\"800px\"\n title={value.videoTitle}\n width=\"100%\"\n >\n <AspectRatio ratio={16 / 9} style={{ width: '100%' }}>\n <Flex\n align=\"center\"\n justify=\"center\"\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: 'black',\n position: 'relative',\n }}\n >\n {isLoading ? (\n <Flex\n align=\"center\"\n height=\"100%\"\n justify=\"center\"\n position=\"absolute\"\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n zIndex: 1,\n color: 'white',\n }}\n width=\"100%\"\n >\n <Spinner size=\"3\" style={{ width: 48, height: 48 }} />\n </Flex>\n ) : null}\n\n <iframe\n allowFullScreen\n onError={() => {\n setIsLoading(false);\n }} // 필요시 에러 메시지로 대체\n onLoad={() => {\n setIsLoading(false);\n }}\n src={`${value.url}?theme=light`}\n style={{ width: '100%', height: '100%', border: 'none' }}\n title=\"Curriculum Video\"\n />\n </Flex>\n </AspectRatio>\n </Dialog.Content>\n </Dialog.Root>\n );\n }\n return null;\n}\n\ninterface TrainingInfoGuidelineButtonProps {\n icon: React.ReactNode;\n title: string;\n description?: string;\n onClick?: () => void;\n}\n\nfunction TrainingInfoGuidelineButton({\n icon,\n title,\n description,\n onClick,\n}: TrainingInfoGuidelineButtonProps): React.ReactElement {\n return (\n <Button\n onClick={onClick}\n style={{ width: '100%', height: '48px' , textAlign: 'left'}}\n variant=\"outline\"\n >\n <Flex align=\"center\" gap=\"2\" width=\"100%\">\n {icon}\n <Separator orientation=\"vertical\" size=\"2\" />\n <Box>\n <Typo as=\"div\">\n {title}\n </Typo>\n {typeof description === 'string' && description !== '' ? (\n <Typo variant=\"caption\" >\n {description}\n </Typo>\n ) : null}\n </Box>\n \n </Flex>\n </Button>\n );\n}\n","export { AspectRatio } from '@radix-ui/themes';\n","import React, { forwardRef, useMemo } from 'react';\nimport { Button as RadixButton } from '@radix-ui/themes';\nimport { clsx } from 'clsx';\nimport { convertSize } from '../utils/convert-button-size';\nimport type { ButtonProps } from './button.type';\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (props, ref): React.ReactNode => {\n const { size, style, variant, ...restProps } = props;\n\n const radixSize = useMemo(() => {\n return convertSize(size);\n }, [size]);\n\n const radixVariant = useMemo(() => {\n if (variant === 'transparent') return 'ghost';\n return variant;\n }, [variant]);\n\n const className = useMemo(() => {\n return clsx(props.className, { transparent: variant === 'transparent' });\n }, [props.className, variant]);\n\n return (\n <RadixButton\n style={style}\n type=\"button\"\n variant={radixVariant}\n {...restProps}\n className={className}\n ref={ref}\n size={radixSize}\n />\n );\n }\n);\n\nButton.displayName = 'Button';\n","import { type ButtonProps as RadixButtonProps } from '@radix-ui/themes';\nimport type { Breakpoint } from '@radix-ui/themes/props';\nimport type { ButtonProps } from '../atoms/button.type';\n\nexport const convertSizeStr = (\n size: ButtonProps['size']\n): '1' | '2' | '3' | '4' => {\n switch (size) {\n case 'small':\n return '1';\n case 'medium':\n return '2';\n case 'large':\n return '3';\n default:\n return '2';\n }\n};\n\nexport const convertSizeResponse = (\n size: ButtonProps['size']\n): RadixButtonProps['size'] => {\n if (typeof size === 'string' || typeof size === 'undefined') {\n return convertSizeStr(size);\n }\n const radixSize: RadixButtonProps['size'] = {};\n let key: Breakpoint = 'initial';\n for (key in size) {\n radixSize[key] = convertSizeStr(size[key]);\n }\n return radixSize;\n};\n\nexport const convertSize = (\n size: ButtonProps['size']\n): RadixButtonProps['size'] => {\n if (typeof size === 'string') {\n return convertSizeStr(size);\n }\n return convertSizeResponse(size);\n};\n","import * as RadixDialog from '@radix-ui/react-dialog';\nimport { Cross1Icon } from '@radix-ui/react-icons';\nimport { Flex, Theme } from '@radix-ui/themes';\nimport { useEffect, useRef } from 'react';\nimport { usePortalContainer } from '@/theme/portal-provider';\nimport { Heading } from './heading';\nimport { IconButton } from './icon-button';\n\ntype ContentProps = RadixDialog.DialogContentProps & {\n width?: string;\n maxWidth?: string;\n minWidth?: string;\n height?: string;\n maxHeight?: string;\n minHeight?: string;\n title?: string;\n hideCloseButton?: boolean;\n buttons?: React.ReactNode;\n size?: '1' | '2' | '3' | '4';\n};\n\nconst preventDefault: RadixDialog.DialogContentProps['onPointerDownOutside'] = (\n e\n) => {\n e.preventDefault();\n};\n\nfunction Content(props: ContentProps): React.ReactNode {\n const {\n children,\n style = {},\n width,\n maxWidth,\n minWidth,\n maxHeight,\n height,\n minHeight,\n title,\n buttons,\n size,\n hideCloseButton,\n className,\n ...rest\n } = props;\n const { dialogContainerRef } = usePortalContainer();\n\n return (\n <RadixDialog.Portal container={dialogContainerRef.current}>\n <Theme asChild>\n <RadixDialog.Overlay className=\"rt-BaseDialogScroll rt-DialogScroll DialogOverlay\">\n <RadixDialog.Content\n className={`DialogContent ${className || ''} rt-BaseDialogContent rt-DialogContent rt-r-size-${size||'3'}`}\n onPointerDownOutside={preventDefault}\n style={{\n width,\n maxWidth,\n minWidth,\n maxHeight,\n height,\n minHeight,\n ...style,\n }}\n {...rest}\n >\n <Flex gap=\"2\" justify=\"between\" width=\"100%\">\n <RadixDialog.Title asChild>\n {typeof title === 'string' && title !== '' ? (\n <Heading mb=\"2\" variant=\"heading3\">\n {title}\n </Heading>\n ) : (\n title\n )}\n </RadixDialog.Title>\n {!hideCloseButton && (\n <RadixDialog.Close asChild className=\"DialogClose\">\n <IconButton color=\"gray\" variant=\"ghost\">\n <Cross1Icon />\n </IconButton>\n </RadixDialog.Close>\n )}\n </Flex>\n {children}\n {buttons ? (\n <Flex gap=\"3\" justify=\"end\" mt=\"3\" width=\"100%\">\n {buttons}\n </Flex>\n ) : null}\n </RadixDialog.Content>\n </RadixDialog.Overlay>\n </Theme>\n </RadixDialog.Portal>\n );\n}\n\nfunction Close({\n children,\n ...rest\n}: RadixDialog.DialogCloseProps): React.ReactNode {\n return (\n <RadixDialog.Close asChild {...rest}>\n {children}\n </RadixDialog.Close>\n );\n}\n\nfunction Trigger({\n children,\n ...rest\n}: RadixDialog.DialogTriggerProps): React.ReactNode {\n return (\n <RadixDialog.Trigger asChild {...rest}>\n {children}\n </RadixDialog.Trigger>\n );\n}\n\nfunction Root(props: RadixDialog.DialogProps): React.ReactNode {\n const prevOpenRef = useRef<boolean | undefined>(undefined);\n const cleanupExecutedRef = useRef<boolean>(false);\n\n // 모달이 닫힌 후 포커스 복원 및 이벤트 정리\n useEffect(() => {\n const prevOpen = prevOpenRef.current;\n const currentOpen = props.open;\n\n // 현재 상태를 이전 상태로 업데이트 (if 분기의 early return과 무관하게 항상 실행)\n prevOpenRef.current = currentOpen;\n\n // 모달이 열린 상태에서 닫힌 상태로 변경될 때만 실행\n if (prevOpen === true && currentOpen === false && !cleanupExecutedRef.current) {\n cleanupExecutedRef.current = true;\n\n // 모달이 닫힌 후 약간의 지연을 두고 포커스 복원\n const timer = setTimeout(() => {\n try {\n // 활성 요소에 포커스 복원\n const activeElement = document.activeElement as HTMLElement | null;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- 어떤 dom인지 확실하지 않음\n activeElement?.blur?.();\n\n // body의 pointer-events 복원\n document.body.style.pointerEvents = '';\n } catch {\n // 에러 무시\n } finally {\n cleanupExecutedRef.current = false;\n }\n }, 100);\n\n return () => {\n clearTimeout(timer);\n cleanupExecutedRef.current = false;\n };\n }\n }, [props.open]);\n\n // open=true 상태에서 컴포넌트가 언마운트될 때 body 스타일 복원\n useEffect(() => {\n return () => {\n if (prevOpenRef.current === true) {\n document.body.style.pointerEvents = '';\n }\n };\n }, []);\n\n return <RadixDialog.Root {...props} />;\n}\n\nexport const Dialog = {\n Root,\n Trigger,\n Content,\n Close,\n Description: RadixDialog.Description,\n Title: RadixDialog.Title,\n};\n","import React, { createContext, useContext, useRef } from 'react';\n\ninterface PortalProviderProps {\n children: React.ReactNode;\n}\n\ninterface PortalState {\n dialogContainerRef: React.RefObject<HTMLDivElement | null>;\n drawerContainerRef: React.RefObject<HTMLDivElement | null>;\n}\n\nconst PortalContext = createContext<PortalState>(\n null as unknown as PortalState\n);\n\nexport function PortalProvider({\n children,\n}: PortalProviderProps): React.ReactNode {\n const dialogContainerRef = useRef<HTMLDivElement | null>(null);\n const drawerContainerRef = useRef<HTMLDivElement | null>(null);\n\n return (\n <PortalContext.Provider value={{ dialogContainerRef, drawerContainerRef }}>\n {children}\n <div className=\"drawer-portal-container\" ref={drawerContainerRef} />\n <div className=\"dialog-portal-container\" ref={dialogContainerRef} />\n </PortalContext.Provider>\n );\n}\n\nexport const usePortalContainer = (): PortalState => {\n try {\n const state = useContext(PortalContext);\n return state;\n } catch (error) {\n throw new Error('PortalProvider not found');\n }\n};\n\nexport default PortalProvider;\n","import {\n Heading as RadixHeading,\n type HeadingProps as RadixHeadingProps,\n} from '@radix-ui/themes';\nimport type { Responsive } from '@radix-ui/themes/props';\nimport { useMemo } from 'react';\nimport { mapWithResponsive } from '@/utils/map-with-responsive';\n\nexport { Heading as RadixHeading } from '@radix-ui/themes';\ntype HeadingVariant =\n | 'heading1'\n | 'heading2'\n | 'heading3'\n | 'heading4'\n | 'heading5';\nexport type HeadingProps = RadixHeadingProps & {\n variant?: Responsive<HeadingVariant>;\n};\n\ntype HeadingSize = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';\n\nconst mapVariant = (variant?: HeadingVariant): HeadingSize | undefined => {\n switch (variant) {\n case 'heading1':\n return '7';\n case 'heading2':\n return '6';\n case 'heading3':\n return '5';\n case 'heading4':\n return '4';\n case 'heading5':\n return '3';\n default:\n return undefined;\n }\n};\n\nexport function Heading(props: HeadingProps): React.ReactNode {\n const { size, children, variant, ...rest } = props;\n const radixSize = useMemo<RadixHeadingProps['size']>(() => {\n return variant\n ? mapWithResponsive({\n value: variant,\n mapFn: mapVariant,\n })\n : size;\n \n }, [size, variant]);\n\n return (\n <RadixHeading {...rest} size={radixSize}>\n {children}\n </RadixHeading>\n );\n}\n","import type { Breakpoint, Responsive } from \"@radix-ui/themes/props\";\n\nexport const mapWithResponsive = <T extends string,K extends string>(\n args: {value: Responsive<T>, mapFn: (value?:T)=>K |undefined}\n): Responsive<K> | undefined => {\n const {value, mapFn} = args;\n if(typeof value === 'string'){\n return mapFn(value);\n };\n \n if(typeof value === 'object'){\n const newObj: Partial<Record<Breakpoint, K>> = {};\n let key: Breakpoint;\n for(key in value){\n newObj[key] = mapFn(value[key]);\n }\n return newObj;\n }\n return value;\n};\n","import React, { forwardRef, useMemo } from 'react';\nimport { clsx } from 'clsx';\nimport { IconButton as RadixIconButton } from '@radix-ui/themes';\nimport { convertSize } from '../utils/convert-icon-button-size';\nimport type { ButtonProps } from './button.type';\n\nexport type IconButtonProps = ButtonProps;\nexport const IconButton = forwardRef<HTMLButtonElement, ButtonProps>(\n (props, ref): React.ReactNode => {\n const { size, style, variant, ...restProps } = props;\n\n const radixSize = useMemo(() => {\n return convertSize(size);\n }, [size]);\n\n const radixVariant = useMemo(() => {\n if (variant === 'transparent') return 'ghost';\n return variant;\n }, [variant]);\n\n const className = useMemo(() => {\n return clsx(props.className, { transparent: variant === 'transparent' });\n }, [props.className, variant]);\n\n return (\n <RadixIconButton\n style={style}\n type=\"button\"\n variant={radixVariant}\n {...restProps}\n className={className}\n ref={ref}\n size={radixSize}\n />\n );\n }\n);\n\nIconButton.displayName = 'IconButton';\n","import { type ButtonProps as RadixButtonProps } from '@radix-ui/themes';\nimport type { Breakpoint } from '@radix-ui/themes/props';\nimport type { ButtonProps } from '../atoms/button.type';\n\nexport const convertSizeStr = (\n size: ButtonProps['size']\n): '1' | '2' | '3' | '4' => {\n switch (size) {\n case 'small':\n return '1';\n case 'medium':\n return '2';\n case 'large':\n return '4';\n default:\n return '2';\n }\n};\n\nexport const convertSizeResponse = (\n size: ButtonProps['size']\n): RadixButtonProps['size'] => {\n if (typeof size === 'string' || typeof size === 'undefined') {\n return convertSizeStr(size);\n }\n const radixSize: RadixButtonProps['size'] = {};\n let key: Breakpoint = 'initial';\n for (key in size) {\n radixSize[key] = convertSizeStr(size[key]);\n }\n return radixSize;\n};\n\nexport const convertSize = (\n size: ButtonProps['size']\n): RadixButtonProps['size'] => {\n if (typeof size === 'string') {\n return convertSizeStr(size);\n }\n return convertSizeResponse(size);\n};\n","export { Spinner, type SpinnerProps } from '@radix-ui/themes';\n","export { Box, type BoxProps } from '@radix-ui/themes';\n","export { Separator, type SeparatorProps } from '@radix-ui/themes';\n","import type { TextProps as RadixTextProps } from '@radix-ui/themes';\nimport type { Responsive } from '@radix-ui/themes/props';\nimport { Text as RadixText } from '@radix-ui/themes';\nimport React, { useMemo, forwardRef } from 'react';\nimport { mapWithResponsive } from '@/utils/map-with-responsive';\n\nexport type TypoProps = RadixTextProps & {\n variant?: Responsive<'body' | 'caption' | 'subtitle'>;\n};\n\nexport const Typo = forwardRef<HTMLSpanElement, TypoProps>(\n (props: TypoProps, ref): React.ReactNode => {\n const { size, variant, children, ...rest } = props;\n\n const radixSize = useMemo<RadixTextProps['size']>(() => {\n if (size !== undefined) return size;\n\n if (variant === undefined) return '2';\n\n return mapWithResponsive({\n value: variant,\n mapFn: (variantValue?: 'body' | 'caption' | 'subtitle') => {\n switch (variantValue) {\n case 'caption':\n return '1';\n case 'subtitle':\n return '3';\n case 'body':\n default:\n return '2';\n }\n },\n });\n }, [size, variant]);\n\n return (\n <RadixText {...rest} ref={ref} size={radixSize}>\n {children}\n </RadixText>\n );\n }\n);\n\nTypo.displayName = 'Typo';\n","export { Flex, type FlexProps } from '@radix-ui/themes';\n"],"mappings":"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","names":["import_react","import_react_icons","import_themes","RadixButton","import_themes","import_react","import_react","import_jsx_runtime","import_themes","import_react","import_themes","import_jsx_runtime","Heading","RadixHeading","import_react","import_clsx","import_themes","convertSizeStr","convertSizeResponse","convertSize","import_jsx_runtime","convertSize","RadixIconButton","import_jsx_runtime","Content","Heading","Close","Trigger","Root","import_themes","import_themes","import_themes","import_themes","import_react","import_jsx_runtime","RadixText","import_themes","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../../src/molecules/training-info-guideline.tsx","../../src/atoms/aspect-ratio.tsx","../../src/atoms/button.tsx","../../src/utils/convert-button-size.ts","../../src/atoms/dialog.tsx","../../src/theme/portal-provider.tsx","../../src/atoms/heading.tsx","../../src/utils/map-with-responsive.ts","../../src/atoms/icon-button.tsx","../../src/utils/convert-icon-button-size.ts","../../src/atoms/spinner.tsx","../../src/atoms/box.tsx","../../src/atoms/separator.tsx","../../src/atoms/typo.tsx","../../src/atoms/flex.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { FileTextIcon, VideoIcon } from '@radix-ui/react-icons';\nimport { AspectRatio } from '@/atoms/aspect-ratio';\nimport { Button } from '@/atoms/button';\nimport type { TrainingInfoGuidelineContents } from '@/types/training-info-guideline-schema-generated';\nimport { Dialog } from '@/atoms/dialog';\nimport { Spinner } from '@/atoms/spinner';\nimport { Box } from '@/atoms/box';\nimport { Separator } from '@/atoms/separator';\nimport { Typo } from '@/atoms/typo';\nimport { Flex } from '../atoms/flex';\n\nexport interface TrainingInfoGuidelineProps {\n values: TrainingInfoGuidelineContents['values'];\n onClickFileDownload: (args: { url: string; filename: string }) => void;\n}\n\nexport function TrainingInfoGuideline({\n values,\n onClickFileDownload,\n}: TrainingInfoGuidelineProps): React.ReactElement {\n return (\n <>\n {values.map((value) => (\n <TrainingInfoGuidelineItem\n key={getItemKey(value)}\n onClickFileDownload={onClickFileDownload}\n value={value}\n />\n ))}\n </>\n );\n}\n\ntype TrainingInfoGuidelineValue =\n TrainingInfoGuidelineContents['values'][number];\n\nfunction getItemKey(value: TrainingInfoGuidelineValue): string {\n return value.url;\n}\n\ninterface TrainingInfoGuidelineItemProps {\n value: TrainingInfoGuidelineValue;\n onClickFileDownload: TrainingInfoGuidelineProps['onClickFileDownload'];\n}\n\nfunction TrainingInfoGuidelineItem({\n value,\n onClickFileDownload,\n}: TrainingInfoGuidelineItemProps): React.ReactElement | null {\n const [isLoading, setIsLoading] = useState(true);\n\n if (value.type === 'file') {\n return (\n <TrainingInfoGuidelineButton\n description=\"파일 다운로드\"\n icon={<FileTextIcon />}\n onClick={() => {\n onClickFileDownload({ url: value.url, filename: value.filename });\n }}\n title={value.downloadButtonName}\n />\n );\n }\n\n if (value.type === 'youtube-shorts') {\n return (\n <TrainingInfoGuidelineButton\n description=\"TIPP 쇼츠 보기\"\n icon={<VideoIcon />}\n onClick={() => {\n window.open(value.url, '_blank');\n }}\n title={value.title}\n />\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- 차후 다른 타입 추가 시 사용\n if (value.type === 'video') {\n return (\n <Dialog.Root>\n <Dialog.Trigger>\n <TrainingInfoGuidelineButton\n description=\"영상 자료\"\n icon={<VideoIcon />}\n title={value.videoTitle}\n />\n </Dialog.Trigger>\n <Dialog.Content\n height=\"100%\"\n maxHeight=\"500px\"\n maxWidth=\"800px\"\n title={value.videoTitle}\n width=\"100%\"\n >\n <AspectRatio ratio={16 / 9} style={{ width: '100%' }}>\n <Flex\n align=\"center\"\n justify=\"center\"\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: 'black',\n position: 'relative',\n }}\n >\n {isLoading ? (\n <Flex\n align=\"center\"\n height=\"100%\"\n justify=\"center\"\n position=\"absolute\"\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n zIndex: 1,\n color: 'white',\n }}\n width=\"100%\"\n >\n <Spinner size=\"3\" style={{ width: 48, height: 48 }} />\n </Flex>\n ) : null}\n\n <iframe\n allowFullScreen\n onError={() => {\n setIsLoading(false);\n }} // 필요시 에러 메시지로 대체\n onLoad={() => {\n setIsLoading(false);\n }}\n src={`${value.url}?theme=light`}\n style={{ width: '100%', height: '100%', border: 'none' }}\n title=\"Curriculum Video\"\n />\n </Flex>\n </AspectRatio>\n </Dialog.Content>\n </Dialog.Root>\n );\n }\n return null;\n}\n\ninterface TrainingInfoGuidelineButtonProps {\n icon: React.ReactNode;\n title: string;\n description?: string;\n onClick?: () => void;\n}\n\nfunction TrainingInfoGuidelineButton({\n icon,\n title,\n description,\n onClick,\n}: TrainingInfoGuidelineButtonProps): React.ReactElement {\n return (\n <Button\n onClick={onClick}\n style={{ width: '100%', height: '48px' , textAlign: 'left'}}\n variant=\"outline\"\n >\n <Flex align=\"center\" gap=\"2\" width=\"100%\">\n {icon}\n <Separator orientation=\"vertical\" size=\"2\" />\n <Box>\n <Typo as=\"div\">\n {title}\n </Typo>\n {typeof description === 'string' && description !== '' ? (\n <Typo variant=\"caption\" >\n {description}\n </Typo>\n ) : null}\n </Box>\n \n </Flex>\n </Button>\n );\n}\n","export { AspectRatio } from '@radix-ui/themes';\n","import React, { forwardRef, useMemo } from 'react';\nimport { Button as RadixButton } from '@radix-ui/themes';\nimport { clsx } from 'clsx';\nimport { convertSize } from '../utils/convert-button-size';\nimport type { ButtonProps } from './button.type';\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (props, ref): React.ReactNode => {\n const { size, style, variant, ...restProps } = props;\n\n const radixSize = useMemo(() => {\n return convertSize(size);\n }, [size]);\n\n const radixVariant = useMemo(() => {\n if (variant === 'transparent') return 'ghost';\n return variant;\n }, [variant]);\n\n const className = useMemo(() => {\n return clsx(props.className, { transparent: variant === 'transparent' });\n }, [props.className, variant]);\n\n return (\n <RadixButton\n style={style}\n type=\"button\"\n variant={radixVariant}\n {...restProps}\n className={className}\n ref={ref}\n size={radixSize}\n />\n );\n }\n);\n\nButton.displayName = 'Button';\n","import { type ButtonProps as RadixButtonProps } from '@radix-ui/themes';\nimport type { Breakpoint } from '@radix-ui/themes/props';\nimport type { ButtonProps } from '../atoms/button.type';\n\nexport const convertSizeStr = (\n size: ButtonProps['size']\n): '1' | '2' | '3' | '4' => {\n switch (size) {\n case 'small':\n return '1';\n case 'medium':\n return '2';\n case 'large':\n return '3';\n default:\n return '2';\n }\n};\n\nexport const convertSizeResponse = (\n size: ButtonProps['size']\n): RadixButtonProps['size'] => {\n if (typeof size === 'string' || typeof size === 'undefined') {\n return convertSizeStr(size);\n }\n const radixSize: RadixButtonProps['size'] = {};\n let key: Breakpoint = 'initial';\n for (key in size) {\n radixSize[key] = convertSizeStr(size[key]);\n }\n return radixSize;\n};\n\nexport const convertSize = (\n size: ButtonProps['size']\n): RadixButtonProps['size'] => {\n if (typeof size === 'string') {\n return convertSizeStr(size);\n }\n return convertSizeResponse(size);\n};\n","import * as RadixDialog from '@radix-ui/react-dialog';\nimport { Cross1Icon } from '@radix-ui/react-icons';\nimport { Flex, Theme } from '@radix-ui/themes';\nimport { useEffect, useRef } from 'react';\nimport { usePortalContainer } from '@/theme/portal-provider';\nimport { Heading } from './heading';\nimport { IconButton } from './icon-button';\n\ntype ContentProps = RadixDialog.DialogContentProps & {\n width?: string;\n maxWidth?: string;\n minWidth?: string;\n height?: string;\n maxHeight?: string;\n minHeight?: string;\n title?: string;\n hideCloseButton?: boolean;\n buttons?: React.ReactNode;\n size?: '1' | '2' | '3' | '4';\n};\n\nconst preventDefault: RadixDialog.DialogContentProps['onPointerDownOutside'] = (\n e\n) => {\n e.preventDefault();\n};\n\nfunction Content(props: ContentProps): React.ReactNode {\n const {\n children,\n style = {},\n width,\n maxWidth,\n minWidth,\n maxHeight,\n height,\n minHeight,\n title,\n buttons,\n size,\n hideCloseButton,\n className,\n ...rest\n } = props;\n const { dialogContainerRef } = usePortalContainer();\n\n return (\n <RadixDialog.Portal container={dialogContainerRef.current}>\n <Theme asChild>\n <RadixDialog.Overlay className=\"rt-BaseDialogScroll rt-DialogScroll DialogOverlay\">\n <RadixDialog.Content\n className={`DialogContent ${className || ''} rt-BaseDialogContent rt-DialogContent rt-r-size-${size||'3'}`}\n onPointerDownOutside={preventDefault}\n style={{\n width,\n maxWidth,\n minWidth,\n maxHeight,\n height,\n minHeight,\n ...style,\n }}\n {...rest}\n >\n <Flex gap=\"2\" justify=\"between\" width=\"100%\">\n <RadixDialog.Title asChild>\n {typeof title === 'string' && title !== '' ? (\n <Heading mb=\"2\" variant=\"heading3\">\n {title}\n </Heading>\n ) : (\n title\n )}\n </RadixDialog.Title>\n {!hideCloseButton && (\n <RadixDialog.Close asChild className=\"DialogClose\">\n <IconButton color=\"gray\" variant=\"ghost\">\n <Cross1Icon />\n </IconButton>\n </RadixDialog.Close>\n )}\n </Flex>\n {children}\n {buttons ? (\n <Flex gap=\"3\" justify=\"end\" mt=\"3\" width=\"100%\">\n {buttons}\n </Flex>\n ) : null}\n </RadixDialog.Content>\n </RadixDialog.Overlay>\n </Theme>\n </RadixDialog.Portal>\n );\n}\n\nfunction Close({\n children,\n ...rest\n}: RadixDialog.DialogCloseProps): React.ReactNode {\n return (\n <RadixDialog.Close asChild {...rest}>\n {children}\n </RadixDialog.Close>\n );\n}\n\nfunction Trigger({\n children,\n ...rest\n}: RadixDialog.DialogTriggerProps): React.ReactNode {\n return (\n <RadixDialog.Trigger asChild {...rest}>\n {children}\n </RadixDialog.Trigger>\n );\n}\n\nfunction Root(props: RadixDialog.DialogProps): React.ReactNode {\n const prevOpenRef = useRef<boolean | undefined>(undefined);\n const cleanupExecutedRef = useRef<boolean>(false);\n\n // 모달이 닫힌 후 포커스 복원 및 이벤트 정리\n useEffect(() => {\n const prevOpen = prevOpenRef.current;\n const currentOpen = props.open;\n\n // 현재 상태를 이전 상태로 업데이트 (if 분기의 early return과 무관하게 항상 실행)\n prevOpenRef.current = currentOpen;\n\n // 모달이 열린 상태에서 닫힌 상태로 변경될 때만 실행\n if (prevOpen === true && currentOpen === false && !cleanupExecutedRef.current) {\n cleanupExecutedRef.current = true;\n\n // 모달이 닫힌 후 약간의 지연을 두고 포커스 복원\n const timer = setTimeout(() => {\n try {\n // 활성 요소에 포커스 복원\n const activeElement = document.activeElement as HTMLElement | null;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- 어떤 dom인지 확실하지 않음\n activeElement?.blur?.();\n\n // body의 pointer-events 복원\n document.body.style.pointerEvents = '';\n } catch {\n // 에러 무시\n } finally {\n cleanupExecutedRef.current = false;\n }\n }, 100);\n\n return () => {\n clearTimeout(timer);\n cleanupExecutedRef.current = false;\n };\n }\n }, [props.open]);\n\n // open=true 상태에서 컴포넌트가 언마운트될 때 body 스타일 복원\n useEffect(() => {\n return () => {\n if (prevOpenRef.current === true) {\n document.body.style.pointerEvents = '';\n }\n };\n }, []);\n\n return <RadixDialog.Root {...props} />;\n}\n\nexport const Dialog = {\n Root,\n Trigger,\n Content,\n Close,\n Description: RadixDialog.Description,\n Title: RadixDialog.Title,\n};\n","import React, { createContext, useContext, useRef } from 'react';\n\ninterface PortalProviderProps {\n children: React.ReactNode;\n}\n\ninterface PortalState {\n dialogContainerRef: React.RefObject<HTMLDivElement | null>;\n drawerContainerRef: React.RefObject<HTMLDivElement | null>;\n}\n\nconst PortalContext = createContext<PortalState>(\n null as unknown as PortalState\n);\n\nexport function PortalProvider({\n children,\n}: PortalProviderProps): React.ReactNode {\n const dialogContainerRef = useRef<HTMLDivElement | null>(null);\n const drawerContainerRef = useRef<HTMLDivElement | null>(null);\n\n return (\n <PortalContext.Provider value={{ dialogContainerRef, drawerContainerRef }}>\n {children}\n <div className=\"drawer-portal-container\" ref={drawerContainerRef} />\n <div className=\"dialog-portal-container\" ref={dialogContainerRef} />\n </PortalContext.Provider>\n );\n}\n\nexport const usePortalContainer = (): PortalState => {\n try {\n const state = useContext(PortalContext);\n return state;\n } catch (error) {\n throw new Error('PortalProvider not found');\n }\n};\n\nexport default PortalProvider;\n","import {\n Heading as RadixHeading,\n type HeadingProps as RadixHeadingProps,\n} from '@radix-ui/themes';\nimport type { Responsive } from '@radix-ui/themes/props';\nimport { useMemo } from 'react';\nimport { mapWithResponsive } from '@/utils/map-with-responsive';\n\nexport { Heading as RadixHeading } from '@radix-ui/themes';\ntype HeadingVariant =\n | 'heading1'\n | 'heading2'\n | 'heading3'\n | 'heading4'\n | 'heading5';\nexport type HeadingProps = RadixHeadingProps & {\n variant?: Responsive<HeadingVariant>;\n};\n\ntype HeadingSize = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';\n\nconst mapVariant = (variant?: HeadingVariant): HeadingSize | undefined => {\n switch (variant) {\n case 'heading1':\n return '7';\n case 'heading2':\n return '6';\n case 'heading3':\n return '5';\n case 'heading4':\n return '4';\n case 'heading5':\n return '3';\n default:\n return undefined;\n }\n};\n\nexport function Heading(props: HeadingProps): React.ReactNode {\n const { size, children, variant, ...rest } = props;\n const radixSize = useMemo<RadixHeadingProps['size']>(() => {\n return variant\n ? mapWithResponsive({\n value: variant,\n mapFn: mapVariant,\n })\n : size;\n \n }, [size, variant]);\n\n return (\n <RadixHeading {...rest} size={radixSize}>\n {children}\n </RadixHeading>\n );\n}\n","import type { Breakpoint, Responsive } from \"@radix-ui/themes/props\";\n\nexport const mapWithResponsive = <T extends string,K extends string>(\n args: {value: Responsive<T>, mapFn: (value?:T)=>K |undefined}\n): Responsive<K> | undefined => {\n const {value, mapFn} = args;\n if(typeof value === 'string'){\n return mapFn(value);\n };\n \n if(typeof value === 'object'){\n const newObj: Partial<Record<Breakpoint, K>> = {};\n let key: Breakpoint;\n for(key in value){\n newObj[key] = mapFn(value[key]);\n }\n return newObj;\n }\n return value;\n};\n","import React, { forwardRef, useMemo } from 'react';\nimport { clsx } from 'clsx';\nimport { IconButton as RadixIconButton } from '@radix-ui/themes';\nimport { convertSize } from '../utils/convert-icon-button-size';\nimport type { ButtonProps } from './button.type';\n\nexport type IconButtonProps = ButtonProps;\nexport const IconButton = forwardRef<HTMLButtonElement, ButtonProps>(\n (props, ref): React.ReactNode => {\n const { size, style, variant, ...restProps } = props;\n\n const radixSize = useMemo(() => {\n return convertSize(size);\n }, [size]);\n\n const radixVariant = useMemo(() => {\n if (variant === 'transparent') return 'ghost';\n return variant;\n }, [variant]);\n\n const className = useMemo(() => {\n return clsx(props.className, { transparent: variant === 'transparent' });\n }, [props.className, variant]);\n\n return (\n <RadixIconButton\n style={style}\n type=\"button\"\n variant={radixVariant}\n {...restProps}\n className={className}\n ref={ref}\n size={radixSize}\n />\n );\n }\n);\n\nIconButton.displayName = 'IconButton';\n","import { type ButtonProps as RadixButtonProps } from '@radix-ui/themes';\nimport type { Breakpoint } from '@radix-ui/themes/props';\nimport type { ButtonProps } from '../atoms/button.type';\n\nexport const convertSizeStr = (\n size: ButtonProps['size']\n): '1' | '2' | '3' | '4' => {\n switch (size) {\n case 'small':\n return '1';\n case 'medium':\n return '2';\n case 'large':\n return '4';\n default:\n return '2';\n }\n};\n\nexport const convertSizeResponse = (\n size: ButtonProps['size']\n): RadixButtonProps['size'] => {\n if (typeof size === 'string' || typeof size === 'undefined') {\n return convertSizeStr(size);\n }\n const radixSize: RadixButtonProps['size'] = {};\n let key: Breakpoint = 'initial';\n for (key in size) {\n radixSize[key] = convertSizeStr(size[key]);\n }\n return radixSize;\n};\n\nexport const convertSize = (\n size: ButtonProps['size']\n): RadixButtonProps['size'] => {\n if (typeof size === 'string') {\n return convertSizeStr(size);\n }\n return convertSizeResponse(size);\n};\n","export { Spinner, type SpinnerProps } from '@radix-ui/themes';\n","export { Box, type BoxProps } from '@radix-ui/themes';\n","export { Separator, type SeparatorProps } from '@radix-ui/themes';\n","import type { TextProps as RadixTextProps } from '@radix-ui/themes';\nimport type { Responsive } from '@radix-ui/themes/props';\nimport { Text as RadixText } from '@radix-ui/themes';\nimport React, { useMemo, forwardRef } from 'react';\nimport { mapWithResponsive } from '@/utils/map-with-responsive';\n\nexport type TypoProps = RadixTextProps & {\n variant?: Responsive<'body' | 'caption' | 'subtitle'>;\n};\n\nexport const Typo = forwardRef<HTMLSpanElement, TypoProps>(\n (props: TypoProps, ref): React.ReactNode => {\n const { size, variant, children, ...rest } = props;\n\n const radixSize = useMemo<RadixTextProps['size']>(() => {\n if (size !== undefined) return size;\n\n if (variant === undefined) return '2';\n\n return mapWithResponsive({\n value: variant,\n mapFn: (variantValue?: 'body' | 'caption' | 'subtitle') => {\n switch (variantValue) {\n case 'caption':\n return '1';\n case 'subtitle':\n return '3';\n case 'body':\n default:\n return '2';\n }\n },\n });\n }, [size, variant]);\n\n return (\n <RadixText {...rest} ref={ref} size={radixSize}>\n {children}\n </RadixText>\n );\n }\n);\n\nTypo.displayName = 'Typo';\n","export { Flex, type FlexProps } from '@radix-ui/themes';\n"],"mappings":"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","names":["import_react","import_react_icons","import_themes","RadixButton","import_themes","import_react","import_react","import_jsx_runtime","import_themes","import_react","import_themes","import_jsx_runtime","Heading","RadixHeading","import_react","import_clsx","import_themes","convertSizeStr","convertSizeResponse","convertSize","import_jsx_runtime","convertSize","RadixIconButton","import_jsx_runtime","Content","Heading","Close","Trigger","Root","import_themes","import_themes","import_themes","import_themes","import_react","import_jsx_runtime","RadixText","import_themes","import_jsx_runtime"]}
|
package/dist/types/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { ContentBaseType, CurriculumAiTrainingContents, CurriculumContents, CurriculumFileDownloadContents, CurriculumFileDownloadFile, CurriculumReviewContents, CurriculumReviewQuestionRadio, CurriculumReviewQuestionSatisfactionOption, CurriculumReviewQuestionSatisfactionText, CurriculumReviewQuestionText, CurriculumSectionTitleContents, CurriculumVideoContents, QuestionBaseType, SatisfactionOptionMeta, SatisfactionTextMeta } from './curriculumContents.type.cjs';
|
|
2
2
|
export { Curriculum, CurriculumListContents, ReviewQuestionElement } from './curriculum.type.cjs';
|
|
3
3
|
export { ChoiceField, ChoicesField, DropdownField, DynamicFormFieldSchema, DynamicFormSchema, EmailField, FieldBaseType, FieldOption, ImageFieldOption, ImageOptionFieldCommon, ImageRadioCardField, ImageRadioCardLayoutCommon, LongTextField, NumberField, OptionFieldCommon, OrientationFieldCommon, RadioCardsField, ShortTextField, TextFieldCommon, ValidationRule, YesNoField } from './dynamic-form-schema-generated.cjs';
|
|
4
|
-
export { TrainingInfoGuidelineContents, TrainingInfoGuidelineFileValue, TrainingInfoGuidelineVideoValue } from './training-info-guideline-schema-generated.cjs';
|
|
4
|
+
export { TrainingInfoGuidelineContents, TrainingInfoGuidelineFileValue, TrainingInfoGuidelineVideoValue, TrainingInfoGuidelineYoutubeShortsValue } from './training-info-guideline-schema-generated.cjs';
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { ContentBaseType, CurriculumAiTrainingContents, CurriculumContents, CurriculumFileDownloadContents, CurriculumFileDownloadFile, CurriculumReviewContents, CurriculumReviewQuestionRadio, CurriculumReviewQuestionSatisfactionOption, CurriculumReviewQuestionSatisfactionText, CurriculumReviewQuestionText, CurriculumSectionTitleContents, CurriculumVideoContents, QuestionBaseType, SatisfactionOptionMeta, SatisfactionTextMeta } from './curriculumContents.type.js';
|
|
2
2
|
export { Curriculum, CurriculumListContents, ReviewQuestionElement } from './curriculum.type.js';
|
|
3
3
|
export { ChoiceField, ChoicesField, DropdownField, DynamicFormFieldSchema, DynamicFormSchema, EmailField, FieldBaseType, FieldOption, ImageFieldOption, ImageOptionFieldCommon, ImageRadioCardField, ImageRadioCardLayoutCommon, LongTextField, NumberField, OptionFieldCommon, OrientationFieldCommon, RadioCardsField, ShortTextField, TextFieldCommon, ValidationRule, YesNoField } from './dynamic-form-schema-generated.js';
|
|
4
|
-
export { TrainingInfoGuidelineContents, TrainingInfoGuidelineFileValue, TrainingInfoGuidelineVideoValue } from './training-info-guideline-schema-generated.js';
|
|
4
|
+
export { TrainingInfoGuidelineContents, TrainingInfoGuidelineFileValue, TrainingInfoGuidelineVideoValue, TrainingInfoGuidelineYoutubeShortsValue } from './training-info-guideline-schema-generated.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/types/training-info-guideline-schema-generated.ts"],"sourcesContent":["/* eslint-disable */\n/**\n * This file was automatically generated by json-schema-to-typescript.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run json-schema-to-typescript to regenerate this file.\n */\n\nexport interface TrainingInfoGuidelineContents {\n version: 2;\n values: (TrainingInfoGuidelineFileValue |
|
|
1
|
+
{"version":3,"sources":["../../src/types/training-info-guideline-schema-generated.ts"],"sourcesContent":["/* eslint-disable */\n/**\n * This file was automatically generated by json-schema-to-typescript.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run json-schema-to-typescript to regenerate this file.\n */\n\nexport interface TrainingInfoGuidelineContents {\n version: 2;\n values: (\n | TrainingInfoGuidelineFileValue\n | TrainingInfoGuidelineVideoValue\n | TrainingInfoGuidelineYoutubeShortsValue\n )[];\n}\nexport interface TrainingInfoGuidelineFileValue {\n type: \"file\";\n url: string;\n downloadButtonName: string;\n filename: string;\n}\nexport interface TrainingInfoGuidelineVideoValue {\n type: \"video\";\n url: string;\n videoTitle: string;\n}\nexport interface TrainingInfoGuidelineYoutubeShortsValue {\n type: \"youtube-shorts\";\n url: string;\n title: string;\n}\n\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
interface TrainingInfoGuidelineContents {
|
|
7
7
|
version: 2;
|
|
8
|
-
values: (TrainingInfoGuidelineFileValue | TrainingInfoGuidelineVideoValue)[];
|
|
8
|
+
values: (TrainingInfoGuidelineFileValue | TrainingInfoGuidelineVideoValue | TrainingInfoGuidelineYoutubeShortsValue)[];
|
|
9
9
|
}
|
|
10
10
|
interface TrainingInfoGuidelineFileValue {
|
|
11
11
|
type: "file";
|
|
@@ -18,5 +18,10 @@ interface TrainingInfoGuidelineVideoValue {
|
|
|
18
18
|
url: string;
|
|
19
19
|
videoTitle: string;
|
|
20
20
|
}
|
|
21
|
+
interface TrainingInfoGuidelineYoutubeShortsValue {
|
|
22
|
+
type: "youtube-shorts";
|
|
23
|
+
url: string;
|
|
24
|
+
title: string;
|
|
25
|
+
}
|
|
21
26
|
|
|
22
|
-
export type { TrainingInfoGuidelineContents, TrainingInfoGuidelineFileValue, TrainingInfoGuidelineVideoValue };
|
|
27
|
+
export type { TrainingInfoGuidelineContents, TrainingInfoGuidelineFileValue, TrainingInfoGuidelineVideoValue, TrainingInfoGuidelineYoutubeShortsValue };
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
interface TrainingInfoGuidelineContents {
|
|
7
7
|
version: 2;
|
|
8
|
-
values: (TrainingInfoGuidelineFileValue | TrainingInfoGuidelineVideoValue)[];
|
|
8
|
+
values: (TrainingInfoGuidelineFileValue | TrainingInfoGuidelineVideoValue | TrainingInfoGuidelineYoutubeShortsValue)[];
|
|
9
9
|
}
|
|
10
10
|
interface TrainingInfoGuidelineFileValue {
|
|
11
11
|
type: "file";
|
|
@@ -18,5 +18,10 @@ interface TrainingInfoGuidelineVideoValue {
|
|
|
18
18
|
url: string;
|
|
19
19
|
videoTitle: string;
|
|
20
20
|
}
|
|
21
|
+
interface TrainingInfoGuidelineYoutubeShortsValue {
|
|
22
|
+
type: "youtube-shorts";
|
|
23
|
+
url: string;
|
|
24
|
+
title: string;
|
|
25
|
+
}
|
|
21
26
|
|
|
22
|
-
export type { TrainingInfoGuidelineContents, TrainingInfoGuidelineFileValue, TrainingInfoGuidelineVideoValue };
|
|
27
|
+
export type { TrainingInfoGuidelineContents, TrainingInfoGuidelineFileValue, TrainingInfoGuidelineVideoValue, TrainingInfoGuidelineYoutubeShortsValue };
|
package/package.json
CHANGED
package/src/atoms/pagination.tsx
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
import React, {
|
|
2
|
-
useCallback,
|
|
3
|
-
useEffect,
|
|
4
|
-
useMemo,
|
|
5
|
-
useRef,
|
|
6
|
-
useState,
|
|
7
|
-
} from 'react';
|
|
1
|
+
import React, { useCallback, useMemo, useState } from 'react';
|
|
8
2
|
import {
|
|
9
3
|
ChevronLeftIcon,
|
|
10
4
|
ChevronRightIcon,
|
|
@@ -17,7 +11,7 @@ import { Flex } from './flex';
|
|
|
17
11
|
import { Typo } from './typo';
|
|
18
12
|
|
|
19
13
|
export interface PaginationProps {
|
|
20
|
-
/** 현재 선택된 페이지, 1부터
|
|
14
|
+
/** 현재 선택된 페이지, 1부터 시작. 지정 시 controlled 모드로 동작한다. */
|
|
21
15
|
page?: number;
|
|
22
16
|
/** 기본 선택 페이지, page보다 낮은 우선 순위를 갖는다 */
|
|
23
17
|
defaultPage?: number;
|
|
@@ -32,7 +26,19 @@ export interface PaginationProps {
|
|
|
32
26
|
export function Pagination(props: PaginationProps): React.ReactNode {
|
|
33
27
|
const { onChange, count = 0, siblingCount = 2 } = props;
|
|
34
28
|
|
|
35
|
-
const
|
|
29
|
+
const isControlled = props.page !== undefined;
|
|
30
|
+
const [internalPage, setInternalPage] = useState(props.defaultPage || 1);
|
|
31
|
+
const page = isControlled ? (props.page as number) : internalPage;
|
|
32
|
+
|
|
33
|
+
const goToPage = useCallback(
|
|
34
|
+
(next: number) => {
|
|
35
|
+
if (!isControlled) {
|
|
36
|
+
setInternalPage(next);
|
|
37
|
+
}
|
|
38
|
+
onChange?.(next);
|
|
39
|
+
},
|
|
40
|
+
[isControlled, onChange]
|
|
41
|
+
);
|
|
36
42
|
|
|
37
43
|
const visibleItems = useMemo(() => {
|
|
38
44
|
let start = Math.max(1, page - siblingCount);
|
|
@@ -46,28 +52,6 @@ export function Pagination(props: PaginationProps): React.ReactNode {
|
|
|
46
52
|
return Array.from({ length: end - start + 1 }, (_, i) => i + start);
|
|
47
53
|
}, [count, page, siblingCount]);
|
|
48
54
|
|
|
49
|
-
// onChange 참조가 매 렌더 새로 생성되더라도 effect가 재발화하지 않도록 ref로 보관한다.
|
|
50
|
-
const onChangeRef = useRef(onChange);
|
|
51
|
-
useEffect(() => {
|
|
52
|
-
onChangeRef.current = onChange;
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
// 내부 page 상태가 바뀔 때만 부모에 알림. 마운트 시 초기 page는 부모가 이미 알고 있으므로 제외.
|
|
56
|
-
const isFirstRender = useRef(true);
|
|
57
|
-
useEffect(() => {
|
|
58
|
-
if (isFirstRender.current) {
|
|
59
|
-
isFirstRender.current = false;
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
onChangeRef.current?.(page);
|
|
63
|
-
}, [page]);
|
|
64
|
-
|
|
65
|
-
useEffect(() => {
|
|
66
|
-
if (props.page && props.page !== page) {
|
|
67
|
-
setPage(props.page);
|
|
68
|
-
}
|
|
69
|
-
}, [props.page, page]);
|
|
70
|
-
|
|
71
55
|
const prev = useMemo<number | undefined>(() => {
|
|
72
56
|
const p = page - 1;
|
|
73
57
|
return p < 1 ? undefined : p;
|
|
@@ -79,12 +63,12 @@ export function Pagination(props: PaginationProps): React.ReactNode {
|
|
|
79
63
|
}, [count, page]);
|
|
80
64
|
|
|
81
65
|
const onClickPrev = useCallback(() => {
|
|
82
|
-
prev
|
|
83
|
-
}, [prev]);
|
|
66
|
+
if (prev) goToPage(prev);
|
|
67
|
+
}, [prev, goToPage]);
|
|
84
68
|
|
|
85
69
|
const onClickNext = useCallback(() => {
|
|
86
|
-
next
|
|
87
|
-
}, [next]);
|
|
70
|
+
if (next) goToPage(next);
|
|
71
|
+
}, [next, goToPage]);
|
|
88
72
|
|
|
89
73
|
const doublePrev = useMemo<number | undefined>(() => {
|
|
90
74
|
if (!visibleItems.length) return;
|
|
@@ -92,8 +76,8 @@ export function Pagination(props: PaginationProps): React.ReactNode {
|
|
|
92
76
|
}, [visibleItems]);
|
|
93
77
|
|
|
94
78
|
const onClickDoublePrev = useCallback(() => {
|
|
95
|
-
doublePrev
|
|
96
|
-
}, [doublePrev]);
|
|
79
|
+
if (doublePrev) goToPage(doublePrev);
|
|
80
|
+
}, [doublePrev, goToPage]);
|
|
97
81
|
|
|
98
82
|
const doubleNext = useMemo<number | undefined>(() => {
|
|
99
83
|
if (!visibleItems.length) return;
|
|
@@ -103,8 +87,8 @@ export function Pagination(props: PaginationProps): React.ReactNode {
|
|
|
103
87
|
}, [count, visibleItems]);
|
|
104
88
|
|
|
105
89
|
const onClickDoubleNext = useCallback(() => {
|
|
106
|
-
doubleNext
|
|
107
|
-
}, [doubleNext]);
|
|
90
|
+
if (doubleNext) goToPage(doubleNext);
|
|
91
|
+
}, [doubleNext, goToPage]);
|
|
108
92
|
|
|
109
93
|
const iconSize = {
|
|
110
94
|
height: 24,
|
|
@@ -136,7 +120,7 @@ export function Pagination(props: PaginationProps): React.ReactNode {
|
|
|
136
120
|
className={`page-button ${item === page ? 'active' : ''}`}
|
|
137
121
|
key={item}
|
|
138
122
|
onClick={() => {
|
|
139
|
-
|
|
123
|
+
goToPage(item);
|
|
140
124
|
}}
|
|
141
125
|
type="button"
|
|
142
126
|
>
|