@uploadcare/file-uploader 1.24.0 → 1.24.2

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.
package/dist/env.js CHANGED
@@ -25,7 +25,7 @@
25
25
  */
26
26
 
27
27
  // package.json
28
- var version = "1.24.0";
28
+ var version = "1.24.2";
29
29
 
30
30
  // src/env.ts
31
31
  var PACKAGE_NAME = "blocks";
package/dist/index.d.ts CHANGED
@@ -104,12 +104,13 @@ declare class ModalManager {
104
104
  destroy(): void;
105
105
  }
106
106
 
107
+ type CommonEventType = InternalEventKey | EventKey;
107
108
  type TelemetryState = TelemetryRequest & {
108
109
  eventTimestamp: number;
109
110
  };
110
111
  type TelemetryEventBody = Partial<Pick<TelemetryState, 'payload' | 'config'>> & {
111
112
  modalId?: string;
112
- eventType?: EventKey;
113
+ eventType?: CommonEventType;
113
114
  };
114
115
  declare class TelemetryManager {
115
116
  private readonly _sessionId;
@@ -181,9 +182,13 @@ declare class Block extends BaseComponent<any> {
181
182
  static reg(name?: string): void;
182
183
  }
183
184
 
184
- declare const EventType: Readonly<{
185
+ declare const InternalEventType: Readonly<{
185
186
  readonly INIT_SOLUTION: "init-solution";
186
187
  readonly CHANGE_CONFIG: "change-config";
188
+ readonly ACTION_EVENT: "action-event";
189
+ readonly ERROR_EVENT: "error-event";
190
+ }>;
191
+ declare const EventType: Readonly<{
187
192
  readonly FILE_ADDED: "file-added";
188
193
  readonly FILE_REMOVED: "file-removed";
189
194
  readonly FILE_UPLOAD_START: "file-upload-start";
@@ -204,6 +209,7 @@ declare const EventType: Readonly<{
204
209
  readonly GROUP_CREATED: "group-created";
205
210
  }>;
206
211
  type EventKey = (typeof EventType)[keyof typeof EventType];
212
+ type InternalEventKey = (typeof InternalEventType)[keyof typeof InternalEventType];
207
213
  type EventPayload = {
208
214
  [EventType.FILE_ADDED]: OutputFileEntry<'idle'>;
209
215
  [EventType.FILE_REMOVED]: OutputFileEntry<'removed'>;
@@ -230,8 +236,6 @@ type EventPayload = {
230
236
  [EventType.COMMON_UPLOAD_FAILED]: OutputCollectionState<'failed'>;
231
237
  [EventType.CHANGE]: OutputCollectionState;
232
238
  [EventType.GROUP_CREATED]: OutputCollectionState<'success', 'has-group'>;
233
- [EventType.INIT_SOLUTION]: void;
234
- [EventType.CHANGE_CONFIG]: void;
235
239
  };
236
240
  declare class EventEmitter {
237
241
  private _timeoutStore;
@@ -527,6 +531,7 @@ declare class Config extends Block {
527
531
  _assertSameValueDifferentReference(key: string, previousValue: unknown, nextValue: unknown): void;
528
532
  initCallback(): void;
529
533
  attributeChangedCallback(name: keyof typeof attrStateMapping, oldVal: string, newVal: string): void;
534
+ get computationControllers(): any;
530
535
  }
531
536
  interface Config extends ConfigType {
532
537
  }
@@ -1959,8 +1964,6 @@ type EventListenerMap = {
1959
1964
  declare class UploadCtxProvider extends UploaderBlock {
1960
1965
  static styleAttrs: string[];
1961
1966
  static EventType: Readonly<{
1962
- readonly INIT_SOLUTION: "init-solution";
1963
- readonly CHANGE_CONFIG: "change-config";
1964
1967
  readonly FILE_ADDED: "file-added";
1965
1968
  readonly FILE_REMOVED: "file-removed";
1966
1969
  readonly FILE_UPLOAD_START: "file-upload-start";
package/dist/index.js CHANGED
@@ -31,7 +31,9 @@ import { BaseComponent as BaseComponent4, Data as Data8, UID as UID4 } from "@sy
31
31
  var DEFAULT_DEBOUNCE_TIMEOUT = 20;
32
32
  var InternalEventType = Object.freeze({
33
33
  INIT_SOLUTION: "init-solution",
34
- CHANGE_CONFIG: "change-config"
34
+ CHANGE_CONFIG: "change-config",
35
+ ACTION_EVENT: "action-event",
36
+ ERROR_EVENT: "error-event"
35
37
  });
36
38
  var EventType = Object.freeze({
37
39
  FILE_ADDED: "file-added",
@@ -51,8 +53,7 @@ var EventType = Object.freeze({
51
53
  COMMON_UPLOAD_SUCCESS: "common-upload-success",
52
54
  COMMON_UPLOAD_FAILED: "common-upload-failed",
53
55
  CHANGE: "change",
54
- GROUP_CREATED: "group-created",
55
- ...InternalEventType
56
+ GROUP_CREATED: "group-created"
56
57
  });
57
58
  var EventEmitter = class {
58
59
  _timeoutStore = /* @__PURE__ */ new Map();
@@ -1216,7 +1217,7 @@ import { TelemetryAPIService } from "@uploadcare/quality-insights";
1216
1217
  import { Queue as Queue2 } from "@uploadcare/upload-client";
1217
1218
 
1218
1219
  // package.json
1219
- var version = "1.24.0";
1220
+ var version = "1.24.2";
1220
1221
 
1221
1222
  // src/env.ts
1222
1223
  var PACKAGE_NAME = "blocks";
@@ -1238,14 +1239,16 @@ var TelemetryManager = class {
1238
1239
  for (const key of Object.keys(this._config)) {
1239
1240
  this._block.subConfigValue(key, (value) => {
1240
1241
  if (this._initialized && this._config[key] !== value) {
1241
- this._block.emit(EventType.CHANGE_CONFIG, void 0);
1242
+ this.sendEvent({
1243
+ eventType: InternalEventType.CHANGE_CONFIG
1244
+ });
1242
1245
  }
1243
1246
  this._setConfig(key, value);
1244
1247
  });
1245
1248
  }
1246
1249
  }
1247
1250
  _init(type) {
1248
- if (type === EventType.INIT_SOLUTION && !this._initialized) {
1251
+ if (type === InternalEventType.INIT_SOLUTION && !this._initialized) {
1249
1252
  this._initialized = true;
1250
1253
  }
1251
1254
  }
@@ -1261,7 +1264,7 @@ var TelemetryManager = class {
1261
1264
  payload.activity = void 0;
1262
1265
  }
1263
1266
  const result = { ...body };
1264
- if (body.eventType === EventType.INIT_SOLUTION || body.eventType === EventType.CHANGE_CONFIG) {
1267
+ if (body.eventType === InternalEventType.INIT_SOLUTION || body.eventType === InternalEventType.CHANGE_CONFIG) {
1265
1268
  result.config = this._config;
1266
1269
  }
1267
1270
  return {
@@ -1289,9 +1292,7 @@ var TelemetryManager = class {
1289
1292
  EventType.FILE_UPLOAD_START,
1290
1293
  EventType.FILE_UPLOAD_PROGRESS,
1291
1294
  EventType.FILE_UPLOAD_SUCCESS,
1292
- EventType.FILE_UPLOAD_FAILED,
1293
- EventType.FILE_URL_CHANGED,
1294
- EventType.GROUP_CREATED
1295
+ EventType.FILE_UPLOAD_FAILED
1295
1296
  ].includes(type)) {
1296
1297
  return true;
1297
1298
  }
@@ -1319,6 +1320,7 @@ var TelemetryManager = class {
1319
1320
  }
1320
1321
  sendEventError(error, context = "unknown") {
1321
1322
  this.sendEvent({
1323
+ eventType: InternalEventType.ERROR_EVENT,
1322
1324
  payload: {
1323
1325
  metadata: {
1324
1326
  event: "error",
@@ -1333,6 +1335,7 @@ var TelemetryManager = class {
1333
1335
  */
1334
1336
  sendEventCloudImageEditor(e, tabId, options = {}) {
1335
1337
  this.sendEvent({
1338
+ eventType: InternalEventType.ACTION_EVENT,
1336
1339
  payload: {
1337
1340
  metadata: {
1338
1341
  tabId,
@@ -4369,16 +4372,64 @@ var CameraSource = class extends UploaderBlock {
4369
4372
  onCancel: () => {
4370
4373
  this.historyBack();
4371
4374
  },
4372
- onShot: () => this._shot(),
4375
+ onShot: () => {
4376
+ this.telemetryManager.sendEvent({
4377
+ eventType: InternalEventType.ACTION_EVENT,
4378
+ payload: {
4379
+ metadata: {
4380
+ event: "shot-camera",
4381
+ node: this.tagName,
4382
+ tabId: this._activeTab
4383
+ }
4384
+ }
4385
+ });
4386
+ this._shot();
4387
+ },
4373
4388
  onRequestPermissions: () => this._capture(),
4374
4389
  /** General method for photo and video capture */
4375
- onStartCamera: () => this._chooseActionWithCamera(),
4390
+ onStartCamera: () => {
4391
+ this.telemetryManager.sendEvent({
4392
+ eventType: InternalEventType.ACTION_EVENT,
4393
+ payload: {
4394
+ metadata: {
4395
+ event: "start-camera",
4396
+ node: this.tagName,
4397
+ tabId: this._activeTab
4398
+ }
4399
+ }
4400
+ });
4401
+ this._chooseActionWithCamera();
4402
+ },
4376
4403
  onStartRecording: () => this._startRecording(),
4377
4404
  onStopRecording: () => this._stopRecording(),
4378
4405
  onToggleRecording: () => this._toggleRecording(),
4379
4406
  onToggleAudio: () => this._toggleEnableAudio(),
4380
- onRetake: () => this._retake(),
4381
- onAccept: () => this._accept(),
4407
+ onRetake: () => {
4408
+ this.telemetryManager.sendEvent({
4409
+ eventType: InternalEventType.ACTION_EVENT,
4410
+ payload: {
4411
+ metadata: {
4412
+ event: "retake-camera",
4413
+ node: this.tagName,
4414
+ tabId: this._activeTab
4415
+ }
4416
+ }
4417
+ });
4418
+ this._retake();
4419
+ },
4420
+ onAccept: () => {
4421
+ this.telemetryManager.sendEvent({
4422
+ eventType: InternalEventType.ACTION_EVENT,
4423
+ payload: {
4424
+ metadata: {
4425
+ event: "accept-camera",
4426
+ node: this.tagName,
4427
+ tabId: this._activeTab
4428
+ }
4429
+ }
4430
+ });
4431
+ this._accept();
4432
+ },
4382
4433
  onClickTab: (event) => {
4383
4434
  const target = event.currentTarget;
4384
4435
  const id = target?.getAttribute("data-id");
@@ -4490,6 +4541,16 @@ var CameraSource = class extends UploaderBlock {
4490
4541
  });
4491
4542
  this._mediaRecorder?.stop();
4492
4543
  this.classList.remove("uc-recording");
4544
+ this.telemetryManager.sendEvent({
4545
+ eventType: InternalEventType.ACTION_EVENT,
4546
+ payload: {
4547
+ metadata: {
4548
+ event: "stop-camera",
4549
+ node: this.tagName,
4550
+ tabId: this._activeTab
4551
+ }
4552
+ }
4553
+ });
4493
4554
  };
4494
4555
  /** This method is used to toggle recording pause/resume */
4495
4556
  _toggleRecording = () => {
@@ -4671,6 +4732,16 @@ var CameraSource = class extends UploaderBlock {
4671
4732
  audioToggleMicrophoneHidden: !this.cfg.enableAudioRecording
4672
4733
  });
4673
4734
  }
4735
+ this.telemetryManager.sendEvent({
4736
+ eventType: InternalEventType.ACTION_EVENT,
4737
+ payload: {
4738
+ metadata: {
4739
+ event: "camera-tab-switch",
4740
+ node: this.tagName,
4741
+ tabId
4742
+ }
4743
+ }
4744
+ });
4674
4745
  this._activeTab = tabId;
4675
4746
  };
4676
4747
  _createFile = (type, ext, format, blob) => {
@@ -8179,6 +8250,114 @@ var runAssertions = debounce((cfg) => {
8179
8250
  }
8180
8251
  }, 0);
8181
8252
 
8253
+ // src/blocks/Config/computed-properties.ts
8254
+ import { getPrefixedCdnBaseAsync, isPrefixedCdnBase } from "@uploadcare/cname-prefix/async";
8255
+
8256
+ // src/utils/isPromiseLike.ts
8257
+ var isPromiseLike = (value) => {
8258
+ return value instanceof Promise || Boolean(
8259
+ value && typeof value === "object" && "then" in value && typeof value.then === "function"
8260
+ );
8261
+ };
8262
+
8263
+ // src/blocks/Config/computed-properties.ts
8264
+ var defineComputedProperty = (declaration) => declaration;
8265
+ var COMPUTED_PROPERTIES = [
8266
+ defineComputedProperty({
8267
+ key: "cameraModes",
8268
+ deps: ["enableVideoRecording"],
8269
+ fn: ({ cameraModes, enableVideoRecording }) => {
8270
+ if (enableVideoRecording === null) {
8271
+ return cameraModes;
8272
+ }
8273
+ let cameraModesCsv = deserializeCsv(cameraModes);
8274
+ if (enableVideoRecording && !cameraModesCsv.includes("video")) {
8275
+ cameraModesCsv = cameraModesCsv.concat("video");
8276
+ } else if (!enableVideoRecording) {
8277
+ cameraModesCsv = cameraModesCsv.filter((mode) => mode !== "video");
8278
+ }
8279
+ return serializeCsv(cameraModesCsv);
8280
+ }
8281
+ }),
8282
+ defineComputedProperty({
8283
+ key: "cameraModes",
8284
+ deps: ["defaultCameraMode"],
8285
+ fn: ({ cameraModes, defaultCameraMode }) => {
8286
+ if (defaultCameraMode === null) {
8287
+ return cameraModes;
8288
+ }
8289
+ let cameraModesCsv = deserializeCsv(cameraModes);
8290
+ cameraModesCsv = cameraModesCsv.sort((a, b) => {
8291
+ if (a === defaultCameraMode) return -1;
8292
+ if (b === defaultCameraMode) return 1;
8293
+ return 0;
8294
+ });
8295
+ return serializeCsv(cameraModesCsv);
8296
+ }
8297
+ }),
8298
+ defineComputedProperty({
8299
+ key: "cdnCname",
8300
+ deps: ["pubkey", "cdnCnamePrefixed"],
8301
+ fn: ({ pubkey, cdnCname, cdnCnamePrefixed }) => {
8302
+ if (pubkey && (cdnCname === DEFAULT_CDN_CNAME || isPrefixedCdnBase(cdnCname, cdnCnamePrefixed))) {
8303
+ return getPrefixedCdnBaseAsync(pubkey, cdnCnamePrefixed);
8304
+ }
8305
+ return cdnCname;
8306
+ }
8307
+ })
8308
+ ];
8309
+ var computeProperty = ({
8310
+ key,
8311
+ setValue,
8312
+ getValue,
8313
+ computationControllers
8314
+ }) => {
8315
+ for (const computed of COMPUTED_PROPERTIES) {
8316
+ if (computed.deps.includes(key)) {
8317
+ const args = {
8318
+ [computed.key]: getValue(computed.key)
8319
+ };
8320
+ for (const dep of computed.deps) {
8321
+ args[dep] = getValue(dep);
8322
+ }
8323
+ const abortController = new AbortController();
8324
+ computationControllers.get(computed.key)?.abort();
8325
+ computationControllers.set(computed.key, abortController);
8326
+ let result;
8327
+ try {
8328
+ result = computed.fn(args, {
8329
+ signal: abortController.signal
8330
+ });
8331
+ } catch (error) {
8332
+ if (computationControllers.get(computed.key) === abortController) {
8333
+ computationControllers.delete(computed.key);
8334
+ }
8335
+ console.error(`Failed to compute value for "${computed.key}"`, error);
8336
+ return;
8337
+ }
8338
+ if (isPromiseLike(result)) {
8339
+ result.then((resolvedValue) => {
8340
+ if (abortController.signal.aborted) {
8341
+ return;
8342
+ }
8343
+ setValue(computed.key, resolvedValue);
8344
+ }).catch((error) => {
8345
+ if (abortController.signal.aborted) {
8346
+ return;
8347
+ }
8348
+ console.error(`Failed to compute value for "${computed.key}"`, error);
8349
+ }).finally(() => {
8350
+ if (computationControllers.get(computed.key) === abortController) {
8351
+ computationControllers.delete(computed.key);
8352
+ }
8353
+ });
8354
+ } else {
8355
+ setValue(computed.key, result);
8356
+ }
8357
+ }
8358
+ }
8359
+ };
8360
+
8182
8361
  // src/blocks/Config/validatorsType.ts
8183
8362
  var asString = (value) => String(value);
8184
8363
  var asNumber2 = (value) => {
@@ -8338,89 +8517,6 @@ var normalizeConfigValue = (key, value) => {
8338
8517
  }
8339
8518
  };
8340
8519
 
8341
- // src/blocks/Config/side-effects.ts
8342
- import { getPrefixedCdnBaseAsync, isPrefixedCdnBase } from "@uploadcare/cname-prefix/async";
8343
-
8344
- // src/utils/isPromiseLike.ts
8345
- var isPromiseLike = (value) => {
8346
- return value instanceof Promise || Boolean(
8347
- value && typeof value === "object" && "then" in value && typeof value.then === "function"
8348
- );
8349
- };
8350
-
8351
- // src/blocks/Config/side-effects.ts
8352
- var defineComputedProperty = (declaration) => declaration;
8353
- var COMPUTED_PROPERTIES = [
8354
- defineComputedProperty({
8355
- key: "cameraModes",
8356
- deps: ["enableVideoRecording"],
8357
- fn: ({ cameraModes, enableVideoRecording }) => {
8358
- if (enableVideoRecording === null) {
8359
- return cameraModes;
8360
- }
8361
- let cameraModesCsv = deserializeCsv(cameraModes);
8362
- if (enableVideoRecording && !cameraModesCsv.includes("video")) {
8363
- cameraModesCsv = cameraModesCsv.concat("video");
8364
- } else if (!enableVideoRecording) {
8365
- cameraModesCsv = cameraModesCsv.filter((mode) => mode !== "video");
8366
- }
8367
- return serializeCsv(cameraModesCsv);
8368
- }
8369
- }),
8370
- defineComputedProperty({
8371
- key: "cameraModes",
8372
- deps: ["defaultCameraMode"],
8373
- fn: ({ cameraModes, defaultCameraMode }) => {
8374
- if (defaultCameraMode === null) {
8375
- return cameraModes;
8376
- }
8377
- let cameraModesCsv = deserializeCsv(cameraModes);
8378
- cameraModesCsv = cameraModesCsv.sort((a, b) => {
8379
- if (a === defaultCameraMode) return -1;
8380
- if (b === defaultCameraMode) return 1;
8381
- return 0;
8382
- });
8383
- return serializeCsv(cameraModesCsv);
8384
- }
8385
- }),
8386
- defineComputedProperty({
8387
- key: "cdnCname",
8388
- deps: ["pubkey", "cdnCnamePrefixed"],
8389
- fn: ({ pubkey, cdnCname, cdnCnamePrefixed }) => {
8390
- if (pubkey && (cdnCname === DEFAULT_CDN_CNAME || isPrefixedCdnBase(cdnCname, cdnCnamePrefixed))) {
8391
- return getPrefixedCdnBaseAsync(pubkey, cdnCnamePrefixed);
8392
- }
8393
- return cdnCname;
8394
- }
8395
- })
8396
- ];
8397
- var runSideEffects = ({ key, setValue, getValue }) => {
8398
- for (const computed of COMPUTED_PROPERTIES) {
8399
- if (computed.deps.includes(key)) {
8400
- const args = {
8401
- [computed.key]: getValue(computed.key)
8402
- };
8403
- for (const dep of computed.deps) {
8404
- args[dep] = getValue(dep);
8405
- }
8406
- const result = computed.fn(args);
8407
- if (isPromiseLike(result)) {
8408
- const prevValue = getValue(computed.key);
8409
- result.then((resolvedValue) => {
8410
- const currentValue = getValue(computed.key);
8411
- if (currentValue === prevValue) {
8412
- setValue(computed.key, resolvedValue);
8413
- }
8414
- }).catch((error) => {
8415
- console.error(`Failed to compute value for "${computed.key}"`, error);
8416
- });
8417
- } else {
8418
- setValue(computed.key, result);
8419
- }
8420
- }
8421
- }
8422
- };
8423
-
8424
8520
  // src/blocks/Config/Config.ts
8425
8521
  var allConfigKeys = [
8426
8522
  // "debug" option should go first to be able to print debug messages from the very beginning
@@ -8455,7 +8551,8 @@ var Config = class extends Block {
8455
8551
  ...this.init$,
8456
8552
  ...Object.fromEntries(
8457
8553
  Object.entries(initialConfig).map(([key, value]) => [sharedConfigKey(key), value])
8458
- )
8554
+ ),
8555
+ computationControllers: /* @__PURE__ */ new Map()
8459
8556
  };
8460
8557
  }
8461
8558
  _flushValueToAttribute(key, value) {
@@ -8490,11 +8587,6 @@ var Config = class extends Block {
8490
8587
  this._flushValueToState(key, normalizedValue);
8491
8588
  this.debugPrint(`[uc-config] "${key}"`, normalizedValue);
8492
8589
  runAssertions(this.cfg);
8493
- runSideEffects({
8494
- key,
8495
- setValue: this._setValue.bind(this),
8496
- getValue: this._getValue.bind(this)
8497
- });
8498
8590
  }
8499
8591
  _getValue(key) {
8500
8592
  const anyThis = this;
@@ -8540,10 +8632,15 @@ var Config = class extends Block {
8540
8632
  return this._getValue(key);
8541
8633
  }
8542
8634
  });
8543
- runSideEffects({
8544
- key,
8545
- setValue: this._setValue.bind(this),
8546
- getValue: this._getValue.bind(this)
8635
+ }
8636
+ for (const key of allConfigKeys) {
8637
+ this.sub(sharedConfigKey(key), () => {
8638
+ computeProperty({
8639
+ key,
8640
+ setValue: this._setValue.bind(this),
8641
+ getValue: this._getValue.bind(this),
8642
+ computationControllers: this.computationControllers
8643
+ });
8547
8644
  });
8548
8645
  }
8549
8646
  }
@@ -8555,6 +8652,9 @@ var Config = class extends Block {
8555
8652
  anyThis[key] = newVal;
8556
8653
  }
8557
8654
  }
8655
+ get computationControllers() {
8656
+ return this.$.computationControllers;
8657
+ }
8558
8658
  };
8559
8659
  Config.bindAttributes(attrStateMapping);
8560
8660
  for (const key of allConfigKeys) {
@@ -9112,8 +9212,10 @@ var isWhitelistedMessage = (message) => {
9112
9212
  var MessageBridge = class {
9113
9213
  _handlerMap = /* @__PURE__ */ new Map();
9114
9214
  _context;
9115
- constructor(context) {
9215
+ _getTargetOrigin;
9216
+ constructor(context, getTargetOrigin) {
9116
9217
  this._context = context;
9218
+ this._getTargetOrigin = getTargetOrigin;
9117
9219
  window.addEventListener("message", this._handleMessage);
9118
9220
  }
9119
9221
  _handleMessage = (e) => {
@@ -9139,7 +9241,8 @@ var MessageBridge = class {
9139
9241
  handlers.add(handler);
9140
9242
  }
9141
9243
  send(message) {
9142
- this._context.postMessage(message, "*");
9244
+ const targetOrigin = this._getTargetOrigin();
9245
+ this._context.postMessage(message, targetOrigin);
9143
9246
  }
9144
9247
  destroy() {
9145
9248
  window.removeEventListener("message", this._handleMessage);
@@ -9289,11 +9392,9 @@ var ExternalSource = class extends UploaderBlock {
9289
9392
  showSelectionStatus: message.isMultipleMode && message.total > 0,
9290
9393
  couldSelectAll: message.selectedCount < message.total,
9291
9394
  couldDeselectAll: message.selectedCount === message.total,
9292
- selectedList: message.selectedFiles
9395
+ selectedList: message.selectedFiles,
9396
+ showDoneBtn: message.total > 0
9293
9397
  });
9294
- if (!this.$.showDoneBtn && message.isReady) {
9295
- this.$.showDoneBtn = true;
9296
- }
9297
9398
  }
9298
9399
  handleIframeLoad() {
9299
9400
  this.applyEmbedCss(this.cfg.externalSourcesEmbedCss);
@@ -9355,7 +9456,7 @@ var ExternalSource = class extends UploaderBlock {
9355
9456
  return;
9356
9457
  }
9357
9458
  this._messageBridge?.destroy();
9358
- this._messageBridge = new MessageBridge(iframe.contentWindow);
9459
+ this._messageBridge = new MessageBridge(iframe.contentWindow, () => this.cfg.socialBaseUrl);
9359
9460
  this._messageBridge.on("selected-files-change", this.handleSelectedFilesChange.bind(this));
9360
9461
  this._messageBridge.on("toolbar-state-change", this.handleToolbarStateChange.bind(this));
9361
9462
  this.resetSelectionStatus();
@@ -9520,6 +9621,7 @@ var FileItem = class _FileItem extends FileItemConfig {
9520
9621
  ariaLabelStatusFile: "",
9521
9622
  onEdit: this._withEntry((entry) => {
9522
9623
  this.telemetryManager.sendEvent({
9624
+ eventType: InternalEventType.ACTION_EVENT,
9523
9625
  payload: {
9524
9626
  metadata: {
9525
9627
  event: "edit-file",
@@ -9535,6 +9637,7 @@ var FileItem = class _FileItem extends FileItemConfig {
9535
9637
  }),
9536
9638
  onRemove: () => {
9537
9639
  this.telemetryManager.sendEvent({
9640
+ eventType: InternalEventType.ACTION_EVENT,
9538
9641
  payload: {
9539
9642
  metadata: {
9540
9643
  event: "remove-file",
@@ -9572,6 +9675,7 @@ var FileItem = class _FileItem extends FileItemConfig {
9572
9675
  const errorText = entry.getValue("errors")?.[0]?.message;
9573
9676
  const source = entry.getValue("source");
9574
9677
  const externalUrl = entry.getValue("externalUrl");
9678
+ const isFinished = state === FileItemState.FINISHED;
9575
9679
  const isUploading = state === FileItemState.UPLOADING;
9576
9680
  const isQueuedForUploading = state === FileItemState.QUEUED_UPLOADING;
9577
9681
  const isQueuedForValidation = state === FileItemState.QUEUED_VALIDATION;
@@ -9580,7 +9684,7 @@ var FileItem = class _FileItem extends FileItemConfig {
9580
9684
  let hint = "";
9581
9685
  if (errorText) {
9582
9686
  hint = "";
9583
- } else if (externalUrl && source && Object.values(ExternalUploadSource).includes(source)) {
9687
+ } else if (!isFinished && externalUrl && source && Object.values(ExternalUploadSource).includes(source)) {
9584
9688
  hint = this.l10n("waiting-for", { source: this.l10n(`src-type-${source}`) });
9585
9689
  }
9586
9690
  this.set$({
@@ -11243,6 +11347,15 @@ var UploadList = class extends UploaderBlock {
11243
11347
  commonErrorMessage: "",
11244
11348
  hasFiles: false,
11245
11349
  onAdd: () => {
11350
+ this.telemetryManager.sendEvent({
11351
+ eventType: InternalEventType.ACTION_EVENT,
11352
+ payload: {
11353
+ metadata: {
11354
+ event: "add-more",
11355
+ node: this.tagName
11356
+ }
11357
+ }
11358
+ });
11246
11359
  this.api.initFlow(true);
11247
11360
  },
11248
11361
  onUpload: () => {
@@ -11255,6 +11368,15 @@ var UploadList = class extends UploaderBlock {
11255
11368
  this.api.doneFlow();
11256
11369
  },
11257
11370
  onCancel: () => {
11371
+ this.telemetryManager.sendEvent({
11372
+ eventType: InternalEventType.ACTION_EVENT,
11373
+ payload: {
11374
+ metadata: {
11375
+ event: "clear-all",
11376
+ node: this.tagName
11377
+ }
11378
+ }
11379
+ });
11258
11380
  this.uploadCollection.clearAll();
11259
11381
  }
11260
11382
  };
@@ -11441,6 +11563,15 @@ var UrlSource = class extends UploaderBlock {
11441
11563
  importDisabled: true,
11442
11564
  onUpload: (event) => {
11443
11565
  event.preventDefault();
11566
+ this.telemetryManager.sendEvent({
11567
+ eventType: InternalEventType.ACTION_EVENT,
11568
+ payload: {
11569
+ metadata: {
11570
+ event: "upload-from-url",
11571
+ node: this.tagName
11572
+ }
11573
+ }
11574
+ });
11444
11575
  const url = this.ref.input["value"];
11445
11576
  this.api.addFileFromUrl(url, { source: UploadSource.URL });
11446
11577
  this.modalManager?.open(ActivityBlock.activities.UPLOAD_LIST);
@@ -11510,7 +11641,9 @@ var CloudImageEditor = class extends CloudImageEditorBlock {
11510
11641
  }
11511
11642
  initCallback() {
11512
11643
  super.initCallback();
11513
- this.emit(InternalEventType.INIT_SOLUTION, void 0);
11644
+ this.telemetryManager.sendEvent({
11645
+ eventType: InternalEventType.INIT_SOLUTION
11646
+ });
11514
11647
  this.a11y?.registerBlock(this);
11515
11648
  }
11516
11649
  };
@@ -11549,7 +11682,9 @@ var FileUploaderInline = class extends SolutionBlock {
11549
11682
  }
11550
11683
  initCallback() {
11551
11684
  super.initCallback();
11552
- this.emit(InternalEventType.INIT_SOLUTION, void 0);
11685
+ this.telemetryManager.sendEvent({
11686
+ eventType: InternalEventType.INIT_SOLUTION
11687
+ });
11553
11688
  const uBlock = this.ref.uBlock;
11554
11689
  if (!uBlock) {
11555
11690
  return;
@@ -11639,7 +11774,9 @@ var FileUploaderMinimal = class extends SolutionBlock {
11639
11774
  }
11640
11775
  initCallback() {
11641
11776
  super.initCallback();
11642
- this.emit(InternalEventType.INIT_SOLUTION, void 0);
11777
+ this.telemetryManager.sendEvent({
11778
+ eventType: InternalEventType.INIT_SOLUTION
11779
+ });
11643
11780
  const uBlock = this.ref.uBlock;
11644
11781
  if (!uBlock) {
11645
11782
  return;
@@ -11749,7 +11886,9 @@ var FileUploaderRegular = class extends SolutionBlock {
11749
11886
  }
11750
11887
  initCallback() {
11751
11888
  super.initCallback();
11752
- this.emit(InternalEventType.INIT_SOLUTION, void 0);
11889
+ this.telemetryManager.sendEvent({
11890
+ eventType: InternalEventType.INIT_SOLUTION
11891
+ });
11753
11892
  this.defineAccessor("headless", (value) => {
11754
11893
  this.set$({ isHidden: asBoolean2(value) });
11755
11894
  });
package/dist/index.ssr.js CHANGED
@@ -1132,7 +1132,7 @@ export const ModalEvents = {
1132
1132
  DESTROY: "modal:destroy",
1133
1133
  };
1134
1134
  export const PACKAGE_NAME = `blocks`;
1135
- export const PACKAGE_VERSION = `1.24.0`;
1135
+ export const PACKAGE_VERSION = `1.24.2`;
1136
1136
  export const PresenceToggle = class {
1137
1137
  static template = `<slot></slot> `;
1138
1138
  static reg = () => {};
@@ -1461,8 +1461,6 @@ export const UploadCtxProvider = class {
1461
1461
  COMMON_UPLOAD_FAILED: "common-upload-failed",
1462
1462
  CHANGE: "change",
1463
1463
  GROUP_CREATED: "group-created",
1464
- INIT_SOLUTION: "init-solution",
1465
- CHANGE_CONFIG: "change-config",
1466
1464
  };
1467
1465
  static extSrcList = {
1468
1466
  FACEBOOK: "facebook",