@uploadcare/file-uploader 1.13.0-alpha.3 → 1.13.0

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 (50) hide show
  1. package/abstract/UploaderPublicApi.d.ts.map +1 -1
  2. package/abstract/UploaderPublicApi.js +4 -11
  3. package/blocks/CameraSource/CameraSource.d.ts +12 -22
  4. package/blocks/CameraSource/CameraSource.d.ts.map +1 -1
  5. package/blocks/CameraSource/CameraSource.js +81 -83
  6. package/blocks/CameraSource/camera-source.css +1 -0
  7. package/blocks/CameraSource/constants.d.ts +15 -0
  8. package/blocks/CameraSource/constants.d.ts.map +1 -0
  9. package/blocks/CameraSource/constants.js +17 -0
  10. package/blocks/CloudImageEditor/src/CropFrame.d.ts +0 -7
  11. package/blocks/CloudImageEditor/src/CropFrame.d.ts.map +1 -1
  12. package/blocks/CloudImageEditor/src/CropFrame.js +0 -50
  13. package/blocks/CloudImageEditor/src/css/common.css +0 -4
  14. package/blocks/CloudImageEditor/src/lib/parseTabs.js +2 -2
  15. package/blocks/Config/Config.d.ts +3 -3
  16. package/blocks/Config/Config.d.ts.map +1 -1
  17. package/blocks/Config/Config.js +13 -3
  18. package/blocks/Config/assertions.d.ts +5 -0
  19. package/blocks/Config/assertions.d.ts.map +1 -0
  20. package/blocks/Config/assertions.js +37 -0
  21. package/blocks/Config/initialConfig.d.ts.map +1 -1
  22. package/blocks/Config/initialConfig.js +4 -5
  23. package/blocks/Config/normalizeConfigValue.d.ts.map +1 -1
  24. package/blocks/Config/normalizeConfigValue.js +20 -8
  25. package/blocks/Config/side-effects.d.ts +7 -0
  26. package/blocks/Config/side-effects.d.ts.map +1 -0
  27. package/blocks/Config/side-effects.js +32 -0
  28. package/blocks/UploadList/upload-list.css +1 -0
  29. package/blocks/utils/comma-separated.d.ts +1 -1
  30. package/blocks/utils/comma-separated.d.ts.map +1 -1
  31. package/blocks/utils/comma-separated.js +5 -2
  32. package/env.d.ts +1 -1
  33. package/env.js +1 -1
  34. package/index.ssr.d.ts +1 -15
  35. package/index.ssr.d.ts.map +1 -1
  36. package/index.ssr.js +6 -17
  37. package/package.json +3 -5
  38. package/types/exported.d.ts +81 -66
  39. package/web/file-uploader.iife.min.js +4 -4
  40. package/web/file-uploader.min.js +4 -4
  41. package/web/uc-basic.min.css +1 -1
  42. package/web/uc-cloud-image-editor.min.css +1 -1
  43. package/web/uc-cloud-image-editor.min.js +4 -4
  44. package/web/uc-file-uploader-inline.min.css +1 -1
  45. package/web/uc-file-uploader-inline.min.js +4 -4
  46. package/web/uc-file-uploader-minimal.min.css +1 -1
  47. package/web/uc-file-uploader-minimal.min.js +3 -3
  48. package/web/uc-file-uploader-regular.min.css +1 -1
  49. package/web/uc-file-uploader-regular.min.js +4 -4
  50. package/web/uc-img.min.js +1 -1
@@ -446,54 +446,10 @@ export class CropFrame extends Block {
446
446
  this.ref['svg-el'].style.cursor = hoverThumb ? thumbCursor(hoverThumb.direction) : 'initial';
447
447
  }
448
448
 
449
- /**
450
- * @private
451
- * @param {String} href
452
- */
453
- _createMask(href) {
454
- if (this._frameImage) {
455
- this._frameImage.setAttribute('href', href);
456
- return;
457
- }
458
-
459
- let svg = this.ref['svg-el'];
460
- let fr = document.createDocumentFragment();
461
-
462
- let imageNode = createSvgNode('image', {
463
- href,
464
- });
465
-
466
- imageNode.setAttribute('class', 'uc-cloud-mask');
467
-
468
- fr.appendChild(imageNode);
469
-
470
- svg.appendChild(fr);
471
-
472
- this._frameImage = imageNode;
473
- }
474
-
475
- _updateMask() {
476
- let cropBox = this.$['*cropBox'];
477
-
478
- if (!cropBox || !this._frameImage) {
479
- return;
480
- }
481
-
482
- let { x, y, width, height } = cropBox;
483
-
484
- setSvgNodeAttrs(this._frameImage, {
485
- x,
486
- y,
487
- height,
488
- width,
489
- });
490
- }
491
-
492
449
  /** @private */
