@uploadcare/file-uploader 1.13.0-alpha.3 → 1.13.1-alpha.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 (127) 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/FileItem/FileItem.d.ts +4 -0
  29. package/blocks/FileItem/FileItem.d.ts.map +1 -1
  30. package/blocks/FileItem/FileItem.js +22 -2
  31. package/blocks/ProgressBar/ProgressBar.d.ts +2 -0
  32. package/blocks/ProgressBar/ProgressBar.d.ts.map +1 -1
  33. package/blocks/ProgressBar/ProgressBar.js +37 -9
  34. package/blocks/ProgressBar/progress-bar.css +35 -1
  35. package/blocks/UploadList/upload-list.css +1 -0
  36. package/blocks/utils/comma-separated.d.ts +1 -1
  37. package/blocks/utils/comma-separated.d.ts.map +1 -1
  38. package/blocks/utils/comma-separated.js +5 -2
  39. package/env.d.ts +1 -1
  40. package/env.js +1 -1
  41. package/index.ssr.d.ts +1 -15
  42. package/index.ssr.d.ts.map +1 -1
  43. package/index.ssr.js +11 -18
  44. package/locales/file-uploader/ar.d.ts +1 -0
  45. package/locales/file-uploader/ar.js +1 -0
  46. package/locales/file-uploader/az.d.ts +1 -0
  47. package/locales/file-uploader/az.js +1 -0
  48. package/locales/file-uploader/ca.d.ts +1 -0
  49. package/locales/file-uploader/ca.js +1 -0
  50. package/locales/file-uploader/cs.d.ts +1 -0
  51. package/locales/file-uploader/cs.js +1 -0
  52. package/locales/file-uploader/da.d.ts +1 -0
  53. package/locales/file-uploader/da.js +1 -0
  54. package/locales/file-uploader/de.d.ts +1 -0
  55. package/locales/file-uploader/de.js +1 -0
  56. package/locales/file-uploader/el.d.ts +1 -0
  57. package/locales/file-uploader/el.js +1 -0
  58. package/locales/file-uploader/en.d.ts +1 -0
  59. package/locales/file-uploader/en.js +2 -1
  60. package/locales/file-uploader/es.d.ts +1 -0
  61. package/locales/file-uploader/es.js +1 -0
  62. package/locales/file-uploader/et.d.ts +1 -0
  63. package/locales/file-uploader/et.js +1 -0
  64. package/locales/file-uploader/fi.d.ts +1 -0
  65. package/locales/file-uploader/fi.js +1 -0
  66. package/locales/file-uploader/fr.d.ts +1 -0
  67. package/locales/file-uploader/fr.js +1 -0
  68. package/locales/file-uploader/he.d.ts +1 -0
  69. package/locales/file-uploader/he.js +1 -0
  70. package/locales/file-uploader/hy.d.ts +1 -0
  71. package/locales/file-uploader/hy.js +1 -0
  72. package/locales/file-uploader/is.d.ts +1 -0
  73. package/locales/file-uploader/is.js +1 -0
  74. package/locales/file-uploader/it.d.ts +1 -0
  75. package/locales/file-uploader/it.js +1 -0
  76. package/locales/file-uploader/ja.d.ts +1 -0
  77. package/locales/file-uploader/ja.js +1 -0
  78. package/locales/file-uploader/ka.d.ts +1 -0
  79. package/locales/file-uploader/ka.js +1 -0
  80. package/locales/file-uploader/kk.d.ts +1 -0
  81. package/locales/file-uploader/kk.js +1 -0
  82. package/locales/file-uploader/ko.d.ts +1 -0
  83. package/locales/file-uploader/ko.js +1 -0
  84. package/locales/file-uploader/lv.d.ts +1 -0
  85. package/locales/file-uploader/lv.js +1 -0
  86. package/locales/file-uploader/nb.d.ts +1 -0
  87. package/locales/file-uploader/nb.js +1 -0
  88. package/locales/file-uploader/nl.d.ts +1 -0
  89. package/locales/file-uploader/nl.js +1 -0
  90. package/locales/file-uploader/pl.d.ts +1 -0
  91. package/locales/file-uploader/pl.js +1 -0
  92. package/locales/file-uploader/pt.d.ts +1 -0
  93. package/locales/file-uploader/pt.js +1 -0
  94. package/locales/file-uploader/ro.d.ts +1 -0
  95. package/locales/file-uploader/ro.js +1 -0
  96. package/locales/file-uploader/ru.d.ts +1 -0
  97. package/locales/file-uploader/ru.js +1 -0
  98. package/locales/file-uploader/sk.d.ts +1 -0
  99. package/locales/file-uploader/sk.js +1 -0
  100. package/locales/file-uploader/sr.d.ts +1 -0
  101. package/locales/file-uploader/sr.js +1 -0
  102. package/locales/file-uploader/sv.d.ts +1 -0
  103. package/locales/file-uploader/sv.js +1 -0
  104. package/locales/file-uploader/tr.d.ts +1 -0
  105. package/locales/file-uploader/tr.js +1 -0
  106. package/locales/file-uploader/uk.d.ts +1 -0
  107. package/locales/file-uploader/uk.js +1 -0
  108. package/locales/file-uploader/vi.d.ts +1 -0
  109. package/locales/file-uploader/vi.js +1 -0
  110. package/locales/file-uploader/zh-TW.d.ts +1 -0
  111. package/locales/file-uploader/zh-TW.js +1 -0
  112. package/locales/file-uploader/zh.d.ts +1 -0
  113. package/locales/file-uploader/zh.js +1 -0
  114. package/package.json +3 -5
  115. package/types/exported.d.ts +81 -66
  116. package/web/file-uploader.iife.min.js +4 -4
  117. package/web/file-uploader.min.js +4 -4
  118. package/web/uc-basic.min.css +1 -1
  119. package/web/uc-cloud-image-editor.min.css +1 -1
  120. package/web/uc-cloud-image-editor.min.js +4 -4
  121. package/web/uc-file-uploader-inline.min.css +1 -1
  122. package/web/uc-file-uploader-inline.min.js +4 -4
  123. package/web/uc-file-uploader-minimal.min.css +1 -1
  124. package/web/uc-file-uploader-minimal.min.js +3 -3
  125. package/web/uc-file-uploader-regular.min.css +1 -1
  126. package/web/uc-file-uploader-regular.min.js +4 -4
  127. package/web/uc-img.min.js +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"UploaderPublicApi.d.ts","sourceRoot":"","sources":["UploaderPublicApi.js"],"names":[],"mappings":"AAYA;IAOE,8DAA8D;IAC9D,iBADY,OAAO,oBAAoB,EAAE,aAAa,EAGrD;IATD;;;OAGG;IACH,aAAK;IAOL,eAAe;IACf,gCAEC;IAED,yCAEC;IAED;;iBAEC;IAED;;;;;;OAMG;IACH,sBAJW,MAAM;;;;sBAEJ,OAAO,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,CAUrD;IAEF;;;;OAIG;IACH,wBAJW,MAAM;;;;sBAEJ,OAAO,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,CAUrD;IAEF;;;;OAIG;IACH,4BAJW,MAAM;;;;sBAEJ,OAAO,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,CAgBrD;IAEF;;;;OAIG;IACH,0BAJW,IAAI;;;;;sBAEF,OAAO,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,CAcrD;IAEF,iCAAiC;IACjC,qCADY,MAAM,UAMhB;IAEF,uBAEC;IAED,sBAeE;IAEF,mDAAmD;IACnD,6BADY;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,UA0DrC;IAEF;;;;OAIG;IACH,8EAHW,MAAM,iDA8Cf;IAEF,oEAAoE;IACpE,oKAIE;IAEF,+BAA+B;IAC/B,gDAsCE;IAEF,qBAQE;IAEF;;;;;;;;;OASG;IACH,uTAFQ,IAAI,CAWV;IAEF,2DAA2D;IAC3D,0BADc,OAAO,oBAAoB,EAAE,YAAY,CAGrD;IAEF,8BAA8B;IAC9B,wBADY,OAAO,UAOjB;IAEF;;;OAGG;IACH,0BAOC;CACF"}
