@uploadcare/file-uploader 1.13.3-alpha.0 → 1.14.0-alpha.11

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 (286) hide show
  1. package/abstract/ActivityBlock.d.ts +5 -5
  2. package/abstract/ActivityBlock.d.ts.map +1 -1
  3. package/abstract/ActivityBlock.js +10 -15
  4. package/abstract/Block.d.ts +9 -9
  5. package/abstract/Block.d.ts.map +1 -1
  6. package/abstract/Block.js +15 -0
  7. package/abstract/CTX.d.ts +6 -6
  8. package/abstract/CTX.d.ts.map +1 -1
  9. package/abstract/CTX.js +3 -1
  10. package/abstract/LocaleManager.d.ts +3 -3
  11. package/abstract/LocaleManager.d.ts.map +1 -1
  12. package/abstract/ModalManager.d.ts +124 -0
  13. package/abstract/ModalManager.d.ts.map +1 -0
  14. package/abstract/ModalManager.js +227 -0
  15. package/abstract/SecureUploadsManager.d.ts +2 -2
  16. package/abstract/SecureUploadsManager.d.ts.map +1 -1
  17. package/abstract/SolutionBlock.d.ts +2 -2
  18. package/abstract/SolutionBlock.d.ts.map +1 -1
  19. package/abstract/TypedCollection.d.ts.map +1 -1
  20. package/abstract/TypedData.d.ts +1 -1
  21. package/abstract/TypedData.d.ts.map +1 -1
  22. package/abstract/UploaderBlock.d.ts +8 -6
  23. package/abstract/UploaderBlock.d.ts.map +1 -1
  24. package/abstract/UploaderBlock.js +24 -8
  25. package/abstract/UploaderPublicApi.d.ts +24 -23
  26. package/abstract/UploaderPublicApi.d.ts.map +1 -1
  27. package/abstract/UploaderPublicApi.js +39 -9
  28. package/abstract/ValidationManager.d.ts +4 -4
  29. package/abstract/ValidationManager.d.ts.map +1 -1
  30. package/abstract/a11y.d.ts +2 -2
  31. package/abstract/a11y.d.ts.map +1 -1
  32. package/abstract/buildOutputCollectionState.d.ts +1 -1
  33. package/abstract/buildOutputCollectionState.d.ts.map +1 -1
  34. package/abstract/defineComponents.d.ts.map +1 -1
  35. package/abstract/l10nProcessor.d.ts.map +1 -1
  36. package/abstract/loadFileUploaderFrom.d.ts +1 -1
  37. package/abstract/loadFileUploaderFrom.d.ts.map +1 -1
  38. package/abstract/localeRegistry.d.ts.map +1 -1
  39. package/abstract/sharedConfigKey.d.ts.map +1 -1
  40. package/abstract/uploadEntrySchema.d.ts +2 -2
  41. package/abstract/uploadEntrySchema.d.ts.map +1 -1
  42. package/blocks/CameraSource/CameraSource.d.ts +9 -9
  43. package/blocks/CameraSource/CameraSource.d.ts.map +1 -1
  44. package/blocks/CameraSource/CameraSource.js +1 -0
  45. package/blocks/CameraSource/calcCameraModes.d.ts +1 -1
  46. package/blocks/CameraSource/constants.d.ts.map +1 -1
  47. package/blocks/CloudImageEditor/src/CloudImageEditorBlock.d.ts.map +1 -1
  48. package/blocks/CloudImageEditor/src/CropFrame.d.ts +1 -1
  49. package/blocks/CloudImageEditor/src/EditorImageCropper.d.ts +3 -3
  50. package/blocks/CloudImageEditor/src/EditorImageFader.d.ts +1 -1
  51. package/blocks/CloudImageEditor/src/EditorImageFader.d.ts.map +1 -1
  52. package/blocks/CloudImageEditor/src/EditorSlider.d.ts +1 -1
  53. package/blocks/CloudImageEditor/src/EditorSlider.d.ts.map +1 -1
  54. package/blocks/CloudImageEditor/src/EditorToolbar.d.ts +1 -1
  55. package/blocks/CloudImageEditor/src/crop-utils.d.ts +14 -14
  56. package/blocks/CloudImageEditor/src/crop-utils.d.ts.map +1 -1
  57. package/blocks/CloudImageEditor/src/cropper-constants.d.ts.map +1 -1
  58. package/blocks/CloudImageEditor/src/lib/applyFocusVisiblePolyfill.d.ts +1 -1
  59. package/blocks/CloudImageEditor/src/lib/applyFocusVisiblePolyfill.d.ts.map +1 -1
  60. package/blocks/CloudImageEditor/src/lib/parseCropPreset.d.ts +1 -1
  61. package/blocks/CloudImageEditor/src/lib/transformationUtils.d.ts +3 -3
  62. package/blocks/CloudImageEditor/src/lib/transformationUtils.d.ts.map +1 -1
  63. package/blocks/CloudImageEditor/src/state.d.ts +4 -4
  64. package/blocks/CloudImageEditor/src/svg-sprite.d.ts.map +1 -1
  65. package/blocks/CloudImageEditor/src/types.d.ts +8 -58
  66. package/blocks/CloudImageEditor/src/types.d.ts.map +1 -1
  67. package/blocks/CloudImageEditorActivity/CloudImageEditorActivity.d.ts +1 -1
  68. package/blocks/CloudImageEditorActivity/CloudImageEditorActivity.d.ts.map +1 -1
  69. package/blocks/CloudImageEditorActivity/CloudImageEditorActivity.js +2 -0
  70. package/blocks/Config/Config.d.ts +3 -12
  71. package/blocks/Config/Config.d.ts.map +1 -1
  72. package/blocks/Config/assertions.d.ts +1 -1
  73. package/blocks/Config/initialConfig.d.ts +1 -1
  74. package/blocks/Config/initialConfig.d.ts.map +1 -1
  75. package/blocks/Config/initialConfig.js +4 -0
  76. package/blocks/Config/normalizeConfigValue.d.ts +2 -1
  77. package/blocks/Config/normalizeConfigValue.d.ts.map +1 -1
  78. package/blocks/Config/normalizeConfigValue.js +19 -106
  79. package/blocks/Config/side-effects.d.ts.map +1 -1
  80. package/blocks/Config/validatorsType.d.ts +37 -0
  81. package/blocks/Config/validatorsType.d.ts.map +1 -0
  82. package/blocks/Config/validatorsType.js +134 -0
  83. package/blocks/DropArea/DropArea.d.ts +3 -2
  84. package/blocks/DropArea/DropArea.d.ts.map +1 -1
  85. package/blocks/DropArea/DropArea.js +21 -2
  86. package/blocks/DropArea/addDropzone.d.ts.map +1 -1
  87. package/blocks/DropArea/getDropItems.d.ts +2 -2
  88. package/blocks/DropArea/getDropItems.d.ts.map +1 -1
  89. package/blocks/ExternalSource/ExternalSource.d.ts +3 -3
  90. package/blocks/ExternalSource/ExternalSource.d.ts.map +1 -1
  91. package/blocks/ExternalSource/ExternalSource.js +2 -1
  92. package/blocks/ExternalSource/MessageBridge.d.ts +3 -3
  93. package/blocks/ExternalSource/MessageBridge.d.ts.map +1 -1
  94. package/blocks/ExternalSource/query-string.d.ts.map +1 -1
  95. package/blocks/ExternalSource/types.d.ts +64 -64
  96. package/blocks/ExternalSource/types.d.ts.map +1 -1
  97. package/blocks/FileItem/FileItem.d.ts +5 -6
  98. package/blocks/FileItem/FileItem.d.ts.map +1 -1
  99. package/blocks/FileItem/FileItem.js +40 -42
  100. package/blocks/FileItem/file-item.css +90 -0
  101. package/blocks/Img/ImgBase.d.ts +3 -3
  102. package/blocks/Img/ImgBase.d.ts.map +1 -1
  103. package/blocks/Img/ImgConfig.d.ts.map +1 -1
  104. package/blocks/Img/configurations.d.ts.map +1 -1
  105. package/blocks/Modal/Modal.d.ts +21 -2
  106. package/blocks/Modal/Modal.d.ts.map +1 -1
  107. package/blocks/Modal/Modal.js +52 -24
  108. package/blocks/ProgressBar/ProgressBar.d.ts.map +1 -1
  109. package/blocks/ProgressBar/ProgressBar.js +1 -0
  110. package/blocks/ProgressBar/progress-bar.css +1 -0
  111. package/blocks/Range/Range.d.ts.map +1 -1
  112. package/blocks/SimpleBtn/SimpleBtn.d.ts +2 -2
  113. package/blocks/SimpleBtn/SimpleBtn.d.ts.map +1 -1
  114. package/blocks/SimpleBtn/SimpleBtn.js +1 -1
  115. package/blocks/SourceBtn/SourceBtn.d.ts +3 -3
  116. package/blocks/SourceBtn/SourceBtn.d.ts.map +1 -1
  117. package/blocks/SourceBtn/SourceBtn.js +29 -15
  118. package/blocks/SourceList/SourceList.d.ts.map +1 -1
  119. package/blocks/SourceList/SourceList.js +17 -11
  120. package/blocks/Spinner/Spinner.d.ts.map +1 -1
  121. package/blocks/StartFrom/StartFrom.js +1 -1
  122. package/blocks/Thumb/Thumb.d.ts +48 -0
  123. package/blocks/Thumb/Thumb.d.ts.map +1 -0
  124. package/blocks/Thumb/Thumb.js +169 -0
  125. package/blocks/Thumb/thumb.css +4 -0
  126. package/blocks/UploadCtxProvider/EventEmitter.d.ts +20 -20
  127. package/blocks/UploadCtxProvider/EventEmitter.d.ts.map +1 -1
  128. package/blocks/UploadCtxProvider/UploadCtxProvider.d.ts +4 -4
  129. package/blocks/UploadCtxProvider/UploadCtxProvider.d.ts.map +1 -1
  130. package/blocks/UploadList/UploadList.d.ts +4 -2
  131. package/blocks/UploadList/UploadList.d.ts.map +1 -1
  132. package/blocks/UploadList/UploadList.js +16 -1
  133. package/blocks/UploadList/upload-list.css +23 -0
  134. package/blocks/UrlSource/UrlSource.d.ts.map +1 -1
  135. package/blocks/UrlSource/UrlSource.js +1 -0
  136. package/blocks/svg-backgrounds/svg-backgrounds.d.ts +3 -3
  137. package/blocks/svg-backgrounds/svg-backgrounds.d.ts.map +1 -1
  138. package/blocks/themes/uc-basic/common.css +1 -1
  139. package/blocks/themes/uc-basic/index.css +1 -0
  140. package/blocks/themes/uc-basic/svg-sprite.d.ts +1 -1
  141. package/blocks/themes/uc-basic/svg-sprite.d.ts.map +1 -1
  142. package/blocks/themes/uc-basic/svg-sprite.js +1 -1
  143. package/blocks/themes/uc-basic/theme.css +12 -0
  144. package/blocks/utils/UploadSource.d.ts +6 -1
  145. package/blocks/utils/UploadSource.d.ts.map +1 -1
  146. package/blocks/utils/UploadSource.js +7 -1
  147. package/blocks/utils/debounce.d.ts +3 -1
  148. package/blocks/utils/debounce.d.ts.map +1 -1
  149. package/blocks/utils/resizeImage.d.ts +1 -1
  150. package/blocks/utils/resizeImage.d.ts.map +1 -1
  151. package/blocks/utils/supportCapture.d.ts +2 -0
  152. package/blocks/utils/supportCapture.d.ts.map +1 -0
  153. package/blocks/utils/supportCapture.js +3 -0
  154. package/blocks/utils/throttle.d.ts +3 -1
  155. package/blocks/utils/throttle.d.ts.map +1 -1
  156. package/blocks/utils/userAgent.d.ts +1 -1
  157. package/blocks/utils/userAgent.d.ts.map +1 -1
  158. package/env.d.ts +1 -1
  159. package/env.d.ts.map +1 -1
  160. package/env.js +1 -1
  161. package/index.d.ts +2 -0
  162. package/index.js +2 -0
  163. package/index.ssr.d.ts +88 -15
  164. package/index.ssr.d.ts.map +1 -1
  165. package/index.ssr.js +119 -24
  166. package/locales/file-uploader/ar.d.ts +2 -0
  167. package/locales/file-uploader/ar.js +2 -0
  168. package/locales/file-uploader/az.d.ts +2 -0
  169. package/locales/file-uploader/az.js +2 -0
  170. package/locales/file-uploader/ca.d.ts +2 -0
  171. package/locales/file-uploader/ca.js +2 -0
  172. package/locales/file-uploader/cs.d.ts +2 -0
  173. package/locales/file-uploader/cs.js +2 -0
  174. package/locales/file-uploader/da.d.ts +2 -0
  175. package/locales/file-uploader/da.js +2 -0
  176. package/locales/file-uploader/de.d.ts +2 -0
  177. package/locales/file-uploader/de.js +2 -0
  178. package/locales/file-uploader/el.d.ts +2 -0
  179. package/locales/file-uploader/el.js +2 -0
  180. package/locales/file-uploader/en.d.ts +2 -1
  181. package/locales/file-uploader/en.js +2 -1
  182. package/locales/file-uploader/es.d.ts +2 -0
  183. package/locales/file-uploader/es.js +2 -0
  184. package/locales/file-uploader/et.d.ts +2 -0
  185. package/locales/file-uploader/et.js +2 -0
  186. package/locales/file-uploader/fi.d.ts +2 -0
  187. package/locales/file-uploader/fi.js +2 -0
  188. package/locales/file-uploader/fr.d.ts +2 -0
  189. package/locales/file-uploader/fr.js +2 -0
  190. package/locales/file-uploader/he.d.ts +2 -0
  191. package/locales/file-uploader/he.js +2 -0
  192. package/locales/file-uploader/hy.d.ts +2 -0
  193. package/locales/file-uploader/hy.js +2 -0
  194. package/locales/file-uploader/is.d.ts +2 -0
  195. package/locales/file-uploader/is.js +2 -0
  196. package/locales/file-uploader/it.d.ts +2 -0
  197. package/locales/file-uploader/it.js +2 -0
  198. package/locales/file-uploader/ja.d.ts +2 -0
  199. package/locales/file-uploader/ja.js +2 -0
  200. package/locales/file-uploader/ka.d.ts +2 -0
  201. package/locales/file-uploader/ka.js +2 -0
  202. package/locales/file-uploader/kk.d.ts +2 -0
  203. package/locales/file-uploader/kk.js +2 -0
  204. package/locales/file-uploader/ko.d.ts +2 -0
  205. package/locales/file-uploader/ko.js +2 -0
  206. package/locales/file-uploader/lv.d.ts +2 -0
  207. package/locales/file-uploader/lv.js +2 -0
  208. package/locales/file-uploader/nb.d.ts +2 -0
  209. package/locales/file-uploader/nb.js +2 -0
  210. package/locales/file-uploader/nl.d.ts +2 -0
  211. package/locales/file-uploader/nl.js +2 -0
  212. package/locales/file-uploader/pl.d.ts +2 -0
  213. package/locales/file-uploader/pl.js +2 -0
  214. package/locales/file-uploader/pt.d.ts +2 -0
  215. package/locales/file-uploader/pt.js +2 -0
  216. package/locales/file-uploader/ro.d.ts +2 -0
  217. package/locales/file-uploader/ro.js +2 -0
  218. package/locales/file-uploader/ru.d.ts +2 -0
  219. package/locales/file-uploader/ru.js +2 -0
  220. package/locales/file-uploader/sk.d.ts +2 -0
  221. package/locales/file-uploader/sk.js +2 -0
  222. package/locales/file-uploader/sr.d.ts +2 -0
  223. package/locales/file-uploader/sr.js +2 -0
  224. package/locales/file-uploader/sv.d.ts +2 -0
  225. package/locales/file-uploader/sv.js +2 -0
  226. package/locales/file-uploader/tr.d.ts +2 -0
  227. package/locales/file-uploader/tr.js +2 -0
  228. package/locales/file-uploader/uk.d.ts +2 -0
  229. package/locales/file-uploader/uk.js +2 -0
  230. package/locales/file-uploader/vi.d.ts +2 -0
  231. package/locales/file-uploader/vi.js +2 -0
  232. package/locales/file-uploader/zh-TW.d.ts +2 -0
  233. package/locales/file-uploader/zh-TW.js +2 -0
  234. package/locales/file-uploader/zh.d.ts +2 -0
  235. package/locales/file-uploader/zh.js +2 -0
  236. package/package.json +4 -2
  237. package/solutions/file-uploader/inline/FileUploaderInline.d.ts +2 -2
  238. package/solutions/file-uploader/inline/FileUploaderInline.d.ts.map +1 -1
  239. package/solutions/file-uploader/minimal/FileUploaderMinimal.d.ts +35 -0
  240. package/solutions/file-uploader/minimal/FileUploaderMinimal.d.ts.map +1 -1
  241. package/solutions/file-uploader/minimal/FileUploaderMinimal.js +122 -9
  242. package/solutions/file-uploader/minimal/index.css +25 -24
  243. package/solutions/file-uploader/minimal/index.d.ts +1 -13
  244. package/solutions/file-uploader/minimal/index.js +1 -13
  245. package/solutions/file-uploader/regular/FileUploaderRegular.d.ts +3 -5
  246. package/solutions/file-uploader/regular/FileUploaderRegular.d.ts.map +1 -1
  247. package/solutions/file-uploader/regular/FileUploaderRegular.js +17 -16
  248. package/types/exported.d.ts +7 -0
  249. package/utils/cdn-utils.d.ts +3 -3
  250. package/utils/cdn-utils.d.ts.map +1 -1
  251. package/utils/fileTypes.d.ts +1 -1
  252. package/utils/fileTypes.d.ts.map +1 -1
  253. package/utils/getPluralForm.d.ts.map +1 -1
  254. package/utils/isSecureTokenExpired.d.ts +1 -1
  255. package/utils/memoize.d.ts.map +1 -1
  256. package/utils/mixinClass.d.ts +3 -1
  257. package/utils/mixinClass.d.ts.map +1 -1
  258. package/utils/prettyBytes.d.ts.map +1 -1
  259. package/utils/template-utils.d.ts +1 -1
  260. package/utils/template-utils.d.ts.map +1 -1
  261. package/utils/toKebabCase.d.ts.map +1 -1
  262. package/utils/transparentPixelSrc.d.ts.map +1 -1
  263. package/utils/uniqueArray.d.ts.map +1 -1
  264. package/utils/validators/collection/validateCollectionUploadError.d.ts +1 -1
  265. package/utils/validators/collection/validateMultiple.d.ts +1 -1
  266. package/utils/validators/file/validateFileType.d.ts +1 -1
  267. package/utils/validators/file/validateIsImage.d.ts +1 -1
  268. package/utils/validators/file/validateMaxSizeLimit.d.ts +1 -1
  269. package/utils/validators/file/validateUploadError.d.ts +1 -1
  270. package/utils/waitForAttribute.d.ts +1 -1
  271. package/utils/waitForAttribute.d.ts.map +1 -1
  272. package/web/file-uploader.iife.min.js +4 -4
  273. package/web/file-uploader.min.js +4 -4
  274. package/web/uc-basic.min.css +1 -1
  275. package/web/uc-cloud-image-editor.min.css +1 -1
  276. package/web/uc-cloud-image-editor.min.js +4 -4
  277. package/web/uc-file-uploader-inline.min.css +1 -1
  278. package/web/uc-file-uploader-inline.min.js +4 -4
  279. package/web/uc-file-uploader-minimal.min.css +1 -1
  280. package/web/uc-file-uploader-minimal.min.js +4 -3
  281. package/web/uc-file-uploader-regular.min.css +1 -1
  282. package/web/uc-file-uploader-regular.min.js +4 -4
  283. package/web/uc-img.min.js +2 -2
  284. package/blocks/utils/checkDevice.d.ts +0 -9
  285. package/blocks/utils/checkDevice.d.ts.map +0 -1
  286. package/blocks/utils/checkDevice.js +0 -34
