@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.
Files changed (165) hide show
  1. package/dist/app/index.cjs.map +1 -1
  2. package/dist/app/index.js +59 -59
  3. package/dist/app/platform/coach-question-list.cjs.map +1 -1
  4. package/dist/app/platform/coach-question-list.js +26 -26
  5. package/dist/app/platform/contents-card.cjs.map +1 -1
  6. package/dist/app/platform/contents-card.js +26 -26
  7. package/dist/app/platform/curriculum-card.js +2 -2
  8. package/dist/app/platform/edit-coaching-time.cjs.map +1 -1
  9. package/dist/app/platform/edit-coaching-time.js +47 -47
  10. package/dist/app/platform/edit-service-type.cjs.map +1 -1
  11. package/dist/app/platform/edit-service-type.js +47 -47
  12. package/dist/app/platform/goal-manage-card-edit.cjs.map +1 -1
  13. package/dist/app/platform/goal-manage-card-edit.js +48 -48
  14. package/dist/app/platform/goal-manage-card-read.cjs.map +1 -1
  15. package/dist/app/platform/goal-manage-card-read.js +26 -26
  16. package/dist/app/platform/on-offline-radio-card.cjs.map +1 -1
  17. package/dist/app/platform/on-offline-radio-card.js +47 -47
  18. package/dist/app/platform/report-card.cjs.map +1 -1
  19. package/dist/app/platform/report-card.js +26 -26
  20. package/dist/app/platform/reservation-card.cjs.map +1 -1
  21. package/dist/app/platform/reservation-card.js +48 -48
  22. package/dist/app/platform/session-card.cjs.map +1 -1
  23. package/dist/app/platform/session-card.js +48 -48
  24. package/dist/app/platform/session-review-simple-read.cjs.map +1 -1
  25. package/dist/app/platform/session-review-simple-read.js +26 -26
  26. package/dist/app/platform/userInfos/coaching-customer-info/index.cjs.map +1 -1
  27. package/dist/app/platform/userInfos/coaching-customer-info/index.js +28 -28
  28. package/dist/app/platform/userInfos/coaching-customer-info/large.cjs.map +1 -1
  29. package/dist/app/platform/userInfos/coaching-customer-info/large.js +26 -26
  30. package/dist/app/platform/userInfos/coaching-customer-info/medium.cjs.map +1 -1
  31. package/dist/app/platform/userInfos/coaching-customer-info/medium.js +26 -26
  32. package/dist/app/platform/userInfos/coaching-customer-info/small.cjs.map +1 -1
  33. package/dist/app/platform/userInfos/coaching-customer-info/small.js +25 -25
  34. package/dist/app/platform/userInfos/session-user-info-detail.cjs.map +1 -1
  35. package/dist/app/platform/userInfos/session-user-info-detail.js +25 -25
  36. package/dist/app/platform/userInfos/utils.cjs.map +1 -1
  37. package/dist/app/platform/userInfos/utils.js +25 -25
  38. package/dist/atoms/index.cjs +21 -28
  39. package/dist/atoms/index.cjs.map +1 -1
  40. package/dist/atoms/index.js +60 -60
  41. package/dist/atoms/pagination.cjs +21 -28
  42. package/dist/atoms/pagination.cjs.map +1 -1
  43. package/dist/atoms/pagination.d.cts +1 -1
  44. package/dist/atoms/pagination.d.ts +1 -1
  45. package/dist/atoms/pagination.js +1 -1
  46. package/dist/{chunk-P5GENHKO.js → chunk-2XNWJT3U.js} +9 -9
  47. package/dist/{chunk-WH6QD4SY.js → chunk-3DEAIJBF.js} +10 -10
  48. package/dist/{chunk-RM5CQ77X.js → chunk-3JRHAKLV.js} +7 -7
  49. package/dist/{chunk-QKZTZUWP.js → chunk-3Z2XZ4ZG.js} +4 -4
  50. package/dist/{chunk-CIQ7ELE6.js → chunk-4QHXYLE4.js} +4 -4
  51. package/dist/{chunk-7R65MUL6.js → chunk-6UXCNYVO.js} +4 -4
  52. package/dist/{chunk-QEDJOAP6.js → chunk-BFRNEBJN.js} +4 -4
  53. package/dist/{chunk-YPEB36YK.js → chunk-BKYPABII.js} +5 -5
  54. package/dist/{chunk-AYWPBD4T.js → chunk-CI2XFT7Y.js} +4 -4
  55. package/dist/{chunk-LATTGN7W.js → chunk-E5ZJDDZH.js} +4 -4
  56. package/dist/{chunk-V3F7KAR6.js → chunk-GFRYS4IN.js} +2 -2
  57. package/dist/{chunk-OILH5J7Q.js → chunk-GXG26SHU.js} +4 -4
  58. package/dist/{chunk-5WX7CODZ.js → chunk-GXPEADVY.js} +7 -7
  59. package/dist/{chunk-2U7C7J5P.js → chunk-GXWE3QNN.js} +4 -4
  60. package/dist/{chunk-ESM3HX57.js → chunk-HIMIOODO.js} +3 -3
  61. package/dist/{chunk-U3FBMFRL.js → chunk-I5RQ5T4B.js} +10 -10
  62. package/dist/{chunk-NTJLECYY.js → chunk-JFJ3N4V5.js} +4 -4
  63. package/dist/{chunk-ZA4NYPSW.js → chunk-JRSZNGFD.js} +5 -5
  64. package/dist/{chunk-GTO7GG2K.js → chunk-KCAOUZCT.js} +2 -2
  65. package/dist/{chunk-62HSZXVT.js → chunk-KD6EXWP7.js} +4 -4
  66. package/dist/{chunk-AA6OYHCE.js → chunk-MIATMZDP.js} +4 -4
  67. package/dist/{chunk-SLJLEPD2.js → chunk-MLAQDU6U.js} +14 -1
  68. package/dist/chunk-MLAQDU6U.js.map +1 -0
  69. package/dist/{chunk-HTNDVNLQ.js → chunk-MPZJH3PI.js} +4 -4
  70. package/dist/{chunk-F7LTJOOC.js → chunk-OXZ25J7F.js} +23 -36
  71. package/dist/chunk-OXZ25J7F.js.map +1 -0
  72. package/dist/{chunk-2TNZVHXZ.js → chunk-QANVXCYU.js} +2 -2
  73. package/dist/{chunk-64XYTE54.js → chunk-RFXVHZAN.js} +4 -4
  74. package/dist/{chunk-F7JSPN5P.js → chunk-SACH3XVV.js} +4 -4
  75. package/dist/{chunk-DWBYAHIR.js → chunk-SNPAB3HJ.js} +4 -4
  76. package/dist/{chunk-5TZNUXBT.js → chunk-SSSGPTRM.js} +4 -4
  77. package/dist/{chunk-6MQMVYEP.js → chunk-TTVJOFG5.js} +3 -3
  78. package/dist/{chunk-SRZK4OC5.js → chunk-V7MD4RRM.js} +2 -2
  79. package/dist/{chunk-PGUDVR3V.js → chunk-XWNFR24N.js} +2 -2
  80. package/dist/{chunk-TCFXG4AX.js → chunk-XXMZLXDE.js} +7 -7
  81. package/dist/{chunk-7R5KG7SJ.js → chunk-ZKS3IW7D.js} +4 -4
  82. package/dist/{chunk-5OLJJUMC.js → chunk-ZVSATS4O.js} +7 -7
  83. package/dist/context/index.js +1 -1
  84. package/dist/index.cjs +34 -28
  85. package/dist/index.cjs.map +1 -1
  86. package/dist/index.d.cts +1 -1
  87. package/dist/index.d.ts +1 -1
  88. package/dist/index.js +104 -104
  89. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.js +7 -7
  90. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-body.js +6 -6
  91. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-radio.js +2 -2
  92. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-option.js +2 -2
  93. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-text.js +1 -1
  94. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-text.js +3 -3
  95. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.js +10 -10
  96. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.js +2 -2
  97. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.js +11 -11
  98. package/dist/molecules/curriculumV2/CurriculumContents/index.js +12 -12
  99. package/dist/molecules/curriculumV2/CurriculumSidebar/index.js +1 -1
  100. package/dist/molecules/curriculumV2/index.js +13 -13
  101. package/dist/molecules/description-json-render.js +2 -2
  102. package/dist/molecules/dynamic-field.js +3 -3
  103. package/dist/molecules/dynamic-form-editor-field-editor-panel.js +3 -3
  104. package/dist/molecules/dynamic-form-editor-field-list-panel.js +2 -2
  105. package/dist/molecules/dynamic-form-editor-issues-panel.js +2 -2
  106. package/dist/molecules/dynamic-form-editor-preview-panel.js +6 -6
  107. package/dist/molecules/dynamic-form-editor.js +11 -11
  108. package/dist/molecules/dynamic-form.js +4 -4
  109. package/dist/molecules/expand-table/index.cjs +21 -28
  110. package/dist/molecules/expand-table/index.cjs.map +1 -1
  111. package/dist/molecules/expand-table/index.js +3 -3
  112. package/dist/molecules/index.cjs +34 -28
  113. package/dist/molecules/index.cjs.map +1 -1
  114. package/dist/molecules/index.js +38 -38
  115. package/dist/molecules/learning-post.js +2 -2
  116. package/dist/molecules/stepper.js +2 -2
  117. package/dist/molecules/tag-selector.js +3 -3
  118. package/dist/molecules/training-info-guideline.cjs +13 -0
  119. package/dist/molecules/training-info-guideline.cjs.map +1 -1
  120. package/dist/molecules/training-info-guideline.js +1 -1
  121. package/dist/types/index.d.cts +1 -1
  122. package/dist/types/index.d.ts +1 -1
  123. package/dist/types/training-info-guideline-schema-generated.cjs.map +1 -1
  124. package/dist/types/training-info-guideline-schema-generated.d.cts +7 -2
  125. package/dist/types/training-info-guideline-schema-generated.d.ts +7 -2
  126. package/package.json +1 -1
  127. package/src/atoms/pagination.tsx +24 -40
  128. package/src/constrant/training-info-guideline.schema.json +12 -1
  129. package/src/molecules/training-info-guideline.tsx +13 -0
  130. package/src/types/training-info-guideline-schema-generated.ts +10 -1
  131. package/dist/chunk-F7LTJOOC.js.map +0 -1
  132. package/dist/chunk-SLJLEPD2.js.map +0 -1
  133. /package/dist/{chunk-P5GENHKO.js.map → chunk-2XNWJT3U.js.map} +0 -0
  134. /package/dist/{chunk-WH6QD4SY.js.map → chunk-3DEAIJBF.js.map} +0 -0
  135. /package/dist/{chunk-RM5CQ77X.js.map → chunk-3JRHAKLV.js.map} +0 -0
  136. /package/dist/{chunk-QKZTZUWP.js.map → chunk-3Z2XZ4ZG.js.map} +0 -0
  137. /package/dist/{chunk-CIQ7ELE6.js.map → chunk-4QHXYLE4.js.map} +0 -0
  138. /package/dist/{chunk-7R65MUL6.js.map → chunk-6UXCNYVO.js.map} +0 -0
  139. /package/dist/{chunk-QEDJOAP6.js.map → chunk-BFRNEBJN.js.map} +0 -0
  140. /package/dist/{chunk-YPEB36YK.js.map → chunk-BKYPABII.js.map} +0 -0
  141. /package/dist/{chunk-AYWPBD4T.js.map → chunk-CI2XFT7Y.js.map} +0 -0
  142. /package/dist/{chunk-LATTGN7W.js.map → chunk-E5ZJDDZH.js.map} +0 -0
  143. /package/dist/{chunk-V3F7KAR6.js.map → chunk-GFRYS4IN.js.map} +0 -0
  144. /package/dist/{chunk-OILH5J7Q.js.map → chunk-GXG26SHU.js.map} +0 -0
  145. /package/dist/{chunk-5WX7CODZ.js.map → chunk-GXPEADVY.js.map} +0 -0
  146. /package/dist/{chunk-2U7C7J5P.js.map → chunk-GXWE3QNN.js.map} +0 -0
  147. /package/dist/{chunk-ESM3HX57.js.map → chunk-HIMIOODO.js.map} +0 -0
  148. /package/dist/{chunk-U3FBMFRL.js.map → chunk-I5RQ5T4B.js.map} +0 -0
  149. /package/dist/{chunk-NTJLECYY.js.map → chunk-JFJ3N4V5.js.map} +0 -0
  150. /package/dist/{chunk-ZA4NYPSW.js.map → chunk-JRSZNGFD.js.map} +0 -0
  151. /package/dist/{chunk-GTO7GG2K.js.map → chunk-KCAOUZCT.js.map} +0 -0
  152. /package/dist/{chunk-62HSZXVT.js.map → chunk-KD6EXWP7.js.map} +0 -0
  153. /package/dist/{chunk-AA6OYHCE.js.map → chunk-MIATMZDP.js.map} +0 -0
  154. /package/dist/{chunk-HTNDVNLQ.js.map → chunk-MPZJH3PI.js.map} +0 -0
  155. /package/dist/{chunk-2TNZVHXZ.js.map → chunk-QANVXCYU.js.map} +0 -0
  156. /package/dist/{chunk-64XYTE54.js.map → chunk-RFXVHZAN.js.map} +0 -0
  157. /package/dist/{chunk-F7JSPN5P.js.map → chunk-SACH3XVV.js.map} +0 -0
  158. /package/dist/{chunk-DWBYAHIR.js.map → chunk-SNPAB3HJ.js.map} +0 -0
  159. /package/dist/{chunk-5TZNUXBT.js.map → chunk-SSSGPTRM.js.map} +0 -0
  160. /package/dist/{chunk-6MQMVYEP.js.map → chunk-TTVJOFG5.js.map} +0 -0
  161. /package/dist/{chunk-SRZK4OC5.js.map → chunk-V7MD4RRM.js.map} +0 -0
  162. /package/dist/{chunk-PGUDVR3V.js.map → chunk-XWNFR24N.js.map} +0 -0
  163. /package/dist/{chunk-TCFXG4AX.js.map → chunk-XXMZLXDE.js.map} +0 -0
  164. /package/dist/{chunk-7R5KG7SJ.js.map → chunk-ZKS3IW7D.js.map} +0 -0
  165. /package/dist/{chunk-5OLJJUMC.js.map → chunk-ZVSATS4O.js.map} +0 -0