1
+ {"version":3,"file":"UploaderPublicApi.d.ts","sourceRoot":"","sources":["UploaderPublicApi.js"],"names":[],"mappings":"AAaA;IAOE,8DAA8D;IAC9D,iBADY,OAAO,oBAAoB,EAAE,aAAa,EAGrD;IATD;;;OAGG;IACH,aAAK;IAOL,eAAe;IACf,gCAEC;IAED,yCAEC;IAED;;iBAEC;IAED;;;;;;OAMG;IACH,sBAJW,MAAM;;;;sBAEJ,OAAO,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,CAUrD;IAEF;;;;OAIG;IACH,wBAJW,MAAM;;;;sBAEJ,OAAO,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,CAUrD;IAEF;;;;OAIG;IACH,4BAJW,MAAM;;;;sBAEJ,OAAO,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,CAgBrD;IAEF;;;;OAIG;IACH,0BAJW,IAAI;;;;;sBAEF,OAAO,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,CAcrD;IAEF,iCAAiC;IACjC,qCADY,MAAM,UAMhB;IAEF,uBAEC;IAED,sBAeE;IAEF,mDAAmD;IACnD,6BADY;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,UAkDrC;IAEF;;;;OAIG;IACH,8EAHW,MAAM,iDA8Cf;IAEF,oEAAoE;IACpE,oKAIE;IAEF,+BAA+B;IAC/B,gDAsCE;IAEF,qBAQE;IAEF;;;;;;;;;OASG;IACH,uTAFQ,IAAI,CAWV;IAEF,2DAA2D;IAC3D,0BADc,OAAO,oBAAoB,EAAE,YAAY,CAGrD;IAEF,8BAA8B;IAC9B,wBADY,OAAO,UAOjB;IAEF;;;OAGG;IACH,0BAOC;CACF"}
@@ -4,11 +4,12 @@ import { ActivityBlock } from './ActivityBlock.js';
4
4
  import { applyStyles, Data } from '@symbiotejs/symbiote';
5
5
  import { EventType } from '../blocks/UploadCtxProvider/EventEmitter.js';
6
6
  import { UploadSource } from '../blocks/utils/UploadSource.js';
7
- import { serializeCsv } from '../blocks/utils/comma-separated.js';
7
+ import { deserializeCsv, serializeCsv } from '../blocks/utils/comma-separated.js';
8
8
  import { IMAGE_ACCEPT_LIST, fileIsImage, mergeFileTypes } from '../utils/fileTypes.js';
9
9
  import { parseCdnUrl } from '../utils/parseCdnUrl.js';
10
10
  import { buildOutputCollectionState } from './buildOutputCollectionState.js';
11
11
  import { stringToArray } from '../utils/stringToArray.js';
12
+ import { CameraSourceTypes } from '../blocks/CameraSource/constants.js';
12
13
 
