sk-front-lib 0.17.48 → 0.17.49

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 (255) hide show
  1. package/api/model/api-config.d.ts +6 -0
  2. package/api/model/api-pageable-param.d.ts +11 -0
  3. package/api/model/api-pageable.d.ts +11 -0
  4. package/api/model/api-response.d.ts +8 -0
  5. package/api/model/index.d.ts +4 -0
  6. package/api/package.json +10 -0
  7. package/api/public_api.d.ts +3 -0
  8. package/api/sk-api.module.d.ts +12 -0
  9. package/api/sk-api.service.d.ts +34 -0
  10. package/api/sk-front-lib-api.d.ts +5 -0
  11. package/article/package.json +10 -0
  12. package/article/public_api.d.ts +6 -0
  13. package/article/sk-article-editor-server.component.d.ts +23 -0
  14. package/article/sk-article-editor.component.d.ts +27 -0
  15. package/article/sk-article-server.module.d.ts +10 -0
  16. package/article/sk-article.module.d.ts +9 -0
  17. package/article/sk-article.service.d.ts +96 -0
  18. package/article/sk-froala-editor.directive.d.ts +40 -0
  19. package/article/sk-front-lib-article.d.ts +5 -0
  20. package/crud/package.json +10 -0
  21. package/crud/public_api.d.ts +24 -0
  22. package/crud/sk-account.service.d.ts +16 -0
  23. package/crud/sk-affiliate.service.d.ts +38 -0
  24. package/crud/sk-auth-admin.guard.d.ts +13 -0
  25. package/crud/sk-auth.guard.d.ts +13 -0
  26. package/crud/sk-auth.service.d.ts +33 -0
  27. package/crud/sk-board.service.d.ts +21 -0
  28. package/crud/sk-brand.service.d.ts +19 -0
  29. package/crud/sk-cart.service.d.ts +72 -0
  30. package/crud/sk-category.service.d.ts +28 -0
  31. package/crud/sk-comment.service.d.ts +15 -0
  32. package/crud/sk-config.service.d.ts +13 -0
  33. package/crud/sk-contact.service.d.ts +15 -0
  34. package/crud/sk-coupon.service.d.ts +24 -0
  35. package/crud/sk-document.service.d.ts +51 -0
  36. package/crud/sk-etc.service.d.ts +12 -0
  37. package/crud/sk-file.service.d.ts +18 -0
  38. package/crud/sk-front-lib-crud.d.ts +5 -0
  39. package/crud/sk-keyword.service.d.ts +19 -0
  40. package/crud/sk-order.service.d.ts +45 -0
  41. package/crud/sk-point.service.d.ts +17 -0
  42. package/crud/sk-product.service.d.ts +84 -0
  43. package/crud/sk-promotion.service.d.ts +41 -0
  44. package/crud/sk-search.service.d.ts +12 -0
  45. package/crud/sk-store.service.d.ts +17 -0
  46. package/crud/sk-user.service.d.ts +25 -0
  47. package/esm2020/api/model/api-config.mjs +2 -0
  48. package/esm2020/api/model/api-pageable-param.mjs +29 -0
  49. package/esm2020/api/model/api-pageable.mjs +3 -0
  50. package/esm2020/api/model/api-response.mjs +3 -0
  51. package/esm2020/api/model/index.mjs +4 -0
  52. package/esm2020/api/public_api.mjs +4 -0
  53. package/esm2020/api/sk-api.module.mjs +35 -0
  54. package/esm2020/api/sk-api.service.mjs +145 -0
  55. package/esm2020/api/sk-front-lib-api.mjs +5 -0
  56. package/esm2020/article/public_api.mjs +7 -0
  57. package/esm2020/article/sk-article-editor-server.component.mjs +51 -0
  58. package/esm2020/article/sk-article-editor.component.mjs +93 -0
  59. package/esm2020/article/sk-article-server.module.mjs +33 -0
  60. package/esm2020/article/sk-article.module.mjs +32 -0
  61. package/esm2020/article/sk-article.service.mjs +248 -0
  62. package/esm2020/article/sk-froala-editor.directive.mjs +325 -0
  63. package/esm2020/article/sk-front-lib-article.mjs +5 -0
  64. package/esm2020/crud/public_api.mjs +25 -0
  65. package/esm2020/crud/sk-account.service.mjs +36 -0
  66. package/esm2020/crud/sk-affiliate.service.mjs +94 -0
  67. package/esm2020/crud/sk-auth-admin.guard.mjs +31 -0
  68. package/esm2020/crud/sk-auth.guard.mjs +31 -0
  69. package/esm2020/crud/sk-auth.service.mjs +67 -0
  70. package/esm2020/crud/sk-board.service.mjs +54 -0
  71. package/esm2020/crud/sk-brand.service.mjs +46 -0
  72. package/esm2020/crud/sk-cart.service.mjs +256 -0
  73. package/esm2020/crud/sk-category.service.mjs +63 -0
  74. package/esm2020/crud/sk-comment.service.mjs +43 -0
  75. package/esm2020/crud/sk-config.service.mjs +31 -0
  76. package/esm2020/crud/sk-contact.service.mjs +39 -0
  77. package/esm2020/crud/sk-coupon.service.mjs +62 -0
  78. package/esm2020/crud/sk-document.service.mjs +110 -0
  79. package/esm2020/crud/sk-etc.service.mjs +25 -0
  80. package/esm2020/crud/sk-file.service.mjs +37 -0
  81. package/esm2020/crud/sk-front-lib-crud.mjs +5 -0
  82. package/esm2020/crud/sk-keyword.service.mjs +46 -0
  83. package/esm2020/crud/sk-order.service.mjs +133 -0
  84. package/esm2020/crud/sk-point.service.mjs +45 -0
  85. package/esm2020/crud/sk-product.service.mjs +168 -0
  86. package/esm2020/crud/sk-promotion.service.mjs +84 -0
  87. package/esm2020/crud/sk-search.service.mjs +25 -0
  88. package/esm2020/crud/sk-store.service.mjs +47 -0
  89. package/esm2020/crud/sk-user.service.mjs +73 -0
  90. package/esm2020/google-analytics/google-analytics-router.module.mjs +30 -0
  91. package/esm2020/google-analytics/google-analytics.module.mjs +40 -0
  92. package/esm2020/google-analytics/initializers/google-analytics-router.initializer.mjs +24 -0
  93. package/esm2020/google-analytics/initializers/google-analytics.initializer.mjs +46 -0
  94. package/esm2020/google-analytics/interfaces/google-analytics-command.mjs +2 -0
  95. package/esm2020/google-analytics/interfaces/google-analytics-settings.mjs +2 -0
  96. package/esm2020/google-analytics/public_api.mjs +11 -0
  97. package/esm2020/google-analytics/services/google-analytics.service.mjs +223 -0
  98. package/esm2020/google-analytics/sk-front-lib-google-analytics.mjs +5 -0
  99. package/esm2020/google-analytics/tokens/google-analytics-settings-token.mjs +5 -0
  100. package/esm2020/google-analytics/types/ga-action.type.mjs +2 -0
  101. package/esm2020/google-analytics/types/ga-bind.type.mjs +2 -0
  102. package/esm2020/image/public_api.mjs +3 -0
  103. package/esm2020/image/sk-front-lib-image.mjs +5 -0
  104. package/esm2020/image/sk-image.component.mjs +262 -0
  105. package/esm2020/image/sk-image.module.mjs +43 -0
  106. package/esm2020/lib/sk-byte.pipe.mjs +4 -4
  107. package/esm2020/lib/sk-date-time.pipe.mjs +4 -4
  108. package/esm2020/lib/sk-date.pipe.mjs +4 -4
  109. package/esm2020/lib/sk-front-lib.module.mjs +5 -5
  110. package/esm2020/lib/sk-keys.pipe.mjs +4 -4
  111. package/esm2020/lib/sk-time.pipe.mjs +4 -4
  112. package/esm2020/model/lib/article.mjs +11 -0
  113. package/esm2020/model/lib/audit.mjs +12 -0
  114. package/esm2020/model/lib/auth.mjs +2 -0
  115. package/esm2020/model/lib/board.mjs +21 -0
  116. package/esm2020/model/lib/cart.mjs +29 -0
  117. package/esm2020/model/lib/comment.mjs +25 -0
  118. package/esm2020/model/lib/contact.mjs +28 -0
  119. package/esm2020/model/lib/coupon.mjs +23 -0
  120. package/esm2020/model/lib/document.mjs +49 -0
  121. package/esm2020/model/lib/etc.mjs +57 -0
  122. package/esm2020/model/lib/file.mjs +8 -0
  123. package/esm2020/model/lib/filetype.mjs +179 -0
  124. package/esm2020/model/lib/grid.mjs +83 -0
  125. package/esm2020/model/lib/nicepay.mjs +81 -0
  126. package/esm2020/model/lib/order.mjs +106 -0
  127. package/esm2020/model/lib/payment.mjs +35 -0
  128. package/esm2020/model/lib/point.mjs +47 -0
  129. package/esm2020/model/lib/product-series.mjs +2 -0
  130. package/esm2020/model/lib/product.mjs +156 -0
  131. package/esm2020/model/lib/promotion.mjs +80 -0
  132. package/esm2020/model/lib/shipping.mjs +37 -0
  133. package/esm2020/model/lib/tosspay.mjs +61 -0
  134. package/esm2020/model/lib/user.mjs +61 -0
  135. package/esm2020/model/public_api.mjs +24 -0
  136. package/esm2020/model/sk-front-lib-model.mjs +5 -0
  137. package/esm2020/search-address/dialog/dialog.component.mjs +27 -0
  138. package/esm2020/search-address/public_api.mjs +4 -0
  139. package/esm2020/search-address/sk-front-lib-search-address.mjs +5 -0
  140. package/esm2020/search-address/sk-search-address.directive.mjs +41 -0
  141. package/esm2020/search-address/sk-search-address.model.mjs +8 -0
  142. package/esm2020/search-address/sk-search-address.module.mjs +52 -0
  143. package/esm2020/search-address/sk-search-address.service.mjs +65 -0
  144. package/esm2020/uploader/public_api.mjs +4 -0
  145. package/esm2020/uploader/sk-front-lib-uploader.mjs +5 -0
  146. package/esm2020/uploader/sk-uploader-file-item.model.mjs +95 -0
  147. package/esm2020/uploader/sk-uploader.animation.mjs +47 -0
  148. package/esm2020/uploader/sk-uploader.class.mjs +188 -0
  149. package/esm2020/uploader/sk-uploader.component.mjs +120 -0
  150. package/esm2020/uploader/sk-uploader.directive.mjs +44 -0
  151. package/esm2020/uploader/sk-uploader.module.mjs +62 -0
  152. package/fesm2015/sk-front-lib-api.mjs +218 -0
  153. package/fesm2015/sk-front-lib-api.mjs.map +1 -0
  154. package/fesm2015/sk-front-lib-article.mjs +762 -0
  155. package/fesm2015/sk-front-lib-article.mjs.map +1 -0
  156. package/fesm2015/sk-front-lib-crud.mjs +1529 -0
  157. package/fesm2015/sk-front-lib-crud.mjs.map +1 -0
  158. package/fesm2015/sk-front-lib-google-analytics.mjs +361 -0
  159. package/fesm2015/sk-front-lib-google-analytics.mjs.map +1 -0
  160. package/fesm2015/sk-front-lib-image.mjs +306 -0
  161. package/fesm2015/sk-front-lib-image.mjs.map +1 -0
  162. package/fesm2015/sk-front-lib-model.mjs +1171 -0
  163. package/fesm2015/sk-front-lib-model.mjs.map +1 -0
  164. package/fesm2015/sk-front-lib-search-address.mjs +188 -0
  165. package/fesm2015/sk-front-lib-search-address.mjs.map +1 -0
  166. package/fesm2015/sk-front-lib-uploader.mjs +551 -0
  167. package/fesm2015/sk-front-lib-uploader.mjs.map +1 -0
  168. package/fesm2015/sk-front-lib.mjs +19 -19
  169. package/fesm2015/sk-front-lib.mjs.map +1 -1
  170. package/fesm2020/sk-front-lib-api.mjs +216 -0
  171. package/fesm2020/sk-front-lib-api.mjs.map +1 -0
  172. package/fesm2020/sk-front-lib-article.mjs +771 -0
  173. package/fesm2020/sk-front-lib-article.mjs.map +1 -0
  174. package/fesm2020/sk-front-lib-crud.mjs +1525 -0
  175. package/fesm2020/sk-front-lib-crud.mjs.map +1 -0
  176. package/fesm2020/sk-front-lib-google-analytics.mjs +358 -0
  177. package/fesm2020/sk-front-lib-google-analytics.mjs.map +1 -0
  178. package/fesm2020/sk-front-lib-image.mjs +309 -0
  179. package/fesm2020/sk-front-lib-image.mjs.map +1 -0
  180. package/fesm2020/sk-front-lib-model.mjs +1171 -0
  181. package/fesm2020/sk-front-lib-model.mjs.map +1 -0
  182. package/fesm2020/sk-front-lib-search-address.mjs +186 -0
  183. package/fesm2020/sk-front-lib-search-address.mjs.map +1 -0
  184. package/fesm2020/sk-front-lib-uploader.mjs +549 -0
  185. package/fesm2020/sk-front-lib-uploader.mjs.map +1 -0
  186. package/fesm2020/sk-front-lib.mjs +19 -19
  187. package/fesm2020/sk-front-lib.mjs.map +1 -1
  188. package/google-analytics/google-analytics-router.module.d.ts +8 -0
  189. package/google-analytics/google-analytics.module.d.ts +10 -0
  190. package/google-analytics/initializers/google-analytics-router.initializer.d.ts +5 -0
  191. package/google-analytics/initializers/google-analytics.initializer.d.ts +4 -0
  192. package/google-analytics/interfaces/google-analytics-command.d.ts +4 -0
  193. package/google-analytics/interfaces/google-analytics-settings.d.ts +6 -0
  194. package/google-analytics/package.json +10 -0
  195. package/google-analytics/public_api.d.ts +10 -0
  196. package/google-analytics/services/google-analytics.service.d.ts +85 -0
  197. package/google-analytics/sk-front-lib-google-analytics.d.ts +5 -0
  198. package/google-analytics/tokens/google-analytics-settings-token.d.ts +3 -0
  199. package/google-analytics/types/ga-action.type.d.ts +1 -0
  200. package/google-analytics/types/ga-bind.type.d.ts +1 -0
  201. package/image/package.json +10 -0
  202. package/image/public_api.d.ts +3 -0
  203. package/image/sk-front-lib-image.d.ts +5 -0
  204. package/image/sk-image.component.d.ts +112 -0
  205. package/image/sk-image.module.d.ts +12 -0
  206. package/lib/sk-byte.pipe.d.ts +1 -1
  207. package/lib/sk-date-time.pipe.d.ts +1 -1
  208. package/lib/sk-date.pipe.d.ts +1 -1
  209. package/lib/sk-keys.pipe.d.ts +1 -1
  210. package/lib/sk-time.pipe.d.ts +1 -1
  211. package/model/lib/article.d.ts +13 -0
  212. package/model/lib/audit.d.ts +13 -0
  213. package/model/lib/auth.d.ts +8 -0
  214. package/model/lib/board.d.ts +39 -0
  215. package/model/lib/cart.d.ts +45 -0
  216. package/model/lib/comment.d.ts +43 -0
  217. package/model/lib/contact.d.ts +40 -0
  218. package/model/lib/coupon.d.ts +116 -0
  219. package/model/lib/document.d.ts +104 -0
  220. package/model/lib/etc.d.ts +220 -0
  221. package/model/lib/file.d.ts +24 -0
  222. package/model/lib/filetype.d.ts +10 -0
  223. package/model/lib/grid.d.ts +97 -0
  224. package/model/lib/nicepay.d.ts +39 -0
  225. package/model/lib/order.d.ts +163 -0
  226. package/model/lib/payment.d.ts +32 -0
  227. package/model/lib/point.d.ts +30 -0
  228. package/model/lib/product-series.d.ts +25 -0
  229. package/model/lib/product.d.ts +309 -0
  230. package/model/lib/promotion.d.ts +169 -0
  231. package/model/lib/shipping.d.ts +44 -0
  232. package/model/lib/tosspay.d.ts +29 -0
  233. package/model/lib/user.d.ts +54 -0
  234. package/model/package.json +10 -0
  235. package/model/public_api.d.ts +23 -0
  236. package/model/sk-front-lib-model.d.ts +5 -0
  237. package/package.json +67 -3
  238. package/search-address/dialog/dialog.component.d.ts +13 -0
  239. package/search-address/package.json +10 -0
  240. package/search-address/public_api.d.ts +3 -0
  241. package/search-address/sk-front-lib-search-address.d.ts +5 -0
  242. package/search-address/sk-search-address.directive.d.ts +15 -0
  243. package/search-address/sk-search-address.model.d.ts +40 -0
  244. package/search-address/sk-search-address.module.d.ts +14 -0
  245. package/search-address/sk-search-address.service.d.ts +13 -0
  246. package/uploader/package.json +10 -0
  247. package/uploader/public_api.d.ts +4 -0
  248. package/uploader/sk-front-lib-uploader.d.ts +5 -0
  249. package/uploader/sk-uploader-file-item.model.d.ts +29 -0
  250. package/uploader/sk-uploader.animation.d.ts +1 -0
  251. package/uploader/sk-uploader.class.d.ts +47 -0
  252. package/uploader/sk-uploader.component.d.ts +28 -0
  253. package/uploader/sk-uploader.directive.d.ts +15 -0
  254. package/uploader/sk-uploader.module.d.ts +16 -0
  255. /package/{index.d.ts → sk-front-lib.d.ts} +0 -0