@@ -2,7 +2,7 @@ import "../chunk-SYMOHU2B.js";
2
2
  import "../chunk-AS7ID74X.js";
3
3
  import {
4
4
  CurriculumBody
5
- } from "../chunk-2TNZVHXZ.js";
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-SRZK4OC5.js";
18
- import "../chunk-ESM3HX57.js";
19
- import "../chunk-PGUDVR3V.js";
20
- import "../chunk-7R5KG7SJ.js";
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-TCFXG4AX.js";
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-OILH5J7Q.js";
27
- import "../chunk-NTJLECYY.js";
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-CIQ7ELE6.js";
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-V3F7KAR6.js";
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-QKZTZUWP.js";
59
+ } from "../chunk-3Z2XZ4ZG.js";
60
60
  import {
61
61
  TagSelector
62
- } from "../chunk-5OLJJUMC.js";
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-SLJLEPD2.js";
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-F7JSPN5P.js";
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-YPEB36YK.js";
101
- import "../chunk-5WX7CODZ.js";
102
- import "../chunk-7R65MUL6.js";
103
- import "../chunk-AA6OYHCE.js";
104
- import "../chunk-ZA4NYPSW.js";
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-GTO7GG2K.js";
108
+ } from "../chunk-KCAOUZCT.js";
109
109
  import {
110
110
  DynamicFormField
111
- } from "../chunk-HTNDVNLQ.js";
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-QEDJOAP6.js";
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-JIJLOKVN.js";
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-EGEQY3KT.js";
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-B5CKZFDM.js";
144
- import "../chunk-BESTU2AY.js";
145
- import "../chunk-U7N2PWMO.js";
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-B6XJN6EC.js";
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-6SYFG6YY.js";
156
- import "../chunk-K36TPMKL.js";
157
- import "../chunk-U3BQT7ZO.js";
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-F7JSPN5P.js";
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-QKZTZUWP.js";
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-5OLJJUMC.js";
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"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  TrainingInfoGuideline
3
- } from "../chunk-SLJLEPD2.js";
3
+ } from "../chunk-MLAQDU6U.js";
4
4
  import "../chunk-HYITAA4J.js";
5
5
  import "../chunk-FR2GDOU2.js";
6
6
  import "../chunk-B5CKZFDM.js";
@@ -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';
@@ -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 | TrainingInfoGuidelineVideoValue)[];\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}\n\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tipp/ui",
3
- "version": "2.3.35",
3
+ "version": "2.3.37",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "exports": {
@@ -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 [page, setPage] = useState(() => props.page || props.defaultPage || 1);
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 && setPage(prev);
83
- }, [prev]);
66
+ if (prev) goToPage(prev);
67
+ }, [prev, goToPage]);
84
68
 
85
69
  const onClickNext = useCallback(() => {
86
- next && setPage(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 && setPage(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 && setPage(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
- setPage(item);
123
+ goToPage(item);
140
124
  }}
141
125
  type="button"
142
126
  >