493
450
  _render() {
494
451
  this._updateBackdrop();
495
452
  this._updateFrame();
496
- this._updateMask();
497
453
  }
498
454
 
499
455
  /** @param {boolean} visible */
@@ -535,12 +491,6 @@ export class CropFrame extends Block {
535
491
  });
536
492
  });
537
493
 
538
- this.subConfigValue('cloudImageEditorMaskHref', (maskHref) => {
539
- if (maskHref) {
540
- this._createMask(maskHref);
541
- }
542
- });
543
-
544
494
  this.sub('dragging', (dragging) => {
545
495
  if (!this._frameGuides) return;
546
496
  this._frameGuides.setAttribute(
@@ -1190,7 +1190,3 @@ uc-presence-toggle.uc-initial {
1190
1190
  [uc-cloud-image-editor] button:focus-visible {
1191
1191
  outline: 1px auto -webkit-focus-ring-color;
1192
1192
  }
1193
-
1194
- [uc-cloud-image-editor] .uc-cloud-mask {
1195
- pointer-events: none;
1196
- }
@@ -1,12 +1,12 @@
1
1
  // @ts-check
2
2
 
3
- import { deserealizeCsv } from '../../../utils/comma-separated.js';
3
+ import { deserializeCsv } from '../../../utils/comma-separated.js';
4
4
  import { ALL_TABS } from '../toolbar-constants.js';
5
5
 
6
6
  /** @param {string} tabs */
7
7
  export const parseTabs = (tabs) => {
8
8
  if (!tabs) return ALL_TABS;
9
- const tabList = deserealizeCsv(tabs).filter((tab) => ALL_TABS.includes(tab));
9
+ const tabList = deserializeCsv(tabs).filter((tab) => ALL_TABS.includes(tab));
10
10
  if (tabList.length === 0) {
11
11
  return ALL_TABS;
12
12
  }
@@ -9,7 +9,7 @@
9
9
  * 'iconHrefResolver',
10
10
  * 'fileValidators',
11
11
  * 'collectionValidators',
12
- * 'mediaRecorerOptions',
12
+ * 'mediaRecorderOptions',
13
13
  * ]}
14
14
  */
15
15
  export const complexConfigKeys: [
@@ -20,7 +20,7 @@ export const complexConfigKeys: [
20
20
  'iconHrefResolver',
21
21
  'fileValidators',
22
22
  'collectionValidators',
23
- 'mediaRecorerOptions'
23
+ 'mediaRecorderOptions'
24
24
  ];
25
25
  export type Config = import('../../utils/mixinClass.js').MixinClass<typeof ConfigClass, import('../../types').ConfigType>;
26
26
  /** @typedef {import('../../utils/mixinClass.js').MixinClass<typeof ConfigClass, import('../../types').ConfigType>} Config */
@@ -64,6 +64,6 @@ declare class ConfigClass extends Block {
64
64
  }
65
65
  import { Block } from '../../abstract/Block.js';
66
66
  /** Mapping of attribute names to state */
67
- declare const attrStateMapping: Record<"pubkey" | "multiple" | "accept" | "store" | "debug" | "crop-preset" | "secure-expire" | "max-local-file-size-bytes" | "multiple-min" | "multiple-max" | "confirm-upload" | "img-only" | "external-sources-preferred-types" | "external-sources-embed-css" | "camera-mirror" | "camera-capture" | "source-list" | "thumb-size" | "show-empty-list" | "use-local-image-editor" | "use-cloud-image-editor" | "cloud-image-editor-tabs" | "remove-copyright" | "image-shrink" | "modal-scroll-lock" | "modal-backdrop-strokes" | "source-list-wrap" | "remote-tab-session-key" | "cdn-cname" | "base-url" | "social-base-url" | "secure-signature" | "secure-delivery-proxy" | "retry-throttled-request-max-times" | "multipart-min-file-size" | "multipart-chunk-size" | "max-concurrent-requests" | "multipart-max-concurrent-requests" | "multipart-max-attempts" | "check-for-url-duplicates" | "save-url-for-recurrent-uploads" | "group-output" | "user-agent-integration" | "locale-name" | "secure-uploads-expire-threshold" | "default-camera-mode" | "enable-audio-recording" | "enable-video-recording" | "max-video-recording-duration" | "cloud-image-editor-mask-href" | "secureexpire" | "croppreset" | "maxlocalfilesizebytes" | "multiplemin" | "multiplemax" | "confirmupload" | "imgonly" | "externalsourcespreferredtypes" | "externalsourcesembedcss" | "cameramirror" | "cameracapture" | "sourcelist" | "thumbsize" | "showemptylist" | "uselocalimageeditor" | "usecloudimageeditor" | "cloudimageeditortabs" | "removecopyright" | "imageshrink" | "modalscrolllock" | "modalbackdropstrokes" | "sourcelistwrap" | "remotetabsessionkey" | "cdncname" | "baseurl" | "socialbaseurl" | "securesignature" | "securedeliveryproxy" | "retrythrottledrequestmaxtimes" | "multipartminfilesize" | "multipartchunksize" | "maxconcurrentrequests" | "multipartmaxconcurrentrequests" | "multipartmaxattempts" | "checkforurlduplicates" | "saveurlforrecurrentuploads" | "groupoutput" | "useragentintegration" | "localename" | "secureuploadsexpirethreshold" | "defaultcameramode" | "enableaudiorecording" | "enablevideorecording" | "maxvideorecordingduration" | "cloudimageeditormaskhref", string>;
67
+ declare const attrStateMapping: Record<"accept" | "pubkey" | "multiple" | "store" | "debug" | "crop-preset" | "secure-expire" | "max-local-file-size-bytes" | "multiple-min" | "multiple-max" | "confirm-upload" | "img-only" | "external-sources-preferred-types" | "external-sources-embed-css" | "camera-mirror" | "camera-capture" | "source-list" | "thumb-size" | "show-empty-list" | "use-local-image-editor" | "use-cloud-image-editor" | "cloud-image-editor-tabs" | "remove-copyright" | "image-shrink" | "modal-scroll-lock" | "modal-backdrop-strokes" | "source-list-wrap" | "remote-tab-session-key" | "cdn-cname" | "base-url" | "social-base-url" | "secure-signature" | "secure-delivery-proxy" | "retry-throttled-request-max-times" | "multipart-min-file-size" | "multipart-chunk-size" | "max-concurrent-requests" | "multipart-max-concurrent-requests" | "multipart-max-attempts" | "check-for-url-duplicates" | "save-url-for-recurrent-uploads" | "group-output" | "user-agent-integration" | "locale-name" | "secure-uploads-expire-threshold" | "camera-modes" | "default-camera-mode" | "enable-audio-recording" | "enable-video-recording" | "max-video-recording-duration" | "secureexpire" | "croppreset" | "maxlocalfilesizebytes" | "multiplemin" | "multiplemax" | "confirmupload" | "imgonly" | "externalsourcespreferredtypes" | "externalsourcesembedcss" | "cameramirror" | "cameracapture" | "sourcelist" | "thumbsize" | "showemptylist" | "uselocalimageeditor" | "usecloudimageeditor" | "cloudimageeditortabs" | "removecopyright" | "imageshrink" | "modalscrolllock" | "modalbackdropstrokes" | "sourcelistwrap" | "remotetabsessionkey" | "cdncname" | "baseurl" | "socialbaseurl" | "securesignature" | "securedeliveryproxy" | "retrythrottledrequestmaxtimes" | "multipartminfilesize" | "multipartchunksize" | "maxconcurrentrequests" | "multipartmaxconcurrentrequests" | "multipartmaxattempts" | "checkforurlduplicates" | "saveurlforrecurrentuploads" | "groupoutput" | "useragentintegration" | "localename" | "secureuploadsexpirethreshold" | "cameramodes" | "defaultcameramode" | "enableaudiorecording" | "enablevideorecording" | "maxvideorecordingduration", string>;
68
68
  export {};
69
69
  //# sourceMappingURL=Config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["Config.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;GAaG;AACH,gCAXU;IACT,UAAc;IACd,0BAA8B;IAC9B,gCAAoC;IACpC,gCAAoC;IACpC,kBAAsB;IACtB,gBAAoB;IACpB,sBAA0B;IAC1B,qBAAyB;CACtB,CAWF;qBAiNY,OAAO,2BAA2B,EAAE,UAAU,CAAC,kBAAkB,EAAE,OAAO,aAAa,EAAE,UAAU,CAAC;AAAlH,6HAA6H;AAG7H,4BAAmF;AAvLnF;IAkBE;;;;OAIG;IACH,+BAYC;IAED;;;;OAIG;IACH,2BAQC;IAED;;;;OAIG;IACH,kBAiBC;IAED;;;OAGG;IACH,kBAIC;IAED;;;;OAIG;IACH,wCAJW,MAAM,iBACN,OAAO,aACP,OAAO,QAoBjB;IA0CD;;;;OAIG;IACH,+BAJW,MAAM,uBAAuB,UAC7B,MAAM,UACN,MAAM,QAahB;CACF;sBAvOqB,yBAAyB;AAsD/C,0CAA0C;AAC1C,moEAGG"}
1
+ {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["Config.js"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;GAaG;AACH,gCAXU;IACT,UAAc;IACd,0BAA8B;IAC9B,gCAAoC;IACpC,gCAAoC;IACpC,kBAAsB;IACtB,gBAAoB;IACpB,sBAA0B;IAC1B,sBAA0B;CACvB,CAWF;qBAyNY,OAAO,2BAA2B,EAAE,UAAU,CAAC,kBAAkB,EAAE,OAAO,aAAa,EAAE,UAAU,CAAC;AAAlH,6HAA6H;AAG7H,4BAAmF;AA/LnF;IAkBE;;;;OAIG;IACH,+BAYC;IAED;;;;OAIG;IACH,2BAQC;IAED;;;;OAIG;IACH,kBAyBC;IAED;;;OAGG;IACH,kBAIC;IAED;;;;OAIG;IACH,wCAJW,MAAM,iBACN,OAAO,aACP,OAAO,QAoBjB;IA0CD;;;;OAIG;IACH,+BAJW,MAAM,uBAAuB,UAC7B,MAAM,UACN,MAAM,QAahB;CACF;sBAjPqB,yBAAyB;AAwD/C,0CAA0C;AAC1C,smEAGG"}
@@ -4,6 +4,8 @@ import { initialConfig } from './initialConfig.js';
4
4
  import { sharedConfigKey } from '../../abstract/sharedConfigKey.js';
5
5
  import { toKebabCase } from '../../utils/toKebabCase.js';
6
6
  import { normalizeConfigValue } from './normalizeConfigValue.js';
7
+ import { runAssertions } from './assertions.js';
8
+ import { runSideEffects } from './side-effects.js';
7
9
 
8
10
  const allConfigKeys = /** @type {(keyof import('../../types').ConfigType)[]} */ ([
9
11
  // "debug" option should go first to be able to print debug messages from the very beginning
@@ -21,7 +23,7 @@ const allConfigKeys = /** @type {(keyof import('../../types').ConfigType)[]} */
21
23
  * 'iconHrefResolver',
22
24
  * 'fileValidators',
23
25
  * 'collectionValidators',
24
- * 'mediaRecorerOptions',
26
+ * 'mediaRecorderOptions',
25
27
  * ]}
26
28
  */
27
29
  export const complexConfigKeys = [
@@ -32,7 +34,7 @@ export const complexConfigKeys = [
32
34
  'iconHrefResolver',
33
35
  'fileValidators',
34
36
  'collectionValidators',
35
- 'mediaRecorerOptions',
37
+ 'mediaRecorderOptions',
36
38
  ];
37
39
 
38
40
  /** @type {(key: keyof import('../../types').ConfigType) => key is keyof import('../../types').ConfigComplexType} */
@@ -136,6 +138,14 @@ class ConfigClass extends Block {
136
138
  this._flushValueToState(key, normalizedValue);
137
139
 
138
140
  this.debugPrint(`[uc-config] "${key}"`, normalizedValue);
141
+
142
+ runAssertions(this.cfg);
143
+ runSideEffects({
144
+ key,
145
+ value: normalizedValue ?? null,
146
+ setValue: this._setValue.bind(this),
147
+ getValue: this._getValue.bind(this),
148
+ });
139
149
  }
140
150
 
141
151
  /**
@@ -145,7 +155,7 @@ class ConfigClass extends Block {
145
155
  _getValue(key) {
146
156
  const anyThis = /** @type {typeof this & any} */ (this);
147
157
  const localPropName = getLocalPropName(key);
148
- return anyThis[localPropName];
158
+ return anyThis[localPropName] ?? this.$[sharedConfigKey(key)];
149
159
  }
150
160
 
151
161
  /**
@@ -0,0 +1,5 @@
1
+ /** Runs on every config change and warns about potential issues. */
2
+ export const runAssertions: ((cfg: import('../../types').ConfigType) => void) & {
3
+ cancel: () => void;
4
+ };
5
+ //# sourceMappingURL=assertions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertions.d.ts","sourceRoot":"","sources":["assertions.js"],"names":[],"mappings":"AAyBA,oEAAoE;AACpE,mCACc,OAAO,aAAa,EAAE,UAAU;;EAS5C"}
@@ -0,0 +1,37 @@
1
+ import { warnOnce } from '../../utils/warnOnce.js';
2
+ import { debounce } from '../utils/debounce.js';
3
+
4
+ const ASSERTIONS = [
5
+ {
6
+ test: (cfg) => cfg.accept && !!cfg.imgOnly,
7
+ message:
8
+ 'There could be a mistake.\n' +
9
+ 'Both `accept` and `imgOnly` parameters are set.\n' +
10
+ 'The value of `accept` will be concatenated with the internal image mime types list.',
11
+ },
12
+ {
13
+ test: (cfg) => cfg.enableVideoRecording !== null,
14
+ message:
15
+ 'The `enableVideoRecording` parameter is deprecated and will be removed in the next major release.\n' +
16
+ 'Please use the `cameraModes` parameter instead.',
17
+ },
18
+ {
19
+ test: (cfg) => cfg.defaultCameraMode !== null,
20
+ message:
21
+ 'The `defaultCameraMode` parameter is deprecated and will be removed in the next major release.\n' +
22
+ 'Please use the `cameraModes` parameter instead.',
23
+ },
24
+ ];
25
+
26
+ /** Runs on every config change and warns about potential issues. */
27
+ export const runAssertions = debounce(
28
+ /** @param {import('../../types').ConfigType} cfg */
29
+ (cfg) => {
30
+ for (const { test, message } of ASSERTIONS) {
31
+ if (test(cfg)) {
32
+ warnOnce(message);
33
+ }
34
+ }
35
+ },
36
+ 0,
37
+ );
@@ -1 +1 @@
1
- {"version":3,"file":"initialConfig.d.ts","sourceRoot":"","sources":["initialConfig.js"],"names":[],"mappings":"AAKA,uDAAwD;AACxD,+DAAgE;AAChE,sEAAuE;AAEvE,wDAAwD;AACxD,4BADW,OAAO,sBAAsB,EAAE,UAAU,CAoElD"}
1
+ {"version":3,"file":"initialConfig.d.ts","sourceRoot":"","sources":["initialConfig.js"],"names":[],"mappings":"AAKA,uDAAwD;AACxD,+DAAgE;AAChE,sEAAuE;AAEvE,wDAAwD;AACxD,4BADW,OAAO,sBAAsB,EAAE,UAAU,CAmElD"}
@@ -68,11 +68,10 @@ export const initialConfig = {
68
68
  fileValidators: [],
69
69
  collectionValidators: [],
70
70
 
71
- defaultCameraMode: 'photo',
71
+ cameraModes: 'photo, video',
72
+ defaultCameraMode: null,
72
73
  enableAudioRecording: true,
73
- enableVideoRecording: true,
74
+ enableVideoRecording: null,
74
75
  maxVideoRecordingDuration: null,
75
- mediaRecorerOptions: null,
76
-
77
- cloudImageEditorMaskHref: null,
76
+ mediaRecorderOptions: null,
78
77
  };
@@ -1 +1 @@
1
- {"version":3,"file":"normalizeConfigValue.d.ts","sourceRoot":"","sources":["normalizeConfigValue.js"],"names":[],"mappings":"AAeO,iCADK,OAAO,WAWlB;AA8JM,sGAHI,OAAO,mDAcjB"}
1
+ {"version":3,"file":"normalizeConfigValue.d.ts","sourceRoot":"","sources":["normalizeConfigValue.js"],"names":[],"mappings":"AAiBO,iCADK,OAAO,WAWlB;AAwKM,sGAHI,OAAO,mDAcjB"}
@@ -1,5 +1,7 @@
1
1
  // @ts-check
2
2
 
3
+ import { CameraSourceTypes } from '../CameraSource/constants.js';
4
+ import { deserializeCsv } from '../utils/comma-separated.js';
3
5
  import { initialConfig } from './initialConfig.js';
4
6
 
5
7
  /** @param {unknown} value */
@@ -31,18 +33,28 @@ const asStore = (value) => (value === 'auto' ? value : asBoolean(value));
31
33
  const asCameraCapture = (value) => {
32
34
  const strValue = asString(value);
33
35
  if (strValue !== 'user' && strValue !== 'environment' && strValue !== '') {
34
- throw new Error(`Invalid "cameraCapture" value: "${strValue}"`);
36
+ throw new Error(`Invalid value: "${strValue}"`);
35
37
  }
36
38
  return strValue;
37
39
  };
38
40
 
39
41
  /** @param {unknown} value */
40
- const asCameraTab = (value) => {
42
+ const asCameraMode = (value) => {
41
43
  const strValue = asString(value);
42
- if (strValue !== 'photo' && strValue !== 'video') {
43
- throw new Error(`Invalid "CameraTab" value: "${strValue}"`);
44
+ if (!Object.values(CameraSourceTypes).includes(strValue)) {
45
+ throw new Error(`Invalid value: "${strValue}"`);
44
46
  }
45
- return strValue;
47
+ return /** @type {import('../CameraSource/CameraSource.js').CameraMode} */ (strValue);
48
+ };
49
+
50
+ /** @param {unknown} value */
51
+ const asCameraModes = (value) => {
52
+ const str = asString(value);
53
+ const array = deserializeCsv(str);
54
+ if (array.some((item) => !Object.values(CameraSourceTypes).includes(item))) {
55
+ throw new Error(`Invalid value: "${JSON.stringify(array)}"`);
56
+ }
57
+ return str;
46
58
  };
47
59
 
48
60
  /** @param {unknown} value */
@@ -166,13 +178,13 @@ const mapping = {
166
178
  fileValidators: /** @type {typeof asArray<import('../../types').FileValidators>} */ (asArray),
167
179
  collectionValidators: /** @type {typeof asArray<import('../../types').CollectionValidators>} */ (asArray),
168
180
 
169
- defaultCameraMode: asCameraTab,
181
+ cameraModes: asCameraModes,
182
+ defaultCameraMode: asCameraMode,
170
183
  enableAudioRecording: asBoolean,
171
184
  enableVideoRecording: asBoolean,
172
- mediaRecorerOptions: asObject,
185
+ mediaRecorderOptions: asObject,
173
186
 
174
187
  maxVideoRecordingDuration: asNumber,
175
- cloudImageEditorMaskHref: asString,
176
188
  };
177
189
 
178
190
  /**
@@ -0,0 +1,7 @@
1
+ export function runSideEffects<T extends keyof import("../../types").ConfigType>({ key, value, setValue, getValue }: {
2
+ key: T;
3
+ value: import("../../types").ConfigType[T];
4
+ setValue: (key: T, value: import("../../types").ConfigType[T]) => void;
5
+ getValue: (key: T) => import("../../types").ConfigType[T];
6
+ }): void;
7
+ //# sourceMappingURL=side-effects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"side-effects.d.ts","sourceRoot":"","sources":["side-effects.js"],"names":[],"mappings":"AAWO;;;sEAJgE,IAAI;;SAwB1E"}
@@ -0,0 +1,32 @@
1
+ import { deserializeCsv, serializeCsv } from '../utils/comma-separated.js';
2
+
3
+ /**
4
+ * @template {keyof import('../../types').ConfigType} T
5
+ * @param {{
6
+ * key: T;
7
+ * value: import('../../types').ConfigType[T];
8
+ * setValue: (key: T, value: import('../../types').ConfigType[T]) => void;
9
+ * getValue: (key: T) => import('../../types').ConfigType[T];
10
+ * }} options
11
+ */
12
+ export const runSideEffects = ({ key, value, setValue, getValue }) => {
13
+ if (key === 'enableVideoRecording' && value !== null) {
14
+ let cameraModes = deserializeCsv(getValue('cameraModes'));
15
+ if (value && !cameraModes.includes('video')) {
16
+ cameraModes = cameraModes.concat('video');
17
+ } else if (!value) {
18
+ cameraModes = cameraModes.filter((mode) => mode !== 'video');
19
+ }
20
+ setValue('cameraModes', serializeCsv(cameraModes));
21
+ }
22
+
23
+ if (key === 'defaultCameraMode' && value !== null) {
24
+ let cameraModes = deserializeCsv(getValue('cameraModes'));
25
+ cameraModes = cameraModes.sort((a, b) => {
26
+ if (a === value) return -1;
27
+ if (b === value) return 1;
28
+ return 0;
29
+ });
30
+ setValue('cameraModes', serializeCsv(cameraModes));
31
+ }
32
+ };
@@ -1,4 +1,5 @@
1
1
  uc-upload-list {
2
+ position: relative;
2
3
  display: flex;
3
4
  flex-direction: column;
4
5
  width: 100%;
@@ -1,3 +1,3 @@
1
- export function deserealizeCsv(value: string): string[];
1
+ export function deserializeCsv(value: string): string[];
2
2
  export function serializeCsv(value: unknown[]): string;
3
3
  //# sourceMappingURL=comma-separated.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"comma-separated.d.ts","sourceRoot":"","sources":["comma-separated.js"],"names":[],"mappings":"AAGO,sCADK,MAAM,YAOjB;AAGM,oCADK,OAAO,EAAE,UAOpB"}
1
+ {"version":3,"file":"comma-separated.d.ts","sourceRoot":"","sources":["comma-separated.js"],"names":[],"mappings":"AAGO,sCADK,MAAM,YAUjB;AAGM,oCADK,OAAO,EAAE,UAOpB"}
@@ -1,12 +1,15 @@
1
1
  // @ts-check
2
2
 
3
3
  /** @param {string} value */
4
- export const deserealizeCsv = (value) => {
4
+ export const deserializeCsv = (value) => {
5
5
  if (!value) {
6
6
  return [];
7
7
  }
8
8
 
9
- return value.split(',').map((item) => item.trim());
9
+ return value
10
+ .split(',')
11
+ .map((item) => item.trim())
12
+ .filter(Boolean);
10
13
  };
11
14
 
12
15
  /** @param {unknown[]} value */
package/env.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  /** Do not edit this file manually. It's generated during build process. */
2
2
  export const PACKAGE_NAME: "blocks";
3
- export const PACKAGE_VERSION: "1.12.0";
3
+ export const PACKAGE_VERSION: "1.13.0";
4
4
  //# sourceMappingURL=env.d.ts.map
package/env.js CHANGED
@@ -1,3 +1,3 @@
1
1
  /** Do not edit this file manually. It's generated during build process. */
2
2
  export const PACKAGE_NAME = 'blocks';
3
- export const PACKAGE_VERSION = '1.12.0';
3
+ export const PACKAGE_VERSION = '1.13.0';
package/index.ssr.d.ts CHANGED
@@ -54,20 +54,6 @@ export const BtnUi: {
54
54
  };
55
55
  export const CameraSource: {
56
56
  new (): {};
57
- types: {
58
- PHOTO: string;
59
- VIDEO: string;
60
- };
61
- events: {
62
- IDLE: string;
63
- SHOT: string;
64
- PLAY: string;
65
- PAUSE: string;
66
- RESUME: string;
67
- STOP: string;
68
- RETAKE: string;
69
- ACCEPT: string;
70
- };
71
57
  template: string;
72
58
  extSrcList: {
73
59
  FACEBOOK: string;
@@ -544,7 +530,7 @@ export const Modal: {
544
530
  bindAttributes: () => void;
545
531
  };
546
532
  export const PACKAGE_NAME: "blocks";
547
- export const PACKAGE_VERSION: "1.12.0";
533
+ export const PACKAGE_VERSION: "1.13.0";
548
534
  export const PresenceToggle: {
549
535
  new (): {};
550
536
  template: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.ssr.d.ts","sourceRoot":"","sources":["index.ssr.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;EAcE;AACF;;;;;;;;;;;;;;;EAcE;AACF;;;;;EAIE;AACF;;;;;;EAKE;AACF;;;;;;;;EAYE;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqJE;AACF;;;;;;;;EAuCE;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6CE;AACF;;;;;;;;EAuCE;AACF;;;;;;;EAsGE;AACF;;;;;;;EAaE;AACF;;;;;;;EAME;AACF;;;;;;;;;;;;;;;;EAeE;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgEE;AACF;;;;;;;EAWE;AACF;;;;;;;EAWE;AACF;;;;;;;EASE;AACF;;;;;;EAKE;AACF;;;;;;;EAWE;AACF;;;;;;;EAME;AACF;;;;;;;EAWE;AACF;;;;;;;EA2IE;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwEE;;;;;;;;;;;;;AAaF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiFE;AACF;;;;;;EAKE;AACF;;;;;;EAKE;AACF;;;;;;;EAME;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6CE;AACF;;;;;;;;EAWE;AACF;;;;;;EAwBE;AACF;;;;;;;EAUE;AACF;;;;;;;;EAWE;AACF,oCAAqC;AACrC,uCAAwC;AACxC;;;;;;;EAME;AACF;;;;;;;EAME;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8CE;AACF;;;;;;;EAME;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwDE;AACF;;;;;;;EAeE;AACF;;;;;;EAKE;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoDE;AACF;;;;;;EAKE;AACF;;;;;;EAKE;AACF;;;;;;;;;;;;;;;;EAeE;AACF;;;;;;;;;;;;EAWE;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiEE;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4FE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6CE;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyEE;AACK,yCAAiC;AACjC,qCAA6B;AAC7B,6CAAqC;AACrC,oCAA4B"}
1
+ {"version":3,"file":"index.ssr.d.ts","sourceRoot":"","sources":["index.ssr.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;EAcE;AACF;;;;;;;;;;;;;;;EAcE;AACF;;;;;EAIE;AACF;;;;;;EAKE;AACF;;;;;;;;EAYE;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0IE;AACF;;;;;;;;EAuCE;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6CE;AACF;;;;;;;;EAuCE;AACF;;;;;;;EAsGE;AACF;;;;;;;EAaE;AACF;;;;;;;EAME;AACF;;;;;;;;;;;;;;;;EAeE;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgEE;AACF;;;;;;;EAWE;AACF;;;;;;;EAWE;AACF;;;;;;;EASE;AACF;;;;;;EAKE;AACF;;;;;;;EAWE;AACF;;;;;;;EAME;AACF;;;;;;;EAWE;AACF;;;;;;;EA2IE;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwEE;;;;;;;;;;;;;AAaF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiFE;AACF;;;;;;EAKE;AACF;;;;;;EAKE;AACF;;;;;;;EAME;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6CE;AACF;;;;;;;;EAWE;AACF;;;;;;EAwBE;AACF;;;;;;;EAUE;AACF;;;;;;;;EAWE;AACF,oCAAqC;AACrC,uCAAwC;AACxC;;;;;;;EAME;AACF;;;;;;;EAME;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8CE;AACF;;;;;;;EAME;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwDE;AACF;;;;;;;EAeE;AACF;;;;;;EAKE;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoDE;AACF;;;;;;EAKE;AACF;;;;;;EAKE;AACF;;;;;;;;;;;;;;;;EAeE;AACF;;;;;;;;;;;;EAWE;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiEE;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4FE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6CE;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyEE;AACK,yCAAiC;AACjC,qCAA6B;AAC7B,6CAAqC;AACrC,oCAA4B"}
package/index.ssr.js CHANGED
@@ -53,17 +53,6 @@ export const BtnUi = class {
53
53
  static bindAttributes = () => {};
54
54
  };
55
55
  export const CameraSource = class {
56
- static types = { PHOTO: "photo", VIDEO: "video" };
57
- static events = {
58
- IDLE: "idle",
59
- SHOT: "shot",
60
- PLAY: "play",
61
- PAUSE: "pause",
62
- RESUME: "resume",
63
- STOP: "stop",
64
- RETAKE: "retake",
65
- ACCEPT: "accept",
66
- };
67
56
  static template = `
68
57
  <uc-activity-header>
69
58
  <button type="button" class="uc-mini-btn" set="onclick: *historyBack" l10n="@title:back">
@@ -118,7 +107,7 @@ export const CameraSource = class {
118
107
  <button
119
108
  data-id="video"
120
109
  type="button"
121
- class="uc-switch uc-mini-btn"
110
+ class="uc-switch uc-mini-btn"
122
111
  set="onclick: onClickTab; @hidden: tabVideoHidden"
123
112
  >
124
113
  <uc-icon name="video-camera"></uc-icon>
@@ -145,8 +134,8 @@ export const CameraSource = class {
145
134
  </button>
146
135
 
147
136
  <div class="uc-select">
148
- <button class="uc-mini-btn uc-btn-microphone" set="onclick: onToggleAudio; @hidden: audioToggleMicorphoneHidden;">
149
- <uc-icon set="@name:toggleMicorphoneIcon"></uc-icon>
137
+ <button class="uc-mini-btn uc-btn-microphone" set="onclick: onToggleAudio; @hidden: audioToggleMicrophoneHidden;">
138
+ <uc-icon set="@name:toggleMicrophoneIcon"></uc-icon>
150
139
  </button>
151
140
 
152
141
  <uc-select
@@ -375,11 +364,11 @@ export const Config = class {
375
364
  "user-agent-integration",
376
365
  "locale-name",
377
366
  "secure-uploads-expire-threshold",
367
+ "camera-modes",
378
368
  "default-camera-mode",
379
369
  "enable-audio-recording",
380
370
  "enable-video-recording",
381
371
  "max-video-recording-duration",
382
- "cloud-image-editor-mask-href",
383
372
  "multiplemin",
384
373
  "multiplemax",
385
374
  "confirmupload",
@@ -420,11 +409,11 @@ export const Config = class {
420
409
  "useragentintegration",
421
410
  "localename",
422
411
  "secureuploadsexpirethreshold",
412
+ "cameramodes",
423
413
  "defaultcameramode",
424
414
  "enableaudiorecording",
425
415
  "enablevideorecording",
426
416
  "maxvideorecordingduration",
427
- "cloudimageeditormaskhref",
428
417
  ];
429
418
  static reg = () => {};
430
419
  static styleAttrs = [];
@@ -1037,7 +1026,7 @@ export const Modal = class {
1037
1026
  static bindAttributes = () => {};
1038
1027
  };
1039
1028
  export const PACKAGE_NAME = `blocks`;
1040
- export const PACKAGE_VERSION = `1.12.0`;
1029
+ export const PACKAGE_VERSION = `1.13.0`;
1041
1030
  export const PresenceToggle = class {
1042
1031
  static template = `<slot></slot> `;
1043
1032
  static reg = () => {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uploadcare/file-uploader",
3
- "version": "1.13.0-alpha.3",
3
+ "version": "1.13.0",
4
4
  "description": "Building blocks for Uploadcare products integration",
5
5
  "keywords": [
6
6
  "web components",
@@ -35,9 +35,7 @@
35
35
  "MIT"
36
36
  ],
37
37
  "type": "module",
38
- "sideEffects": [
39
- "*.css"
40
- ],
38
+ "sideEffects": ["*.css"],
41
39
  "module": "./index.js",
42
40
  "exports": {
43
41
  ".": {
@@ -142,4 +140,4 @@
142
140
  "@uploadcare/upload-client": "^6.14.1",
143
141
  "keyux": "^0.7.1"
144
142
  }
145
- }
143
+ }