13
14
  export class UploaderPublicApi {
14
15
  /**
@@ -141,15 +142,6 @@ export class UploaderPublicApi {
141
142
  const accept = serializeCsv(
142
143
  mergeFileTypes([this.cfg.accept ?? '', ...(this.cfg.imgOnly ? IMAGE_ACCEPT_LIST : [])]),
143
144
  );
144
-
145
- if (this.cfg.accept && !!this.cfg.imgOnly) {
146
- console.warn(
147
- 'There could be a mistake.\n' +
148
- 'Both `accept` and `imgOnly` parameters are set.\n' +
149
- 'The value of `accept` will be concatenated with the internal image mime types list.',
150
- );
151
- }
152
-
153
145
  const INPUT_ATTR_NAME = 'uploadcare-file-input';
154
146
  const fileInput = document.createElement('input');
155
147
  fileInput.setAttribute(INPUT_ATTR_NAME, '');
@@ -163,7 +155,8 @@ export class UploaderPublicApi {
163
155
  fileInput.multiple = this.cfg.multiple;
164
156
  if (options.captureCamera) {
165
157
  fileInput.capture = this.cfg.cameraCapture;
166
- fileInput.accept = this.cfg.enableVideoRecording ? ['image/*', 'video/*'].join(',') : 'image/*';
158
+ const isVideoRecordingEnabled = deserializeCsv(this.cfg.cameraModes).includes(CameraSourceTypes.VIDEO);
159
+ fileInput.accept = ['image/*', isVideoRecordingEnabled && 'video/*'].filter(Boolean).join(',');
167
160
  } else {
168
161
  fileInput.accept = accept;
169
162
  }
@@ -1,4 +1,4 @@
1
- /** @typedef {'photo' | 'video'} CameraTabId */
1
+ /** @typedef {'photo' | 'video'} CameraMode */
2
2
  /** @typedef {'shot' | 'retake' | 'accept' | 'play' | 'stop' | 'pause' | 'resume'} CameraStatus */
3
3
  export class CameraSource extends UploaderBlock {
4
4
  activityType: "camera";
@@ -32,12 +32,12 @@ export class CameraSource extends UploaderBlock {
32
32
  audioSelectOptions: null;
33
33
  audioSelectHidden: boolean;
34
34
  audioSelectDisabled: boolean;
35
- audioToggleMicorphoneHidden: boolean;
35
+ audioToggleMicrophoneHidden: boolean;
36
36
  tabCameraHidden: boolean;
37
37
  tabVideoHidden: boolean;
38
38
  currentIcon: string;
39
39
  currentTimelineIcon: string;
40
- toggleMicorphoneIcon: string;
40
+ toggleMicrophoneIcon: string;
41
41
  /** @type {Number} */
42
42
  _startTime: number;
43
43
  /** @type {Number} */
@@ -117,10 +117,10 @@ export class CameraSource extends UploaderBlock {
117
117
  _ctx: CanvasRenderingContext2D | null | undefined;
118
118
  /**
119
119
  * @private
120
- * @param {CameraTabId} tabId
120
+ * @param {CameraMode} tabId
121
121
  */
122
122
  private _handleActiveTab;
123
- _activeTab: CameraTabId | undefined;
123
+ _activeTab: CameraMode | undefined;
124
124
  /**
125
125
  * @param {'camera' | 'video'} type
126
126
  * @param {'jpeg' | 'webm'} ext
@@ -136,6 +136,8 @@ export class CameraSource extends UploaderBlock {
136
136
  * @param {File} file
137
137
  */
138
138
  _toSend: (file: File) => void;
139
+ /** @private */
140
+ private get _cameraModes();
139
141
  /**
140
142
  * @private
141
143
  * @param {'granted' | 'denied' | 'prompt'} state
@@ -150,37 +152,25 @@ export class CameraSource extends UploaderBlock {
150
152
  _getPermission: () => void;
151
153
  _requestDeviceAccess: () => Promise<void>;
152
154
  _getDevices: () => Promise<void>;
153
- cameraDevices: {
155
+ _cameraDevices: {
154
156
  text: string;
155
157
  value: string;
156
158
  }[] | undefined;
157
- audioDevices: false | {
159
+ _audioDevices: false | {
158
160
  text: string;
159
161
  value: string;
160
162
  }[] | undefined;
161
163
  _onActivate: () => Promise<void>;
162
164
  _onDeactivate: () => Promise<void>;
165
+ /** @param {CameraMode[]} cameraModes */
166
+ _handleCameraModes: (cameraModes: CameraMode[]) => void;
163
167
  _destroy(): void;
164
168
  destroyCallback(): Promise<void>;
165
169
  }
166
170
  export namespace CameraSource {
167
- let types: Readonly<{
168
- PHOTO: "photo";
169
- VIDEO: "video";
170
- }>;
171
- let events: Readonly<{
172
- IDLE: "idle";
173
- SHOT: "shot";
174
- PLAY: "play";
175
- PAUSE: "pause";
176
- RESUME: "resume";
177
- STOP: "stop";
178
- RETAKE: "retake";
179
- ACCEPT: "accept";
180
- }>;
181
171
  let template: string;
182
172
  }
183
- export type CameraTabId = 'photo' | 'video';
173
+ export type CameraMode = 'photo' | 'video';
184
174
  export type CameraStatus = 'shot' | 'retake' | 'accept' | 'play' | 'stop' | 'pause' | 'resume';
185
175
  import { UploaderBlock } from '../../abstract/UploaderBlock.js';
186
176
  //# sourceMappingURL=CameraSource.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CameraSource.d.ts","sourceRoot":"","sources":["CameraSource.js"],"names":[],"mappings":"AAsCA,+CAA+C;AAE/C,kGAAkG;AAElG;IAEE,uBAA+C;IAE/C,eAAe;IACf,0BAAyB;IAEzB,yBAAyB;IACzB,SADW,QAAQ,EAAE,CACR;IAEb,mCAAmC;IACnC,gBADW,aAAa,GAAG,IAAI,CACT;IAEtB,iCAAiC;IACjC,SADW,WAAW,GAAG,IAAI,CACd;IAEf,4BAA4B;IAC5B,kBADW,MAAM,GAAG,IAAI,CACA;IAExB,4BAA4B;IAC5B,mBADW,MAAM,GAAG,IAAI,CACC;IAKvB;;;;;;;;;;;;;;;;;;;;;;;;QAiCE,qBAAqB;;QAErB,qBAAqB;;;;QAMrB,uBAAuB;kCAAX,KAAK;QAMjB,uBAAuB;iCAAX,KAAK;;;;QAcjB,iDAAiD;;;;;;;;QAejD,4BAA4B;wBAAhB,UAAU;;;;;;;;;;;;;;MAKvB;IAGH,oCAaE;IAEF,yBAkBE;IADA,sCAAiE;IAGnE,wBAKE;IAEF,uBAEE;IAEF,2BAOE;IAEF,0BAEE;IAEF,4BAiCE;IA9BE;;;;;kBAEC;IA8BL,eAAe;IACf,uBAWE;IAEF,2DAA2D;IAC3D,6BAQE;IAEF,+BAOE;IAEF;;;;OAIG;IACH,sBA6BE;IAEF,oBAUE;IAEF,oBAoBE;IAEF,mCAAmC;IACnC,uBADY,YAAY,UAqBtB;IAEF,mCAAmC;IACnC,uBADY,YAAY,UAuCtB;IAEF;;;OAGG;IACH,wBAmBE;IAEF,eAAe;IACf,cAoBC;IAjBC,uCAA+C;IAC/C,kDAAyC;IAkB3C;;;OAGG;IACH,yBAwBE;IADA,oCAAuB;IAGzB;;;;;OAKG;IACH,oBALW,QAAQ,GAAG,OAAO,OAClB,MAAM,GAAG,MAAM,wBAEf,IAAI,UAYb;IAEF,uCAAuC;IACvC,4BADY,SAAS,SAAS,OAmC7B;IAED;;;;OAIG;IACH,gBAFW,IAAI,UAOb;IAEF;;;OAGG;IACH,6BA8CQ;IAER,6CAQE;IAEF,yBAWE;IAFE,gCAAuB;IAI3B,8BAyCE;IAEF,qCAEE;IAEF,uCAYE;IAEF,2BAA0B;IAE1B,0CASE;IAEF,iCAsCE;IAlCE;;;oBAKK;IAEL;;;oBAOO;IAsBX,iCAIE;IAEF,mCAYE;IAgCF,iBAMC;IAED,iCAIC;CACF;;;;;;;;;;;;;;;;;;0BApwBa,OAAO,GAAG,OAAO;2BAEjB,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ;8BAtCnD,iCAAiC"}
1
+ {"version":3,"file":"CameraSource.d.ts","sourceRoot":"","sources":["CameraSource.js"],"names":[],"mappings":"AAyCA,8CAA8C;AAE9C,kGAAkG;AAElG;IAEE,uBAA+C;IAE/C,eAAe;IACf,0BAAyB;IAEzB,yBAAyB;IACzB,SADW,QAAQ,EAAE,CACR;IAEb,mCAAmC;IACnC,gBADW,aAAa,GAAG,IAAI,CACT;IAEtB,iCAAiC;IACjC,SADW,WAAW,GAAG,IAAI,CACd;IAEf,4BAA4B;IAC5B,kBADW,MAAM,GAAG,IAAI,CACA;IAExB,4BAA4B;IAC5B,mBADW,MAAM,GAAG,IAAI,CACC;IAKvB;;;;;;;;;;;;;;;;;;;;;;;;QAiCE,qBAAqB;;QAErB,qBAAqB;;;;QAMrB,uBAAuB;kCAAX,KAAK;QAMjB,uBAAuB;iCAAX,KAAK;;;;QAcjB,iDAAiD;;;;;;;;QAejD,4BAA4B;wBAAhB,UAAU;;;;;;;;;;;;;;MAKvB;IAGH,oCAaE;IAEF,yBAkBE;IADA,sCAAiE;IAGnE,wBAKE;IAEF,uBAEE;IAEF,2BAOE;IAEF,0BAEE;IAEF,4BAiCE;IA9BE;;;;;kBAEC;IA8BL,eAAe;IACf,uBAWE;IAEF,2DAA2D;IAC3D,6BAQE;IAEF,+BAOE;IAEF;;;;OAIG;IACH,sBA6BE;IAEF,oBAUE;IAEF,oBAoBE;IAEF,mCAAmC;IACnC,uBADY,YAAY,UAqBtB;IAEF,mCAAmC;IACnC,uBADY,YAAY,UAwCtB;IAEF;;;OAGG;IACH,wBAmBE;IAEF,eAAe;IACf,cAoBC;IAjBC,uCAA+C;IAC/C,kDAAyC;IAkB3C;;;OAGG;IACH,yBAwBE;IADA,mCAAuB;IAGzB;;;;;OAKG;IACH,oBALW,QAAQ,GAAG,OAAO,OAClB,MAAM,GAAG,MAAM,wBAEf,IAAI,UAYb;IAEF,uCAAuC;IACvC,4BADY,SAAS,SAAS,OAmC7B;IAED;;;;OAIG;IACH,gBAFW,IAAI,UAOb;IAEF,eAAe;IACf,2BAEC;IAED;;;OAGG;IACH,6BA+CQ;IAER,6CAQE;IAEF,yBAWE;IAFE,gCAAuB;IAI3B,8BAyCE;IAEF,qCAEE;IAEF,uCAYE;IAEF,2BAA0B;IAE1B,0CASE;IAEF,iCAsCE;IAlCE;;;oBAKK;IAEL;;;oBAOO;IAsBX,iCAME;IAEF,mCAYE;IAEF,wCAAwC;IACxC,kCADY,UAAU,EAAE,UAStB;IAyBF,iBAMC;IAED,iCAIC;CACF;;;;yBAjxBa,OAAO,GAAG,OAAO;2BAEjB,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ;8BAzCnD,iCAAiC"}
@@ -1,9 +1,12 @@
1
1
  //@ts-nocheck
2
2
  import { ActivityBlock } from '../../abstract/ActivityBlock.js';
3
3
  import { UploaderBlock } from '../../abstract/UploaderBlock.js';
4
+ import { stringToArray } from '../../utils/stringToArray.js';
4
5
  import { canUsePermissionsApi } from '../utils/abilities.js';
6
+ import { deserializeCsv } from '../utils/comma-separated.js';
5
7
  import { debounce } from '../utils/debounce.js';
6
8
  import { UploadSource } from '../utils/UploadSource.js';
9
+ import { CameraSourceEvents, CameraSourceTypes } from './constants.js';
7
10
 
8
11
  const DEFAULT_VIDEO_CONFIG = {
9
12
  width: {
@@ -36,7 +39,7 @@ function formatTime(time) {
36
39
  const DEFAULT_PICTURE_FORMAT = 'image/jpeg';
37
40
  const DEFAULT_VIDEO_FORMAT = 'video/webm';
38
41
 
39
- /** @typedef {'photo' | 'video'} CameraTabId */
42
+ /** @typedef {'photo' | 'video'} CameraMode */
40
43
 
41
44
  /** @typedef {'shot' | 'retake' | 'accept' | 'play' | 'stop' | 'pause' | 'resume'} CameraStatus */
42
45
 
@@ -89,14 +92,14 @@ export class CameraSource extends UploaderBlock {
89
92
  audioSelectOptions: null,
90
93
  audioSelectHidden: true,
91
94
  audioSelectDisabled: true,
92
- audioToggleMicorphoneHidden: true,
95
+ audioToggleMicrophoneHidden: true,
93
96
 
94
97
  tabCameraHidden: true,
95
98
  tabVideoHidden: true,
96
99
 
97
100
  currentIcon: 'camera-full',
98
101
  currentTimelineIcon: 'play',
99
- toggleMicorphoneIcon: 'microphone',
102
+ toggleMicrophoneIcon: 'microphone',
100
103
 
101
104
  /** @type {Number} */
102
105
  _startTime: 0,
@@ -144,17 +147,17 @@ export class CameraSource extends UploaderBlock {
144
147
  /** @param {MouseEvent} e */
145
148
  onClickTab: (e) => {
146
149
  const id = /** @type {HTMLElement} */ (e.currentTarget).getAttribute('data-id');
147
- if (id) this._handleActiveTab(/** @type {CameraTabId} */ (id));
150
+ if (id) this._handleActiveTab(/** @type {CameraMode} */ (id));
148
151
  },
149
152
  };
150
153
  }
151
154
 
152
155
  _chooseActionWithCamera = () => {
153
- if (this._activeTab === CameraSource.types.PHOTO) {
156
+ if (this._activeTab === CameraSourceTypes.PHOTO) {
154
157
  this._shot();
155
158
  }
156
159
 
157
- if (this._activeTab === CameraSource.types.VIDEO) {
160
+ if (this._activeTab === CameraSourceTypes.VIDEO) {
158
161
  if (this._mediaRecorder?.state === 'recording') {
159
162
  this._stopRecording();
160
163
  return;
@@ -212,10 +215,10 @@ export class CameraSource extends UploaderBlock {
212
215
  try {
213
216
  this._chunks = [];
214
217
  this._options = {
215
- ...this.cfg.mediaRecorerOptions,
218
+ ...this.cfg.mediaRecorderOptions,
216
219
  };
217
220
 
218
- const { mimeType } = this.cfg.mediaRecorerOptions || {};
221
+ const { mimeType } = this.cfg.mediaRecorderOptions || {};
219
222
 
220
223
  if (mimeType && MediaRecorder.isTypeSupported(mimeType)) {
221
224
  this._options.mimeType = mimeType;
@@ -236,7 +239,7 @@ export class CameraSource extends UploaderBlock {
236
239
  this._startTimer();
237
240
 
238
241
  this.classList.add('uc-recording');
239
- this._setCameraState(CameraSource.events.PLAY);
242
+ this._setCameraState(CameraSourceEvents.PLAY);
240
243
  }
241
244
  } catch (error) {
242
245
  console.error('Failed to start recording', error);
@@ -250,7 +253,7 @@ export class CameraSource extends UploaderBlock {
250
253
 
251
254
  this._stopTimer();
252
255
 
253
- this._setCameraState(CameraSource.events.STOP);
256
+ this._setCameraState(CameraSourceEvents.STOP);
254
257
  });
255
258
 
256
259
  this._mediaRecorder?.stop();
@@ -272,7 +275,7 @@ export class CameraSource extends UploaderBlock {
272
275
  this._stream?.getAudioTracks().forEach((track) => {
273
276
  track.enabled = !track.enabled;
274
277
 
275
- this.$.toggleMicorphoneIcon = !track.enabled ? 'microphone-mute' : 'microphone';
278
+ this.$.toggleMicrophoneIcon = !track.enabled ? 'microphone-mute' : 'microphone';
276
279
  this.$.audioSelectDisabled = !track.enabled;
277
280
  });
278
281
  };
@@ -314,10 +317,10 @@ export class CameraSource extends UploaderBlock {
314
317
  };
315
318
 
316
319
  _retake = () => {
317
- this._setCameraState(CameraSource.events.RETAKE);
320
+ this._setCameraState(CameraSourceEvents.RETAKE);
318
321
 
319
322
  /** Reset video */
320
- if (this._activeTab === CameraSource.types.VIDEO) {
323
+ if (this._activeTab === CameraSourceTypes.VIDEO) {
321
324
  this.$.video = this._stream;
322
325
  this.ref.video.muted = true;
323
326
  }
@@ -326,9 +329,9 @@ export class CameraSource extends UploaderBlock {
326
329
  };
327
330
 
328
331
  _accept = () => {
329
- this._setCameraState(CameraSource.events.ACCEPT);
332
+ this._setCameraState(CameraSourceEvents.ACCEPT);
330
333
 
331
- if (this._activeTab === CameraSource.types.PHOTO) {
334
+ if (this._activeTab === CameraSourceTypes.PHOTO) {
332
335
  this._canvas?.toBlob((blob) => {
333
336
  const file = this._createFile('camera', 'jpeg', DEFAULT_PICTURE_FORMAT, blob);
334
337
  this._toSend(file);
@@ -349,7 +352,7 @@ export class CameraSource extends UploaderBlock {
349
352
 
350
353
  /** @param {CameraStatus} status */
351
354
  _handlePhoto = (status) => {
352
- if (status === CameraSource.events.SHOT) {
355
+ if (status === CameraSourceEvents.SHOT) {
353
356
  this.set$({
354
357
  tabVideoHidden: true,
355
358
  cameraHidden: true,
@@ -359,20 +362,20 @@ export class CameraSource extends UploaderBlock {
359
362
  });
360
363
  }
361
364
 
362
- if (status === CameraSource.events.RETAKE || status === CameraSource.events.ACCEPT) {
365
+ if (status === CameraSourceEvents.RETAKE || status === CameraSourceEvents.ACCEPT) {
363
366
  this.set$({
364
- tabVideoHidden: !this.cfg.enableVideoRecording,
367
+ tabVideoHidden: !this._cameraModes.includes(CameraSourceTypes.VIDEO),
368
+ tabCameraHidden: !this._cameraModes.includes(CameraSourceTypes.PHOTO),
365
369
  cameraHidden: false,
366
- tabCameraHidden: false,
367
370
  cameraActionsHidden: true,
368
- cameraSelectHidden: this.cameraDevices.length <= 1,
371
+ cameraSelectHidden: this._cameraDevices.length <= 1,
369
372
  });
370
373
  }
371
374
  };
372
375
 
373
376
  /** @param {CameraStatus} status */
374
377
  _handleVideo = (status) => {
375
- if (status === CameraSource.events.PLAY) {
378
+ if (status === CameraSourceEvents.PLAY) {
376
379
  this.set$({
377
380
  timerHidden: false,
378
381
  tabCameraHidden: true,
@@ -386,27 +389,28 @@ export class CameraSource extends UploaderBlock {
386
389
  });
387
390
  }
388
391
 
389
- if (status === CameraSource.events.STOP) {
392
+ if (status === CameraSourceEvents.STOP) {
390
393
  this.set$({
391
394
  timerHidden: false,
392
395
  cameraHidden: true,
393
- audioToggleMicorphoneHidden: true,
396
+ audioToggleMicrophoneHidden: true,
394
397
  cameraActionsHidden: false,
395
398
  });
396
399
  }
397
400
 
398
- if (status === CameraSource.events.RETAKE || status === CameraSource.events.ACCEPT) {
401
+ if (status === CameraSourceEvents.RETAKE || status === CameraSourceEvents.ACCEPT) {
399
402
  this.set$({
400
403
  timerHidden: true,
401
- tabCameraHidden: false,
404
+ tabVideoHidden: !this._cameraModes.includes(CameraSourceTypes.VIDEO),
405
+ tabCameraHidden: !this._cameraModes.includes(CameraSourceTypes.PHOTO),
402
406
  cameraHidden: false,
403
407
  cameraActionsHidden: true,
404
- audioToggleMicorphoneHidden: !this.cfg.enableAudioRecording,
408
+ audioToggleMicrophoneHidden: !this.cfg.enableAudioRecording,
405
409
  currentIcon: 'video-camera-full',
406
410
  mutableClassButton: 'uc-shot-btn uc-camera-action',
407
411
 
408
- audioSelectHidden: !this.cfg.enableAudioRecording || this.audioDevices.length <= 1,
409
- cameraSelectHidden: this.cameraDevices.length <= 1,
412
+ audioSelectHidden: !this.cfg.enableAudioRecording || this._audioDevices.length <= 1,
413
+ cameraSelectHidden: this._cameraDevices.length <= 1,
410
414
  });
411
415
  }
412
416
  };
@@ -417,14 +421,14 @@ export class CameraSource extends UploaderBlock {
417
421
  */
418
422
  _setCameraState = (status) => {
419
423
  if (
420
- this._activeTab === CameraSource.types.PHOTO &&
424
+ this._activeTab === CameraSourceTypes.PHOTO &&
421
425
  (status === 'shot' || status === 'retake' || status === 'accept')
422
426
  ) {
423
427
  this._handlePhoto(status);
424
428
  }
425
429
 
426
430
  if (
427
- this._activeTab === CameraSource.types.VIDEO &&
431
+ this._activeTab === CameraSourceTypes.VIDEO &&
428
432
  (status === 'play' ||
429
433
  status === 'stop' ||
430
434
  status === 'retake' ||
@@ -461,28 +465,28 @@ export class CameraSource extends UploaderBlock {
461
465
 
462
466
  /**
463
467
  * @private
464
- * @param {CameraTabId} tabId
468
+ * @param {CameraMode} tabId
465
469
  */
466
470
  _handleActiveTab = (tabId) => {
467
471
  this.ref.switcher.querySelectorAll('button').forEach((/** @type {HTMLElement} */ btn) => {
468
472
  btn.classList.toggle('uc-active', btn.getAttribute('data-id') === tabId);
469
473
  });
470
474
 
471
- if (tabId === CameraSource.types.PHOTO) {
475
+ if (tabId === CameraSourceTypes.PHOTO) {
472
476
  this.set$({
473
477
  currentIcon: 'camera-full',
474
478
  audioSelectHidden: true,
475
- audioToggleMicorphoneHidden: true,
479
+ audioToggleMicrophoneHidden: true,
476
480
  });
477
481
  }
478
482
 
479
- if (tabId === CameraSource.types.VIDEO) {
483
+ if (tabId === CameraSourceTypes.VIDEO) {
480
484
  this.set$({
481
485
  currentTimelineIcon: 'play',
482
486
  currentIcon: 'video-camera-full',
483
487
 
484
- audioSelectHidden: !this.cfg.enableAudioRecording || this.audioDevices.length <= 1,
485
- audioToggleMicorphoneHidden: !this.cfg.enableAudioRecording,
488
+ audioSelectHidden: !this.cfg.enableAudioRecording || this._audioDevices.length <= 1,
489
+ audioToggleMicrophoneHidden: !this.cfg.enableAudioRecording,
486
490
  });
487
491
  }
488
492
 
@@ -556,6 +560,11 @@ export class CameraSource extends UploaderBlock {
556
560
  });
557
561
  };
558
562
 
563
+ /** @private */
564
+ get _cameraModes() {
565
+ return stringToArray(this.cfg.cameraModes);
566
+ }
567
+
559
568
  /**
560
569
  * @private
561
570
  * @param {'granted' | 'denied' | 'prompt'} state
@@ -563,19 +572,20 @@ export class CameraSource extends UploaderBlock {
563
572
  _setPermissionsState = debounce((state) => {
564
573
  this.classList.toggle('uc-initialized', state === 'granted');
565
574
 
566
- const visibleAudio = this._activeTab === CameraSource.types.VIDEO && this.cfg.enableAudioRecording;
567
- const currentIcon = this._activeTab === CameraSource.types.PHOTO ? 'camera-full' : 'video-camera-full';
575
+ const visibleAudio = this._activeTab === CameraSourceTypes.VIDEO && this.cfg.enableAudioRecording;
576
+ const currentIcon = this._activeTab === CameraSourceTypes.PHOTO ? 'camera-full' : 'video-camera-full';
568
577
 
569
578
  if (state === 'granted') {
570
579
  this.set$({
571
580
  videoHidden: false,
572
581
  cameraHidden: false,
573
- tabCameraHidden: false,
582
+ tabCameraHidden: !this._cameraModes.includes(CameraSourceTypes.PHOTO),
583
+ tabVideoHidden: !this._cameraModes.includes(CameraSourceTypes.VIDEO),
574
584
  messageHidden: true,
575
585
  timerHidden: true,
576
586
 
577
587
  currentIcon,
578
- audioToggleMicorphoneHidden: !visibleAudio,
588
+ audioToggleMicrophoneHidden: !visibleAudio,
579
589
  audioSelectHidden: !visibleAudio,
580
590
  });
581
591
  } else if (state === 'prompt') {
@@ -596,8 +606,8 @@ export class CameraSource extends UploaderBlock {
596
606
  videoHidden: true,
597
607
  messageHidden: false,
598
608
 
599
- tabCameraHidden: false,
600
- tabVideoHidden: !this.cfg.enableVideoRecording,
609
+ tabCameraHidden: !this._cameraModes.includes(CameraSourceTypes.PHOTO),
610
+ tabVideoHidden: !this._cameraModes.includes(CameraSourceTypes.VIDEO),
601
611
 
602
612
  cameraActionsHidden: true,
603
613
 
@@ -709,14 +719,14 @@ export class CameraSource extends UploaderBlock {
709
719
  try {
710
720
  const devices = await navigator.mediaDevices.enumerateDevices();
711
721
 
712
- this.cameraDevices = devices
722
+ this._cameraDevices = devices
713
723
  .filter((device) => device.kind === 'videoinput')
714
724
  .map((device, index) => ({
715
725
  text: device.label.trim() || `${this.l10n('caption-camera')} ${index + 1}`,
716
726
  value: device.deviceId,
717
727
  }));
718
728
 
719
- this.audioDevices =
729
+ this._audioDevices =
720
730
  this.cfg.enableAudioRecording &&
721
731
  devices
722
732
  .filter((device) => device.kind === 'audioinput')
@@ -725,21 +735,21 @@ export class CameraSource extends UploaderBlock {
725
735
  value: device.deviceId,
726
736
  }));
727
737
 
728
- if (this.cameraDevices.length > 1) {
738
+ if (this._cameraDevices.length > 1) {
729
739
  this.set$({
730
- cameraSelectOptions: this.cameraDevices,
740
+ cameraSelectOptions: this._cameraDevices,
731
741
  cameraSelectHidden: false,
732
742
  });
733
743
  }
734
- this._selectedCameraId = this.cameraDevices[0]?.value;
744
+ this._selectedCameraId = this._cameraDevices[0]?.value;
735
745
 
736
- if (this.audioDevices.length > 1) {
746
+ if (this._audioDevices.length > 1) {
737
747
  this.set$({
738
- audioSelectOptions: this.audioDevices,
748
+ audioSelectOptions: this._audioDevices,
739
749
  audioSelectHidden: false,
740
750
  });
741
751
  }
742
- this._selectedAudioId = this.audioDevices[0]?.value;
752
+ this._selectedAudioId = this._audioDevices[0]?.value;
743
753
  } catch (error) {
744
754
  console.log('Failed to get devices', error);
745
755
  }
@@ -749,6 +759,8 @@ export class CameraSource extends UploaderBlock {
749
759
  await this._permissionAccess();
750
760
  await this._requestDeviceAccess();
751
761
  await this._capture();
762
+
763
+ this._handleCameraModes(this._cameraModes);
752
764
  };
753
765
 
754
766
  _onDeactivate = async () => {
@@ -765,6 +777,17 @@ export class CameraSource extends UploaderBlock {
765
777
  this._stopCapture();
766
778
  };
767
779
 
780
+ /** @param {CameraMode[]} cameraModes */
781
+ _handleCameraModes = (cameraModes) => {
782
+ this.$.tabVideoHidden = !cameraModes.includes(CameraSourceTypes.VIDEO);
783
+ this.$.tabCameraHidden = !cameraModes.includes(CameraSourceTypes.PHOTO);
784
+
785
+ const defaultTab = cameraModes[0];
786
+ if (!this._activeTab || !cameraModes.includes(this._activeTab)) {
787
+ this._handleActiveTab(defaultTab);
788
+ }
789
+ };
790
+
768
791
  initCallback() {
769
792
  super.initCallback();
770
793
  this.registerActivity(this.activityType, {
@@ -777,21 +800,14 @@ export class CameraSource extends UploaderBlock {
777
800
  });
778
801
 
779
802
  this.subConfigValue('enableAudioRecording', (val) => {
780
- this.$.audioToggleMicorphoneHidden = !val;
803
+ this.$.audioToggleMicrophoneHidden = !val;
781
804
  this.$.audioSelectDisabled = !val;
782
805
  });
783
806
 
784
- this.subConfigValue('enableVideoRecording', (val) => {
785
- this.$.tabVideoHidden = !val;
786
- });
787
-
788
- this.subConfigValue('defaultCameraMode', (val) => {
789
- if (this.cfg.enableVideoRecording) {
790
- this._handleActiveTab(val);
791
- return;
792
- }
793
-
794
- this._handleActiveTab('photo');
807
+ this.subConfigValue('cameraModes', (val) => {
808
+ if (!this.isActivityActive) return;
809
+ const cameraModes = deserializeCsv(val);
810
+ this._handleCameraModes(cameraModes);
795
811
  });
796
812
  }
797
813
 
@@ -810,24 +826,6 @@ export class CameraSource extends UploaderBlock {
810
826
  }
811
827
  }
812
828
 
813
- CameraSource.types = Object.freeze({
814
- PHOTO: 'photo',
815
- VIDEO: 'video',
816
- });
817
-
818
- CameraSource.events = Object.freeze({
819
- IDLE: 'idle',
820
- SHOT: 'shot',
821
-
822
- PLAY: 'play',
823
- PAUSE: 'pause',
824
- RESUME: 'resume',
825
- STOP: 'stop',
826
-
827
- RETAKE: 'retake',
828
- ACCEPT: 'accept',
829
- });
830
-
831
829
  CameraSource.template = /* HTML */ `
832
830
  <uc-activity-header>
833
831
  <button type="button" class="uc-mini-btn" set="onclick: *historyBack" l10n="@title:back">
@@ -882,7 +880,7 @@ CameraSource.template = /* HTML */ `
882
880
  <button
883
881
  data-id="video"
884
882
  type="button"
885
- class="uc-switch uc-mini-btn"
883
+ class="uc-switch uc-mini-btn"
886
884
  set="onclick: onClickTab; @hidden: tabVideoHidden"
887
885
  >
888
886
  <uc-icon name="video-camera"></uc-icon>
@@ -909,8 +907,8 @@ CameraSource.template = /* HTML */ `
909
907
  </button>
910
908
 
911
909
  <div class="uc-select">
912
- <button class="uc-mini-btn uc-btn-microphone" set="onclick: onToggleAudio; @hidden: audioToggleMicorphoneHidden;">
913
- <uc-icon set="@name:toggleMicorphoneIcon"></uc-icon>
910
+ <button class="uc-mini-btn uc-btn-microphone" set="onclick: onToggleAudio; @hidden: audioToggleMicrophoneHidden;">
911
+ <uc-icon set="@name:toggleMicrophoneIcon"></uc-icon>
914
912
  </button>
915
913
 
916
914
  <uc-select
@@ -109,6 +109,7 @@ uc-camera-source .uc-controls {
109
109
 
110
110
  uc-camera-source .uc-switcher {
111
111
  display: flex;
112
+ gap: calc(var(--uc-padding) / 2);
112
113
  }
113
114
  uc-camera-source .uc-switch.uc-active {
114
115
  background-color: var(--uc-secondary);
@@ -0,0 +1,15 @@
1
+ export const CameraSourceTypes: Readonly<{
2
+ PHOTO: "photo";
3
+ VIDEO: "video";
4
+ }>;
5
+ export const CameraSourceEvents: Readonly<{
6
+ IDLE: "idle";
7
+ SHOT: "shot";
8
+ PLAY: "play";
9
+ PAUSE: "pause";
10
+ RESUME: "resume";
11
+ STOP: "stop";
12
+ RETAKE: "retake";
13
+ ACCEPT: "accept";
14
+ }>;
15
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["constants.js"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;GAWG"}
@@ -0,0 +1,17 @@
1
+ export const CameraSourceTypes = Object.freeze({
2
+ PHOTO: 'photo',
3
+ VIDEO: 'video',
4
+ });
5
+
6
+ export const CameraSourceEvents = Object.freeze({
7
+ IDLE: 'idle',
8
+ SHOT: 'shot',
9
+
10
+ PLAY: 'play',
11
+ PAUSE: 'pause',
12
+ RESUME: 'resume',
13
+ STOP: 'stop',
14
+
15
+ RETAKE: 'retake',
16
+ ACCEPT: 'accept',
17
+ });
@@ -138,13 +138,6 @@ export class CropFrame extends Block {
138
138
  } | undefined;
139
139
  /** @private */
140
140
  private _updateCursor;
141
- /**
142
- * @private
143
- * @param {String} href
144
- */
145
- private _createMask;
146
- _frameImage: SVGElement | undefined;
147
- _updateMask(): void;
148
141
  /** @private */
149
142
  private _render;
150
143
  /** @param {boolean} visible */
@@ -1 +1 @@
1
- {"version":3,"file":"CropFrame.d.ts","sourceRoot":"","sources":["CropFrame.js"],"names":[],"mappings":"AA2BA;IAII;;MAGC;IAED,eAAe;IACf,yBAAyD;IAEzD,eAAe;IACf,2BAA6D;IAE7D,eAAe;IACf,8BAAmE;IAGrE;;;OAGG;IACH,+BAaC;IAED,eAAe;IACf,wBAyCC;IAFC,sCAAyB;IACzB,2CAAuC;IAGzC;;;OAGG;IACH,wBAUC;IAED,eAAe;IACf,wBASC;IAED,eAAe;IACf,qBAgEC;IAED;;;OAGG;IACH,0BAHW,OAAO,YAAY,EAAE,WAAW,aAChC,OAAO,YAAY,EAAE,SAAS,QA4BxC;IAED,eAAe;IACf,sBAiBC;IAED,eAAe;IACf,sBA4CC;IAED,eAAe;IACf,qBAeC;IAFC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAA+B;IAC/B,qCAA+B;IAGjC;;;;OAIG;IACH,2BAiBC;IAJC;;;;;kBAA2B;IAC3B,sCAA6B;IAC7B,6CAA6C;IAC7C,2DAAoC;IAGtC;;;OAGG;IACH,0BAUC;IAED;;;OAGG;IACH,4BAmBC;IAED;;;;OAIG;IACH,qBAsBC;IAED;;;OAGG;IACH,+BAqBC;IAFC;;;;;kBAA6B;IAI/B,eAAe;IACf,sBAGC;IAED;;;OAGG;IACH,oBAoBC;IADC,oCAA4B;IAG9B,oBAeC;IAED,eAAe;IACf,gBAIC;IAED,+BAA+B;IAC/B,sBADY,OAAO,QAclB;IAmBG,mCAAsF;CAmC3F;;;;sBArjBqB,4BAA4B"}
1
+ {"version":3,"file":"CropFrame.d.ts","sourceRoot":"","sources":["CropFrame.js"],"names":[],"mappings":"AA2BA;IAII;;MAGC;IAED,eAAe;IACf,yBAAyD;IAEzD,eAAe;IACf,2BAA6D;IAE7D,eAAe;IACf,8BAAmE;IAGrE;;;OAGG;IACH,+BAaC;IAED,eAAe;IACf,wBAyCC;IAFC,sCAAyB;IACzB,2CAAuC;IAGzC;;;OAGG;IACH,wBAUC;IAED,eAAe;IACf,wBASC;IAED,eAAe;IACf,qBAgEC;IAED;;;OAGG;IACH,0BAHW,OAAO,YAAY,EAAE,WAAW,aAChC,OAAO,YAAY,EAAE,SAAS,QA4BxC;IAED,eAAe;IACf,sBAiBC;IAED,eAAe;IACf,sBA4CC;IAED,eAAe;IACf,qBAeC;IAFC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAA+B;IAC/B,qCAA+B;IAGjC;;;;OAIG;IACH,2BAiBC;IAJC;;;;;kBAA2B;IAC3B,sCAA6B;IAC7B,6CAA6C;IAC7C,2DAAoC;IAGtC;;;OAGG;IACH,0BAUC;IAED;;;OAGG;IACH,4BAmBC;IAED;;;;OAIG;IACH,qBAsBC;IAED;;;OAGG;IACH,+BAqBC;IAFC;;;;;kBAA6B;IAI/B,eAAe;IACf,sBAGC;IAED,eAAe;IACf,gBAGC;IAED,+BAA+B;IAC/B,sBADY,OAAO,QAclB;IAmBG,mCAAsF;CA6B3F;;;;sBAngBqB,4BAA4B"}