@@ -0,0 +1,309 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Component, ChangeDetectionStrategy, Input, ViewChild, NgModule } from '@angular/core';
3
+ import * as i5 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+ import * as i2 from '@angular/material/dialog';
6
+ import { MatDialogModule } from '@angular/material/dialog';
7
+ import * as i4 from 'ng-in-viewport';
8
+ import { InViewportModule } from 'ng-in-viewport';
9
+ import { HttpParams } from '@angular/common/http';
10
+ import Viewer from 'viewerjs';
11
+ import * as i1 from '@angular/cdk/platform';
12
+ import * as i3 from 'sk-front-lib/api';
13
+ import { MatButtonModule } from '@angular/material/button';
14
+ import { MatIconModule } from '@angular/material/icon';
15
+
16
+ class SkImageComponent {
17
+ constructor(cdRef, platform, dialog, apiService) {
18
+ this.cdRef = cdRef;
19
+ this.platform = platform;
20
+ this.dialog = dialog;
21
+ this.apiService = apiService;
22
+ this.mode = 'imgId';
23
+ this.defaultOption = {
24
+ mode: 'img',
25
+ width: 0,
26
+ height: 0,
27
+ resizeType: 'ratio_crop',
28
+ resizeBgColor: '',
29
+ filter: '',
30
+ blur: 0,
31
+ clickable: false,
32
+ coverBackground: null,
33
+ previewColor: ''
34
+ };
35
+ this.currentOption = {};
36
+ this.apiCompleted = false;
37
+ this.isVisible = false;
38
+ this.src = null;
39
+ this.imgId = null;
40
+ this.skfile = null;
41
+ this.option = {};
42
+ this.alt = '';
43
+ this.imageClass = [];
44
+ this.waitSrc = null;
45
+ this.activeSrc = null;
46
+ this.originalSrc = null;
47
+ this.ratio = 100;
48
+ this.backgroundColor = '#fff';
49
+ this.imageOpacity = 0;
50
+ this.viewerOptions = {
51
+ navbar: false,
52
+ backdrop: 'static',
53
+ className: 'sk-custom-viewerjs',
54
+ toolbar: {
55
+ zoomIn: 1,
56
+ zoomOut: 1,
57
+ oneToOne: 1,
58
+ reset: 1,
59
+ },
60
+ movable: true,
61
+ rotatable: false,
62
+ toggleOnDblclick: false,
63
+ };
64
+ }
65
+ // -----------------------------------------------------------------------------------------------------
66
+ // @ Accessors
67
+ // ------------------------------------------1-----------------------------------------------------------
68
+ get containerStyle() {
69
+ if (this.mode === 'imgId' || this.mode === 'skfile') {
70
+ return {
71
+ 'padding-bottom': this.ratio + '%',
72
+ height: '0px',
73
+ overflow: 'hidden',
74
+ 'background-color': this.backgroundColor,
75
+ cursor: this.currentOption.clickable ? 'pointer' : 'inherit',
76
+ };
77
+ }
78
+ else {
79
+ return {
80
+ 'padding-bottom': '0px',
81
+ height: 'auto',
82
+ overflow: 'hidden',
83
+ 'background-color': this.backgroundColor
84
+ };
85
+ }
86
+ }
87
+ get imageStyle() {
88
+ if (this.mode === 'imgId') {
89
+ return {
90
+ position: 'absolute',
91
+ width: '100%',
92
+ top: '0',
93
+ left: '0',
94
+ right: '0',
95
+ bottom: '0',
96
+ opacity: this.imageOpacity
97
+ };
98
+ }
99
+ else {
100
+ return {
101
+ position: 'relative',
102
+ width: '100%',
103
+ opacity: this.imageOpacity
104
+ };
105
+ }
106
+ }
107
+ get coverStyle() {
108
+ if (this.option.coverBackground) {
109
+ return {
110
+ background: this.option.coverBackground,
111
+ opacity: this.imageOpacity
112
+ };
113
+ }
114
+ else {
115
+ return {};
116
+ }
117
+ }
118
+ // -----------------------------------------------------------------------------------------------------
119
+ // @ Lifecycle hooks
120
+ // -----------------------------------------------------------------------------------------------------
121
+ ngOnChanges(changes) {
122
+ this._init();
123
+ /**
124
+ * skfile, imgId, src 순서로 우선권을 가진다.
125
+ */
126
+ if (!!changes.skfile && !!changes.skfile.currentValue) {
127
+ this.mode = 'skfile';
128
+ this.imgId = this.skfile.id;
129
+ this.loadImageByFile();
130
+ return;
131
+ }
132
+ if (!!changes.imgId) {
133
+ this.mode = 'imgId';
134
+ this.loadImageById();
135
+ return;
136
+ }
137
+ if (!!changes.src) {
138
+ this.mode = 'src';
139
+ this.loadImageBySrc();
140
+ return;
141
+ }
142
+ }
143
+ ngAfterViewInit() {
144
+ }
145
+ ngOnDestroy() {
146
+ if (this.viewerInstance) {
147
+ this.viewerInstance.destroy();
148
+ }
149
+ }
150
+ // -----------------------------------------------------------------------------------------------------
151
+ // @ Public methods
152
+ // -----------------------------------------------------------------------------------------------------
153
+ loadImageByFile() {
154
+ this.waitSrc = `${this.apiService.apiServer}/api/public/images/${this.imgId}?${this.getHttpParam().toString()}`;
155
+ this.originalSrc = `${this.apiService.apiServer}/api/public/images/${this.imgId}`;
156
+ const metadata = this.skfile;
157
+ if (this.currentOption.width > 0 && this.currentOption.height > 0) {
158
+ this.ratio = this.currentOption.height / this.currentOption.width * 100;
159
+ }
160
+ else {
161
+ this.ratio = metadata.height / metadata.width * 100;
162
+ }
163
+ this.backgroundColor = !!this.currentOption.previewColor ? this.currentOption.previewColor :
164
+ (this.currentOption.filter === 'gray' ? '#fff' : metadata.color);
165
+ this.apiCompleted = true;
166
+ this.cdRef.markForCheck();
167
+ this.startImageLoad();
168
+ }
169
+ loadImageById() {
170
+ this.apiService.get(`/api/public/images/${this.imgId}/metadata`)
171
+ .subscribe(result => {
172
+ this.skfile = result.data;
173
+ this.loadImageByFile();
174
+ }, error => {
175
+ this.showFallbackImage();
176
+ });
177
+ }
178
+ loadImageBySrc() {
179
+ this.waitSrc = this.src;
180
+ this.apiCompleted = true;
181
+ }
182
+ showFallbackImage() {
183
+ this.mode = 'fallback';
184
+ this.waitSrc = '/assets/images/no_image_available.jpeg';
185
+ this.apiCompleted = true;
186
+ }
187
+ onIntersection(event) {
188
+ if (event.visible) {
189
+ this.isVisible = true;
190
+ if (this.apiCompleted) {
191
+ this.startImageLoad();
192
+ }
193
+ }
194
+ }
195
+ startImageLoad() {
196
+ if (!this.activeSrc && this.apiCompleted && this.isVisible) {
197
+ this.activeSrc = this.waitSrc;
198
+ this.cdRef.markForCheck();
199
+ }
200
+ }
201
+ onImageLoad() {
202
+ this.imageOpacity = 1;
203
+ this.cdRef.markForCheck();
204
+ }
205
+ onImageError() {
206
+ this.activeSrc = null;
207
+ this.showFallbackImage();
208
+ this.startImageLoad();
209
+ }
210
+ openDialog() {
211
+ if (this.currentOption.clickable && this.mode !== 'fallback') {
212
+ if (this.viewerInstance) {
213
+ this.viewerInstance.destroy();
214
+ }
215
+ this.viewerInstance = new Viewer(this.imageElement.nativeElement, {
216
+ // Transitions currently break the Viewer when running optimizations during ng build (i.e in prod mode)
217
+ // TODO: Find a fix for this so we don't have to force disable transitions
218
+ transition: false,
219
+ url: 'src-viewer',
220
+ ...this.viewerOptions,
221
+ });
222
+ this.viewerInstance.show();
223
+ }
224
+ }
225
+ // -----------------------------------------------------------------------------------------------------
226
+ // @ Private methods
227
+ // -----------------------------------------------------------------------------------------------------
228
+ _init() {
229
+ this.mode = 'imgId';
230
+ this.imageOpacity = 0;
231
+ this.apiCompleted = false;
232
+ this.activeSrc = null;
233
+ Object.assign(this.currentOption, this.defaultOption, this.option);
234
+ this.cdRef.detectChanges();
235
+ }
236
+ getHttpParam() {
237
+ const option = this.currentOption;
238
+ return new HttpParams()
239
+ .append('w', String(option.width))
240
+ .append('h', String(option.height))
241
+ .append('resize', option.resizeType)
242
+ .append('bgcolor', option.resizeBgColor)
243
+ .append('filter', String(option.filter))
244
+ .append('blur', String(option.blur));
245
+ }
246
+ }
247
+ SkImageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SkImageComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Platform }, { token: i2.MatDialog }, { token: i3.SkApiService }], target: i0.ɵɵFactoryTarget.Component });
248
+ SkImageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: SkImageComponent, selector: "sk-image", inputs: { src: "src", imgId: "imgId", skfile: "skfile", option: "option", alt: "alt", imageClass: "imageClass" }, viewQueries: [{ propertyName: "imageElement", first: true, predicate: ["imageElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"img-container\" inViewport (inViewportAction)=\"onIntersection($event)\"\n [ngStyle]=\"containerStyle\" (click)=\"openDialog()\" #imageElement>\n <div class=\"img-cover\" *ngIf=\"option.coverBackground\" [ngStyle]=\"coverStyle\"></div>\n <img *ngIf=\"activeSrc && isVisible\" [ngClass]=\"imageClass\"\n [src]=\"activeSrc\"\n [attr.src-viewer]=\"originalSrc\"\n [ngStyle]=\"imageStyle\"\n [alt]=\"alt\"\n (load)=\"onImageLoad()\"\n (error)=\"onImageError()\"\n />\n</div>\n", styles: [":host{display:block}.img-container{position:relative}.img-container:after{display:block;content:\"\";width:100%}.img-container .img-cover{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;z-index:1;transition:opacity linear .8s}.img-container>img{display:block;opacity:0;transition:opacity linear .8s}\n"], directives: [{ type: i4.InViewportDirective, selector: "[inViewport]", inputs: ["inViewportOptions"], outputs: ["inViewportAction"] }, { type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
249
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SkImageComponent, decorators: [{
250
+ type: Component,
251
+ args: [{ selector: 'sk-image', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"img-container\" inViewport (inViewportAction)=\"onIntersection($event)\"\n [ngStyle]=\"containerStyle\" (click)=\"openDialog()\" #imageElement>\n <div class=\"img-cover\" *ngIf=\"option.coverBackground\" [ngStyle]=\"coverStyle\"></div>\n <img *ngIf=\"activeSrc && isVisible\" [ngClass]=\"imageClass\"\n [src]=\"activeSrc\"\n [attr.src-viewer]=\"originalSrc\"\n [ngStyle]=\"imageStyle\"\n [alt]=\"alt\"\n (load)=\"onImageLoad()\"\n (error)=\"onImageError()\"\n />\n</div>\n", styles: [":host{display:block}.img-container{position:relative}.img-container:after{display:block;content:\"\";width:100%}.img-container .img-cover{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;z-index:1;transition:opacity linear .8s}.img-container>img{display:block;opacity:0;transition:opacity linear .8s}\n"] }]
252
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.Platform }, { type: i2.MatDialog }, { type: i3.SkApiService }]; }, propDecorators: { src: [{
253
+ type: Input
254
+ }], imgId: [{
255
+ type: Input
256
+ }], skfile: [{
257
+ type: Input
258
+ }], option: [{
259
+ type: Input
260
+ }], alt: [{
261
+ type: Input
262
+ }], imageClass: [{
263
+ type: Input
264
+ }], imageElement: [{
265
+ type: ViewChild,
266
+ args: ['imageElement', { static: false }]
267
+ }] } });
268
+
269
+ class SkImageModule {
270
+ }
271
+ SkImageModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SkImageModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
272
+ SkImageModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SkImageModule, declarations: [SkImageComponent], imports: [CommonModule,
273
+ InViewportModule,
274
+ MatDialogModule,
275
+ MatButtonModule,
276
+ MatIconModule], exports: [SkImageComponent] });
277
+ SkImageModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SkImageModule, imports: [[
278
+ CommonModule,
279
+ InViewportModule,
280
+ MatDialogModule,
281
+ MatButtonModule,
282
+ MatIconModule
283
+ ]] });
284
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SkImageModule, decorators: [{
285
+ type: NgModule,
286
+ args: [{
287
+ imports: [
288
+ CommonModule,
289
+ InViewportModule,
290
+ MatDialogModule,
291
+ MatButtonModule,
292
+ MatIconModule
293
+ ],
294
+ declarations: [
295
+ SkImageComponent,
296
+ ],
297
+ exports: [
298
+ SkImageComponent
299
+ ],
300
+ entryComponents: []
301
+ }]
302
+ }] });
303
+
304
+ /**
305
+ * Generated bundle index. Do not edit.
306
+ */
307
+
308
+ export { SkImageComponent, SkImageModule };
309
+ //# sourceMappingURL=sk-front-lib-image.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sk-front-lib-image.mjs","sources":["../../../projects/sk-front-lib/image/src/sk-image.component.ts","../../../projects/sk-front-lib/image/src/sk-image.component.html","../../../projects/sk-front-lib/image/src/sk-image.module.ts","../../../projects/sk-front-lib/image/src/sk-front-lib-image.ts"],"sourcesContent":["import { Platform } from '@angular/cdk/platform';\nimport { HttpParams } from '@angular/common/http';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { SkApiService } from 'sk-front-lib/api';\nimport { SkFile } from 'sk-front-lib/model';\n\nimport Viewer from 'viewerjs';\n\ninterface IMetadata {\n width?: number;\n height?: number;\n color?: string;\n}\n\nexport interface SkImageOptions {\n mode?: 'img' | 'css';\n width?: number;\n height?: number;\n resizeType?: 'ratio_crop' | 'ratio_fill';\n resizeBgColor?: string;\n filter?: 'gray' | '';\n blur?: number;\n clickable?: boolean;\n coverBackground?: string;\n previewColor?: string;\n}\n\n@Component({\n selector: 'sk-image',\n templateUrl: './sk-image.component.html',\n styleUrls: ['./sk-image.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SkImageComponent implements OnChanges, AfterViewInit, OnDestroy {\n\n mode: 'skfile' | 'imgId' | 'src' | 'fallback' = 'imgId';\n defaultOption: SkImageOptions = {\n mode: 'img',\n width: 0,\n height: 0,\n resizeType: 'ratio_crop',\n resizeBgColor: '',\n filter: '',\n blur: 0,\n clickable: false,\n coverBackground: null,\n previewColor: ''\n };\n currentOption: SkImageOptions = {};\n\n apiCompleted = false;\n isVisible = false;\n\n @Input() src: string = null;\n @Input() imgId: number = null;\n @Input() skfile: SkFile = null;\n @Input() option: SkImageOptions = {};\n @Input() alt = '';\n @Input() imageClass: string[] = [];\n waitSrc: string = null;\n activeSrc: string = null;\n originalSrc: string = null;\n\n ratio = 100;\n backgroundColor = '#fff';\n imageOpacity = 0;\n\n @ViewChild('imageElement', {static: false}) imageElement: ElementRef;\n viewerInstance: Viewer;\n viewerOptions = {\n navbar: false,\n backdrop: 'static',\n className: 'sk-custom-viewerjs',\n toolbar: {\n zoomIn: 1,\n zoomOut: 1,\n oneToOne: 1,\n reset: 1,\n },\n movable: true,\n rotatable: false,\n toggleOnDblclick: false,\n };\n\n constructor(private cdRef: ChangeDetectorRef,\n private platform: Platform,\n private dialog: MatDialog,\n private apiService: SkApiService) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // ------------------------------------------1-----------------------------------------------------------\n\n get containerStyle() {\n if (this.mode === 'imgId' || this.mode === 'skfile') {\n return {\n 'padding-bottom': this.ratio + '%',\n height: '0px',\n overflow: 'hidden',\n 'background-color': this.backgroundColor,\n cursor: this.currentOption.clickable ? 'pointer' : 'inherit',\n };\n } else {\n return {\n 'padding-bottom': '0px',\n height: 'auto',\n overflow: 'hidden',\n 'background-color': this.backgroundColor\n };\n }\n }\n\n get imageStyle() {\n if (this.mode === 'imgId') {\n return {\n position: 'absolute',\n width: '100%',\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n opacity: this.imageOpacity\n };\n } else {\n return {\n position: 'relative',\n width: '100%',\n opacity: this.imageOpacity\n };\n }\n }\n\n get coverStyle() {\n if (this.option.coverBackground) {\n return {\n background: this.option.coverBackground,\n opacity: this.imageOpacity\n }\n } else {\n return {};\n }\n }\n\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n ngOnChanges(changes: SimpleChanges): void {\n this._init();\n\n /**\n * skfile, imgId, src 순서로 우선권을 가진다.\n */\n if (!!changes.skfile && !!changes.skfile.currentValue) {\n this.mode = 'skfile';\n this.imgId = this.skfile.id;\n this.loadImageByFile();\n return;\n }\n\n if (!!changes.imgId) {\n this.mode = 'imgId';\n this.loadImageById();\n return;\n }\n\n if (!!changes.src) {\n this.mode = 'src';\n this.loadImageBySrc();\n return;\n }\n }\n\n ngAfterViewInit(): void {\n }\n\n ngOnDestroy(): void {\n if (this.viewerInstance) {\n this.viewerInstance.destroy();\n }\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n loadImageByFile() {\n this.waitSrc = `${this.apiService.apiServer}/api/public/images/${this.imgId}?${this.getHttpParam().toString()}`;\n this.originalSrc = `${this.apiService.apiServer}/api/public/images/${this.imgId}`;\n\n const metadata = this.skfile as IMetadata;\n if (this.currentOption.width > 0 && this.currentOption.height > 0) {\n this.ratio = this.currentOption.height / this.currentOption.width * 100;\n } else {\n this.ratio = metadata.height / metadata.width * 100;\n }\n\n this.backgroundColor = !!this.currentOption.previewColor ? this.currentOption.previewColor :\n (this.currentOption.filter === 'gray' ? '#fff' : metadata.color);\n\n this.apiCompleted = true;\n this.cdRef.markForCheck();\n this.startImageLoad();\n }\n\n loadImageById() {\n this.apiService.get<SkFile>(`/api/public/images/${this.imgId}/metadata`)\n .subscribe(\n result => {\n this.skfile = result.data;\n this.loadImageByFile();\n },\n error => {\n this.showFallbackImage();\n }\n );\n }\n\n loadImageBySrc() {\n this.waitSrc = this.src;\n this.apiCompleted = true;\n }\n\n showFallbackImage() {\n this.mode = 'fallback';\n this.waitSrc = '/assets/images/no_image_available.jpeg';\n this.apiCompleted = true;\n }\n\n onIntersection(event) {\n if (event.visible) {\n this.isVisible = true;\n if (this.apiCompleted) {\n this.startImageLoad();\n }\n }\n }\n\n startImageLoad() {\n if (!this.activeSrc && this.apiCompleted && this.isVisible) {\n this.activeSrc = this.waitSrc;\n this.cdRef.markForCheck();\n }\n }\n\n onImageLoad() {\n this.imageOpacity = 1;\n this.cdRef.markForCheck();\n }\n\n onImageError() {\n this.activeSrc = null;\n this.showFallbackImage();\n this.startImageLoad();\n }\n\n openDialog() {\n if (this.currentOption.clickable && this.mode !== 'fallback') {\n if (this.viewerInstance) {\n this.viewerInstance.destroy();\n }\n\n this.viewerInstance = new Viewer(this.imageElement.nativeElement, {\n // Transitions currently break the Viewer when running optimizations during ng build (i.e in prod mode)\n // TODO: Find a fix for this so we don't have to force disable transitions\n transition: false,\n url: 'src-viewer',\n ...this.viewerOptions,\n });\n this.viewerInstance.show();\n }\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n private _init() {\n this.mode = 'imgId';\n this.imageOpacity = 0;\n this.apiCompleted = false;\n this.activeSrc = null;\n Object.assign(this.currentOption, this.defaultOption, this.option);\n\n this.cdRef.detectChanges();\n }\n\n private getHttpParam(): HttpParams {\n const option: SkImageOptions = this.currentOption;\n\n return new HttpParams()\n .append('w', String(option.width))\n .append('h', String(option.height))\n .append('resize', option.resizeType)\n .append('bgcolor', option.resizeBgColor)\n .append('filter', String(option.filter))\n .append('blur', String(option.blur));\n }\n}\n","<div class=\"img-container\" inViewport (inViewportAction)=\"onIntersection($event)\"\n [ngStyle]=\"containerStyle\" (click)=\"openDialog()\" #imageElement>\n <div class=\"img-cover\" *ngIf=\"option.coverBackground\" [ngStyle]=\"coverStyle\"></div>\n <img *ngIf=\"activeSrc && isVisible\" [ngClass]=\"imageClass\"\n [src]=\"activeSrc\"\n [attr.src-viewer]=\"originalSrc\"\n [ngStyle]=\"imageStyle\"\n [alt]=\"alt\"\n (load)=\"onImageLoad()\"\n (error)=\"onImageError()\"\n />\n</div>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatDialogModule} from '@angular/material/dialog';\n\nimport {InViewportModule} from 'ng-in-viewport';\n\nimport {SkImageComponent} from './sk-image.component';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\n\n@NgModule({\n imports: [\n CommonModule,\n InViewportModule,\n\n MatDialogModule,\n MatButtonModule,\n MatIconModule\n ],\n declarations: [\n SkImageComponent,\n ],\n exports: [\n SkImageComponent\n ],\n entryComponents: [\n ]\n})\nexport class SkImageModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}