@@ -1,14 +1,12 @@
1
1
  // @ts-check
2
- import { ActivityBlock } from '../../abstract/ActivityBlock.js';
3
2
  import { Block } from '../../abstract/Block.js';
4
3
  import { stringToArray } from '../../utils/stringToArray.js';
5
- import { calcCameraModes } from '../CameraSource/calcCameraModes.js';
6
- import { isMobileDevice } from '../utils/checkDevice.js';
4
+ import { deserializeCsv } from '../utils/comma-separated.js';
5
+ import { isSupportCapture } from '../utils/supportCapture.js';
7
6
 
8
7
  export class SourceList extends Block {
9
8
  initCallback() {
10
9
  super.initCallback();
11
- const isMobile = isMobileDevice();
12
10
 
13
11
  this.subConfigValue('sourceList', (/** @type {String} */ val) => {
14
12
  let list = stringToArray(val);
@@ -24,15 +22,23 @@ export class SourceList extends Block {
24
22
  return;
25
23
  }
26
24
 
27
- html += /* HTML */ `<uc-source-btn role="listitem" type="${srcName}"></uc-source-btn>`;
25
+ if (srcName === 'camera' && isSupportCapture()) {
26
+ this.subConfigValue('cameraModes', (/** @type {String} */ val) => {
27
+ const cameraModes = deserializeCsv(val);
28
+
29
+ cameraModes.forEach((mode) => {
30
+ html += /* HTML */ `<uc-source-btn role="listitem" type="mobile-${mode}-camera"></uc-source-btn>`;
31
+ });
32
+
33
+ if (cameraModes.length === 0) {
34
+ html += /* HTML */ `<uc-source-btn role="listitem" type="mobile-photo-camera"></uc-source-btn>`;
35
+ }
36
+ });
28
37
 
29
- if (
30
- srcName === ActivityBlock.activities.CAMERA &&
31
- isMobile &&
32
- calcCameraModes(this.cfg).isVideoRecordingEnabled
33
- ) {
34
- html += /* HTML */ `<uc-source-btn role="listitem" type="video-camera"></uc-source-btn>`;
38
+ return;
35
39
  }
40
+
41
+ html += /* HTML */ `<uc-source-btn role="listitem" type="${srcName}"></uc-source-btn>`;
36
42
  });
37
43
 
38
44
  if (this.cfg.sourceListWrap) {
@@ -1 +1 @@
1
- {"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["Spinner.js"],"names":[],"mappings":"AAEA;IAGq5B,cAAgB;CAHx3B;;;;8BAFf,sBAAsB"}
1
+ {"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["Spinner.js"],"names":[],"mappings":"AAEA;;CAA6C;;;;8BAFf,sBAAsB"}
@@ -3,7 +3,7 @@ import { ActivityBlock } from '../../abstract/ActivityBlock.js';
3
3
  export class StartFrom extends ActivityBlock {
4
4
  historyTracked = true;
5
5
  /** @type {import('../../abstract/ActivityBlock.js').ActivityType} */
6
- activityType = 'start-from';
6
+ activityType = ActivityBlock.activities.START_FROM;
7
7
 
8
8
  initCallback() {
9
9
  super.initCallback();
@@ -0,0 +1,48 @@
1
+ export class Thumb extends UploaderBlock {
2
+ /**
3
+ * @private
4
+ * @type {any} TODO: Add types for upload entry
5
+ */
6
+ private _entry;
7
+ /**
8
+ * @private
9
+ * @type {IntersectionObserverEntry['boundingClientRect'] | null}
10
+ */
11
+ private _thumbRect;
12
+ _debouncedGenerateThumb: (() => Promise<void>) & {
13
+ cancel: () => void;
14
+ };
15
+ _isIntersecting: boolean;
16
+ init$: {
17
+ thumbUrl: string;
18
+ badgeIcon: string;
19
+ uid: string;
20
+ '*commonProgress': number;
21
+ '*uploadList': never[];
22
+ '*uploadQueue': import("@uploadcare/upload-client").Queue;
23
+ '*collectionErrors': ReturnType<import("../../index.js").OutputErrorCollection>[];
24
+ '*collectionState': import("../../index.js").OutputCollectionState | null;
25
+ '*groupInfo': import("@uploadcare/upload-client").UploadcareGroup | null;
26
+ '*uploadTrigger': Set<string>;
27
+ '*secureUploadsManager': import("../../abstract/SecureUploadsManager.js").SecureUploadsManager | null;
28
+ '*currentActivity': null;
29
+ '*currentActivityParams': {};
30
+ '*history': never[];
31
+ '*historyBack': null;
32
+ '*closeModal': () => void;
33
+ };
34
+ _calculateThumbSize(): number;
35
+ /** @private */
36
+ private _generateThumbnail;
37
+ /**
38
+ * @private
39
+ * @param {IntersectionObserverEntry[]} entries
40
+ */
41
+ private _observerCallback;
42
+ _observer: IntersectionObserver | undefined;
43
+ }
44
+ export namespace Thumb {
45
+ let template: string;
46
+ }
47
+ import { UploaderBlock } from '../../abstract/UploaderBlock.js';
48
+ //# sourceMappingURL=Thumb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Thumb.d.ts","sourceRoot":"","sources":["Thumb.js"],"names":[],"mappings":"AAMA;IACE;;;OAGG;IACH,eAAc;IAEd;;;OAGG;IACH,mBAAkB;IAElB;;MAA4E;IAE5E,yBAAwB;IAKtB;;;;;;;+CALF,gBAAS;mCAMD,gBAAU;6BAON,2BACC;;wCAGH,wCAGP;;;;;;MAVA;IAGH,8BAYC;IAED,eAAe;IACf,2BAqCC;IAED;;;OAGG;IACH,0BAaC;IAqCC,4CAAuG;CAW1G;;;;8BAzJ6B,iCAAiC"}
@@ -0,0 +1,169 @@
1
+ import { UploaderBlock } from '../../abstract/UploaderBlock.js';
2
+ import { createCdnUrl, createCdnUrlModifiers, createOriginalUrl } from '../../utils/cdn-utils.js';
3
+ import { fileCssBg } from '../svg-backgrounds/svg-backgrounds.js';
4
+ import { debounce } from '../utils/debounce.js';
5
+ import { generateThumb } from '../utils/resizeImage.js';
6
+
7
+ export class Thumb extends UploaderBlock {
8
+ /**
9
+ * @private
10
+ * @type {any} TODO: Add types for upload entry
11
+ */
12
+ _entry = null;
13
+
14
+ /**
15
+ * @private
16
+ * @type {IntersectionObserverEntry['boundingClientRect'] | null}
17
+ */
18
+ _thumbRect = null;
19
+
20
+ _debouncedGenerateThumb = debounce(this._generateThumbnail.bind(this), 100);
21
+
22
+ _isIntersecting = false;
23
+
24
+ constructor() {
25
+ super();
26
+
27
+ this.init$ = {
28
+ ...this.init$,
29
+ thumbUrl: '',
30
+ badgeIcon: '',
31
+ uid: '',
32
+ };
33
+ }
34
+
35
+ _calculateThumbSize() {
36
+ let size = Math.max(
37
+ parseInt(String(this?._thumbRect?.height || 0)),
38
+ parseInt(String(this?._thumbRect?.width || 0)),
39
+ this.cfg.thumbSize,
40
+ );
41
+
42
+ if (window.devicePixelRatio > 1) {
43
+ size *= window.devicePixelRatio;
44
+ }
45
+
46
+ return size;
47
+ }
48
+
49
+ /** @private */
50
+ async _generateThumbnail() {
51
+ if (!this._entry) {
52
+ return;
53
+ }
54
+ let entry = this._entry;
55
+
56
+ if (entry.getValue('fileInfo') && entry.getValue('isImage')) {
57
+ let size = this._calculateThumbSize();
58
+
59
+ let thumbUrl = await this.proxyUrl(
60
+ createCdnUrl(
61
+ createOriginalUrl(this.cfg.cdnCname, this._entry.getValue('uuid')),
62
+ createCdnUrlModifiers(entry.getValue('cdnUrlModifiers'), `scale_crop/${size}x${size}/center/-/preview/`),
63
+ ),
64
+ );
65
+ let currentThumbUrl = entry.getValue('thumbUrl');
66
+ if (currentThumbUrl !== thumbUrl) {
67
+ entry.setValue('thumbUrl', thumbUrl);
68
+ currentThumbUrl?.startsWith('blob:') && URL.revokeObjectURL(currentThumbUrl);
69
+ }
70
+ return;
71
+ }
72
+
73
+ if (entry.getValue('file')?.type.includes('image')) {
74
+ try {
75
+ let size = this._calculateThumbSize();
76
+
77
+ let thumbUrl = await generateThumb(entry.getValue('file'), size);
78
+ entry.setValue('thumbUrl', thumbUrl);
79
+ } catch (err) {
80
+ let color = window.getComputedStyle(this).getPropertyValue('--uc-muted-foreground');
81
+ entry.setValue('thumbUrl', fileCssBg(color));
82
+ }
83
+ } else {
84
+ let color = window.getComputedStyle(this).getPropertyValue('--uc-muted-foreground');
85
+ entry.setValue('thumbUrl', fileCssBg(color));
86
+ }
87
+ }
88
+
89
+ /**
90
+ * @private
91
+ * @param {IntersectionObserverEntry[]} entries
92
+ */
93
+ _observerCallback(entries) {
94
+ const [entry] = entries;
95
+ this._isIntersecting = entry.isIntersecting;
96
+
97
+ if (entry.isIntersecting) {
98
+ this._thumbRect = entry.boundingClientRect;
99
+ this._debouncedGenerateThumb();
100
+ this._observer?.disconnect();
101
+ }
102
+
103
+ if (entry.intersectionRatio === 0) {
104
+ this._debouncedGenerateThumb.cancel();
105
+ }
106
+ }
107
+
108
+ initCallback() {
109
+ super.initCallback();
110
+
111
+ this.defineAccessor('badgeIcon', (/** @type {string} */ val) => (this.$.badgeIcon = val));
112
+
113
+ this.defineAccessor('uid', (/** @type {string} */ value) => {
114
+ this.set$({ uid: value });
115
+ });
116
+
117
+ this.sub('uid', (value) => {
118
+ this._entry = this.uploadCollection.read(value);
119
+ });
120
+
121
+ this._entry?.subscribe('fileInfo', (fileInfo) => {
122
+ if (fileInfo?.isImage && this._isIntersecting) {
123
+ this._debouncedGenerateThumb();
124
+ }
125
+ });
126
+
127
+ this._entry?.subscribe('thumbUrl', (thumbUrl) => {
128
+ this.$.thumbUrl = thumbUrl ? `url(${thumbUrl})` : '';
129
+ });
130
+
131
+ this._entry?.subscribe('cdnUrlModifiers', () => {
132
+ if (this._isIntersecting) {
133
+ this._debouncedGenerateThumb();
134
+ }
135
+ });
136
+
137
+ this.setAttribute('role', 'img');
138
+ }
139
+
140
+ connectedCallback() {
141
+ super.connectedCallback();
142
+
143
+ this._observer = new window.IntersectionObserver(this._observerCallback.bind(this), { threshold: 0.1 });
144
+
145
+ this._observer.observe(this);
146
+ }
147
+
148
+ disconnectedCallback() {
149
+ super.disconnectedCallback();
150
+
151
+ this._debouncedGenerateThumb.cancel();
152
+ this._observer?.disconnect();
153
+ }
154
+ }
155
+
156
+ Thumb.template = /* html */ `
157
+ <div class="uc-thumb" set="style.backgroundImage: thumbUrl">
158
+ <div class="uc-badge">
159
+ <uc-icon set="@name: badgeIcon"></uc-icon>
160
+ </div>
161
+ </div>
162
+ `;
163
+
164
+ Thumb.bindAttributes({
165
+ // @ts-expect-error TODO: fix types inside symbiote
166
+ badgeIcon: null,
167
+ // @ts-expect-error TODO: fix types inside symbiote
168
+ uid: null,
169
+ });
@@ -0,0 +1,4 @@
1
+ uc-thumb {
2
+ width: 100%;
3
+ height: 100%;
4
+ }
@@ -61,9 +61,9 @@ export class EventEmitter {
61
61
  */
62
62
  private _debugPrint;
63
63
  /** @param {import('../../abstract/Block.js').Block} target */
64
- bindTarget(target: import('../../abstract/Block.js').Block): void;
64
+ bindTarget(target: import("../../abstract/Block.js").Block): void;
65
65
  /** @param {import('../../abstract/Block.js').Block} target */
66
- unbindTarget(target: import('../../abstract/Block.js').Block): void;
66
+ unbindTarget(target: import("../../abstract/Block.js").Block): void;
67
67
  /**
68
68
  * @private
69
69
  * @template {(typeof EventType)[keyof typeof EventType]} T
@@ -78,30 +78,30 @@ export class EventEmitter {
78
78
  * @param {TDebounce extends false | undefined ? unknown : () => unknown} [payload]
79
79
  * @param {{ debounce?: TDebounce }} [options]
80
80
  */
81
- emit<T extends "change" | "file-added" | "file-removed" | "file-upload-start" | "file-upload-progress" | "file-upload-success" | "file-upload-failed" | "file-url-changed" | "modal-open" | "modal-close" | "done-click" | "upload-click" | "activity-change" | "common-upload-start" | "common-upload-progress" | "common-upload-success" | "common-upload-failed" | "group-created", TDebounce extends number | boolean | undefined>(type: T, payload?: (TDebounce extends false | undefined ? unknown : () => unknown) | undefined, { debounce }?: {
82
- debounce?: TDebounce | undefined;
83
- } | undefined): void;
81
+ emit<T extends (typeof EventType)[keyof typeof EventType], TDebounce extends boolean | number | undefined>(type: T, payload?: TDebounce extends false | undefined ? unknown : () => unknown, { debounce }?: {
82
+ debounce?: TDebounce;
83
+ }): void;
84
84
  }
85
85
  export type EventPayload = {
86
- [EventType.FILE_ADDED]: import('../../index.js').OutputFileEntry<'idle'>;
87
- [EventType.FILE_REMOVED]: import('../../index.js').OutputFileEntry<'removed'>;
88
- [EventType.FILE_UPLOAD_START]: import('../../index.js').OutputFileEntry<'uploading'>;
89
- [EventType.FILE_UPLOAD_PROGRESS]: import('../../index.js').OutputFileEntry<'uploading'>;
90
- [EventType.FILE_UPLOAD_SUCCESS]: import('../../index.js').OutputFileEntry<'success'>;
91
- [EventType.FILE_UPLOAD_FAILED]: import('../../index.js').OutputFileEntry<'failed'>;
92
- [EventType.FILE_URL_CHANGED]: import('../../index.js').OutputFileEntry<'success'>;
86
+ [EventType.FILE_ADDED]: import("../../index.js").OutputFileEntry<"idle">;
87
+ [EventType.FILE_REMOVED]: import("../../index.js").OutputFileEntry<"removed">;
88
+ [EventType.FILE_UPLOAD_START]: import("../../index.js").OutputFileEntry<"uploading">;
89
+ [EventType.FILE_UPLOAD_PROGRESS]: import("../../index.js").OutputFileEntry<"uploading">;
90
+ [EventType.FILE_UPLOAD_SUCCESS]: import("../../index.js").OutputFileEntry<"success">;
91
+ [EventType.FILE_UPLOAD_FAILED]: import("../../index.js").OutputFileEntry<"failed">;
92
+ [EventType.FILE_URL_CHANGED]: import("../../index.js").OutputFileEntry<"success">;
93
93
  [EventType.MODAL_OPEN]: void;
94
94
  [EventType.MODAL_CLOSE]: void;
95
95
  [EventType.ACTIVITY_CHANGE]: {
96
- activity: import('../../abstract/ActivityBlock.js').ActivityType;
96
+ activity: import("../../abstract/ActivityBlock.js").ActivityType;
97
97
  };
98
98
  [EventType.UPLOAD_CLICK]: void;
99
- [EventType.DONE_CLICK]: import('../../index.js').OutputCollectionState;
100
- [EventType.COMMON_UPLOAD_START]: import('../../index.js').OutputCollectionState<'uploading'>;
101
- [EventType.COMMON_UPLOAD_PROGRESS]: import('../../index.js').OutputCollectionState<'uploading'>;
102
- [EventType.COMMON_UPLOAD_SUCCESS]: import('../../index.js').OutputCollectionState<'success'>;
103
- [EventType.COMMON_UPLOAD_FAILED]: import('../../index.js').OutputCollectionState<'failed'>;
104
- [EventType.CHANGE]: import('../../index.js').OutputCollectionState;
105
- [EventType.GROUP_CREATED]: import('../../index.js').OutputCollectionState<'success', 'has-group'>;
99
+ [EventType.DONE_CLICK]: import("../../index.js").OutputCollectionState;
100
+ [EventType.COMMON_UPLOAD_START]: import("../../index.js").OutputCollectionState<"uploading">;
101
+ [EventType.COMMON_UPLOAD_PROGRESS]: import("../../index.js").OutputCollectionState<"uploading">;
102
+ [EventType.COMMON_UPLOAD_SUCCESS]: import("../../index.js").OutputCollectionState<"success">;
103
+ [EventType.COMMON_UPLOAD_FAILED]: import("../../index.js").OutputCollectionState<"failed">;
104
+ [EventType.CHANGE]: import("../../index.js").OutputCollectionState;
105
+ [EventType.GROUP_CREATED]: import("../../index.js").OutputCollectionState<"success", "has-group">;
106
106
  };
107
107
  //# sourceMappingURL=EventEmitter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventEmitter.d.ts","sourceRoot":"","sources":["EventEmitter.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;IAmBE,uDAAuD;IACvD,kCADsB,OAAO,EAAE,KAAK,IAAI,EAGvC;IArBD;;;OAGG;IACH,sBAA0B;IAE1B;;;OAGG;IACH,iBAAqB;IAErB;;;OAGG;IACH,oBAAmB;IAOnB,8DAA8D;IAC9D,mBADY,OAAO,yBAAyB,EAAE,KAAK,QAGlD;IAED,8DAA8D;IAC9D,qBADY,OAAO,yBAAyB,EAAE,KAAK,QAGlD;IAED;;;;;OAKG;IACH,kBAaC;IAED;;;;;;OAMG;IACH,ifAHiE,OAAO;;yBAkBvE;CACF;2BAtGY;IACZ,CAAK,UAAU,UAAU,CAAC,EAAE,OAAO,gBAAgB,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAC7E,CAAK,UAAU,YAAY,CAAC,EAAE,OAAO,gBAAgB,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IAClF,CAAK,UAAU,iBAAiB,CAAC,EAAE,OAAO,gBAAgB,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;IACzF,CAAK,UAAU,oBAAoB,CAAC,EAAE,OAAO,gBAAgB,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;IAC5F,CAAK,UAAU,mBAAmB,CAAC,EAAE,OAAO,gBAAgB,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACzF,CAAK,UAAU,kBAAkB,CAAC,EAAE,OAAO,gBAAgB,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IACvF,CAAK,UAAU,gBAAgB,CAAC,EAAE,OAAO,gBAAgB,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACtF,CAAK,UAAU,UAAU,CAAC,EAAE,IAAI,CAAC;IACjC,CAAK,UAAU,WAAW,CAAC,EAAE,IAAI,CAAC;IAClC,CAAK,UAAU,eAAe,CAAC,EAAE;QACjC,QAAc,EAAE,OAAO,iCAAiC,EAAE,YAAY,CAAC;KAClE,CAAC;IACN,CAAK,UAAU,YAAY,CAAC,EAAE,IAAI,CAAC;IACnC,CAAK,UAAU,UAAU,CAAC,EAAE,OAAO,gBAAgB,EAAE,qBAAqB,CAAC;IAC3E,CAAK,UAAU,mBAAmB,CAAC,EAAE,OAAO,gBAAgB,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACjG,CAAK,UAAU,sBAAsB,CAAC,EAAE,OAAO,gBAAgB,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACpG,CAAK,UAAU,qBAAqB,CAAC,EAAE,OAAO,gBAAgB,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACjG,CAAK,UAAU,oBAAoB,CAAC,EAAE,OAAO,gBAAgB,EAAE,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC/F,CAAK,UAAU,MAAM,CAAC,EAAE,OAAO,gBAAgB,EAAE,qBAAqB,CAAC;IACvE,CAAK,UAAU,aAAa,CAAC,EAAE,OAAO,gBAAgB,EAAE,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;CACnG"}
1
+ {"version":3,"file":"EventEmitter.d.ts","sourceRoot":"","sources":["EventEmitter.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;IAmBE,uDAAuD;IACvD,wBADY,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,EAGvC;IArBD;;;OAGG;IACH,sBAA0B;IAE1B;;;OAGG;IACH,iBAAqB;IAErB;;;OAGG;IACH,oBAAmB;IAOnB,8DAA8D;IAC9D,mBADY,OAAO,yBAAyB,EAAE,KAAK,QAGlD;IAED,8DAA8D;IAC9D,qBADY,OAAO,yBAAyB,EAAE,KAAK,QAGlD;IAED;;;;;OAKG;IACH,kBAaC;IAED;;;;;;OAMG;IACH,KAN0D,CAAC,SAA9C,CAAE,OAAO,SAAS,EAAE,MAAM,OAAO,SAAS,CAAE,EACb,SAAS,SAAvC,OAAO,GAAG,MAAM,GAAG,SAAU,QAChC,CAAC,YACD,SAAS,SAAS,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,OAAO,iBAC7D;QAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;KAAE,QAiBlC;CACF;2BAtGY;IACZ,CAAK,SAAS,CAAC,UAAU,CAAC,EAAE,OAAO,gBAAgB,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAC7E,CAAK,SAAS,CAAC,YAAY,CAAC,EAAE,OAAO,gBAAgB,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IAClF,CAAK,SAAS,CAAC,iBAAiB,CAAC,EAAE,OAAO,gBAAgB,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;IACzF,CAAK,SAAS,CAAC,oBAAoB,CAAC,EAAE,OAAO,gBAAgB,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;IAC5F,CAAK,SAAS,CAAC,mBAAmB,CAAC,EAAE,OAAO,gBAAgB,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACzF,CAAK,SAAS,CAAC,kBAAkB,CAAC,EAAE,OAAO,gBAAgB,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IACvF,CAAK,SAAS,CAAC,gBAAgB,CAAC,EAAE,OAAO,gBAAgB,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACtF,CAAK,SAAS,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;IACjC,CAAK,SAAS,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC;IAClC,CAAK,SAAS,CAAC,eAAe,CAAC,EAAE;QAC3B,QAAQ,EAAE,OAAO,iCAAiC,EAAE,YAAY,CAAC;KAClE,CAAC;IACN,CAAK,SAAS,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;IACnC,CAAK,SAAS,CAAC,UAAU,CAAC,EAAE,OAAO,gBAAgB,EAAE,qBAAqB,CAAC;IAC3E,CAAK,SAAS,CAAC,mBAAmB,CAAC,EAAE,OAAO,gBAAgB,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACjG,CAAK,SAAS,CAAC,sBAAsB,CAAC,EAAE,OAAO,gBAAgB,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACpG,CAAK,SAAS,CAAC,qBAAqB,CAAC,EAAE,OAAO,gBAAgB,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACjG,CAAK,SAAS,CAAC,oBAAoB,CAAC,EAAE,OAAO,gBAAgB,EAAE,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC/F,CAAK,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,gBAAgB,EAAE,qBAAqB,CAAC;IACvE,CAAK,SAAS,CAAC,aAAa,CAAC,EAAE,OAAO,gBAAgB,EAAE,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;CACnG"}
@@ -1,7 +1,7 @@
1
- export type UploadCtxProvider = (new () => {
2
- addEventListener<T extends "change" | "file-added" | "file-removed" | "file-upload-start" | "file-upload-progress" | "file-upload-success" | "file-upload-failed" | "file-url-changed" | "modal-open" | "modal-close" | "done-click" | "upload-click" | "activity-change" | "common-upload-start" | "common-upload-progress" | "common-upload-success" | "common-upload-failed" | "group-created">(type: T, listener: (e: CustomEvent<import("./EventEmitter.js").EventPayload[T]>) => void, options?: boolean | AddEventListenerOptions): void;
3
- removeEventListener<T_1 extends "change" | "file-added" | "file-removed" | "file-upload-start" | "file-upload-progress" | "file-upload-success" | "file-upload-failed" | "file-url-changed" | "modal-open" | "modal-close" | "done-click" | "upload-click" | "activity-change" | "common-upload-start" | "common-upload-progress" | "common-upload-success" | "common-upload-failed" | "group-created">(type: T_1, listener: (e: CustomEvent<import("./EventEmitter.js").EventPayload[T_1]>) => void, options?: boolean | EventListenerOptions): void;
4
- } & UploadCtxProviderClass) & Omit<typeof UploadCtxProviderClass, "new">;
1
+ export type UploadCtxProvider = import("../../utils/mixinClass.js").MixinClass<typeof UploadCtxProviderClass, {
2
+ addEventListener<T extends (typeof import("./EventEmitter.js").EventType)[keyof typeof import("./EventEmitter.js").EventType]>(type: T, listener: (e: CustomEvent<import("./EventEmitter.js").EventPayload[T]>) => void, options?: boolean | AddEventListenerOptions): void;
3
+ removeEventListener<T extends (typeof import("./EventEmitter.js").EventType)[keyof typeof import("./EventEmitter.js").EventType]>(type: T, listener: (e: CustomEvent<import("./EventEmitter.js").EventPayload[T]>) => void, options?: boolean | EventListenerOptions): void;
4
+ }>;
5
5
  /**
6
6
  * @typedef {import('../../utils/mixinClass.js').MixinClass<
7
7
  * typeof UploadCtxProviderClass,
@@ -1 +1 @@
1
- {"version":3,"file":"UploadCtxProvider.d.ts","sourceRoot":"","sources":["UploadCtxProvider.js"],"names":[],"mappings":";2dA8BoF,IAAI,YACrE,OAAO,GAAG,uBAAuB,GAC1C,IAAI;oeAKsE,IAAI,YACrE,OAAO,GAAG,oBAAoB,GACvC,IAAI;;AAjBd;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,kDAAoH;AAxCpH;CAcC;;;;8BAhB6B,iCAAiC;0BACrC,mBAAmB"}
1
+ {"version":3,"file":"UploadCtxProvider.d.ts","sourceRoot":"","sources":["UploadCtxProvider.js"],"names":[],"mappings":"gCAuBa,OAAO,2BAA2B,EAAE,UAAU,CAC1D,OAAW,sBAAsB,EACjC;IACM,gBAAgB,CACd,CAAC,SAAS,CAAC,cAAc,mBAAmB,EAAE,SAAS,CAAC,CAAC,MAAM,cAAc,mBAAmB,EAAE,SAAS,CAAC,EAE5G,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,OAAO,mBAAmB,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAC/E,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAC1C,IAAI,CAAC;IACR,mBAAmB,CACjB,CAAC,SAAS,CAAC,cAAc,mBAAmB,EAAE,SAAS,CAAC,CAAC,MAAM,cAAc,mBAAmB,EAAE,SAAS,CAAC,EAE5G,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,OAAO,mBAAmB,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAC/E,OAAO,CAAC,EAAE,OAAO,GAAG,oBAAoB,GACvC,IAAI,CAAC;CACT,CACF;AAnBJ;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,gCAA4C,iBAAiB,CAAuD;AAxCpH;CAcC;;;;8BAhB6B,iCAAiC;0BACrC,mBAAmB"}
@@ -1,3 +1,4 @@
1
+ /** @typedef {'grid' | 'list'} FilesViewMode */
1
2
  /**
2
3
  * @typedef {{
3
4
  * total: number;
@@ -24,8 +25,8 @@ export class UploadList extends UploaderBlock {
24
25
  '*commonProgress': number;
25
26
  '*uploadList': never[];
26
27
  '*uploadQueue': import("@uploadcare/upload-client").Queue;
27
- '*collectionErrors': any[];
28
- '*collectionState': import("../../types").OutputCollectionState<import("../../types").OutputCollectionStatus, "maybe-has-group"> | null;
28
+ '*collectionErrors': ReturnType<import("../../types").OutputErrorCollection>[];
29
+ '*collectionState': import("../../types").OutputCollectionState | null;
29
30
  '*groupInfo': import("@uploadcare/upload-client").UploadcareGroup | null;
30
31
  '*uploadTrigger': Set<string>;
31
32
  '*secureUploadsManager': import("../../abstract/SecureUploadsManager.js").SecureUploadsManager | null;
@@ -48,6 +49,7 @@ export class UploadList extends UploaderBlock {
48
49
  export namespace UploadList {
49
50
  let template: string;
50
51
  }
52
+ export type FilesViewMode = "grid" | "list";
51
53
  export type Summary = {
52
54
  total: number;
53
55
  succeed: number;
@@ -1 +1 @@
1
- {"version":3,"file":"UploadList.d.ts","sourceRoot":"","sources":["UploadList.js"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AAEH;IAKE,4BAAoD;IAKlD;;;;;;;;;;;;;;;;;;;;;;;;;;MA0BC;IAGH,eAAe;IACf,yCASQ;IAER,eAAe;IACf,4BAuCC;IAED;;;OAGG;IACH,uBAmBC;CAoEF;;;;sBAhMY;IACZ,KAAS,EAAE,MAAM,CAAC;IAClB,OAAW,EAAE,MAAM,CAAC;IACpB,SAAa,EAAE,MAAM,CAAC;IACtB,MAAU,EAAE,MAAM,CAAC;CAChB;8BAV0B,iCAAiC"}
1
+ {"version":3,"file":"UploadList.d.ts","sourceRoot":"","sources":["UploadList.js"],"names":[],"mappings":"AAMA,+CAA+C;AAE/C;;;;;;;GAOG;AAEH;IAKE,4BAAoD;IAKlD;;;;;;;;;;;;;;;;+CALwC,aAAU;mCAOhD,aAAQ;6BAGN,2BACL;;wCAMK,wCAAwB;;;;;;MAc3B;IAGH,eAAe;IACf,yCASQ;IAER,eAAe;IACf,4BAuCC;IAED;;;OAGG;IACH,uBAmBC;CAwEF;;;;4BAvMa,MAAM,GAAG,MAAM;sBAGhB;IACR,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;8BAZ0B,iCAAiC"}
@@ -4,6 +4,8 @@ import { UploaderBlock } from '../../abstract/UploaderBlock.js';
4
4
  import { EventType } from '../UploadCtxProvider/EventEmitter.js';
5
5
  import { throttle } from '../utils/throttle.js';
6
6
 
7
+ /** @typedef {'grid' | 'list'} FilesViewMode */
8
+
7
9
  /**
8
10
  * @typedef {{
9
11
  * total: number;
@@ -149,6 +151,10 @@ export class UploadList extends UploaderBlock {
149
151
  }
150
152
  });
151
153
 
154
+ this.subConfigValue('filesViewMode', (mode) => {
155
+ this.setAttribute('mode', mode);
156
+ });
157
+
152
158
  this.sub('*currentActivity', (currentActivity) => {
153
159
  if (!this.couldOpenActivity && currentActivity === this.activityType) {
154
160
  this.$['*currentActivity'] = this.initActivity;
@@ -216,7 +222,16 @@ UploadList.template = /* HTML */ `
216
222
  <slot name="empty"><span l10n="no-files"></span></slot>
217
223
  </div>
218
224
 
219
- <div class="uc-files" repeat="*uploadList" repeat-item-tag="uc-file-item"></div>
225
+ <div class="uc-files">
226
+ <div class="uc-files-wrapper" repeat="*uploadList" repeat-item-tag="uc-file-item"></div>
227
+ <button
228
+ type="button"
229
+ class="uc-add-more-btn uc-secondary-btn"
230
+ set="onclick: onAdd; @disabled: !addMoreBtnEnabled; @hidden: !addMoreBtnVisible"
231
+ >
232
+ <uc-icon name="add"></uc-icon><span l10n="add-more"></span>
233
+ </button>
234
+ </div>
220
235
 
221
236
  <div class="uc-common-error" set="@hidden: !commonErrorMessage; textContent: commonErrorMessage;"></div>
222
237
 
@@ -22,6 +22,10 @@ uc-upload-list .uc-files {
22
22
  overflow: auto;
23
23
  }
24
24
 
25
+ uc-upload-list .uc-files-wrapper {
26
+ display: contents;
27
+ }
28
+
25
29
  uc-upload-list .uc-toolbar {
26
30
  display: flex;
27
31
  gap: 4px;
@@ -63,3 +67,22 @@ uc-upload-list .uc-common-error {
63
67
  uc-upload-list .uc-add-more-btn uc-icon {
64
68
  display: none;
65
69
  }
70
+
71
+ /* GRID */
72
+ uc-upload-list[mode='grid'] .uc-files {
73
+ display: flex;
74
+ flex-wrap: wrap;
75
+ gap: var(--uc-grid-gap);
76
+ }
77
+
78
+ uc-upload-list .uc-files .uc-add-more-btn,
79
+ uc-upload-list[mode='grid'] uc-file-item {
80
+ flex: 0 0 calc((100% - (var(--uc-grid-gap) * (var(--uc-grid-col) - 1))) / var(--uc-grid-col));
81
+ max-width: calc((100% - (var(--uc-grid-gap) * (var(--uc-grid-col) - 1))) / var(--uc-grid-col));
82
+ height: var(--uc-grid-preview-image-height);
83
+ aspect-ratio: var(--uc-grid-aspect-ratio);
84
+ }
85
+
86
+ uc-upload-list .uc-files .uc-add-more-btn {
87
+ display: none;
88
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"UrlSource.d.ts","sourceRoot":"","sources":["UrlSource.js"],"names":[],"mappings":"AAIA;IAEE,oBAA4C;IAE5C,WAiBE;CAWH;;;;8BApC6B,iCAAiC"}
1
+ {"version":3,"file":"UrlSource.d.ts","sourceRoot":"","sources":["UrlSource.js"],"names":[],"mappings":"AAIA;IAEE,oBAA4C;IAE5C,WAkBE;CAWH;;;;8BArC6B,iCAAiC"}
@@ -14,6 +14,7 @@ export class UrlSource extends UploaderBlock {
14
14
 
15
15
  let url = this.ref.input['value'];
16
16
  this.api.addFileFromUrl(url, { source: UploadSource.URL });
17
+ this.modalManager.open(ActivityBlock.activities.UPLOAD_LIST);
17
18
  this.$['*currentActivity'] = ActivityBlock.activities.UPLOAD_LIST;
18
19
  },
19
20
  onCancel: () => {
@@ -3,15 +3,15 @@
3
3
  * @param {String} [color2]
4
4
  * @returns {String}
5
5
  */
6
- export function checkerboardCssBg(color1?: string | undefined, color2?: string | undefined): string;
6
+ export function checkerboardCssBg(color1?: string, color2?: string): string;
7
7
  /**
8
8
  * @param {String} [color]
9
9
  * @returns {String}
10
10
  */
11
- export function strokesCssBg(color?: string | undefined): string;
11
+ export function strokesCssBg(color?: string): string;
12
12
  /**
13
13
  * @param {String} [color]
14
14
  * @returns {String}
15
15
  */
16
- export function fileCssBg(color?: string | undefined, width?: number, height?: number): string;
16
+ export function fileCssBg(color?: string, width?: number, height?: number): string;
17
17
  //# sourceMappingURL=svg-backgrounds.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"svg-backgrounds.d.ts","sourceRoot":"","sources":["svg-backgrounds.js"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,oGAMC;AAED;;;GAGG;AACH,iEAIC;AAED;;;GAGG;AACH,+FAMC"}
1
+ {"version":3,"file":"svg-backgrounds.d.ts","sourceRoot":"","sources":["svg-backgrounds.js"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,4EAMC;AAED;;;GAGG;AACH,qDAIC;AAED;;;GAGG;AACH,mFAMC"}
@@ -13,7 +13,7 @@
13
13
  display: none !important;
14
14
  }
15
15
 
16
- :where([uc-wgt-common]) [activity]:not([active]) {
16
+ :where([uc-wgt-common]) [activity]:not([active], .active) {
17
17
  display: none;
18
18
  }
19
19
 
@@ -31,6 +31,7 @@
31
31
  @import url('../../CloudImageEditorActivity/index.css');
32
32
  @import url('../../Select/select.css');
33
33
  @import url('../../Spinner/spinner.css');
34
+ @import url('../../Thumb/thumb.css');
34
35
 
35
36
  /* POST RESET */
36
37
  @import url('post-reset.css');