idmission-web-sdk 2.3.98 → 2.3.99

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.
@@ -1,8 +1,10 @@
1
1
  import React, { ReactNode } from 'react';
2
2
  import { SignatureData } from '../signature_capture/data';
3
3
  import SignatureCanvas from 'react-signature-canvas';
4
+ import type { MediaInfo, MediaInfoResult } from 'mediainfo.js';
4
5
  export type VideoSignatureMetadata = {
5
6
  mimeType?: string;
7
+ mediaInfo?: MediaInfoResult;
6
8
  timingData?: {
7
9
  recordingStartRequestedAt?: number;
8
10
  recordingStartedAt?: number;
@@ -31,6 +33,7 @@ export type VideoSignatureState = {
31
33
  signatureValid: boolean;
32
34
  signatureStartedAt?: number;
33
35
  signatureEndedAt?: number;
36
+ mediaInfo?: MediaInfo<'object'>;
34
37
  onSignatureVideoCaptured: OnSignatureVideoCaptured;
35
38
  };
36
39
  export declare const useVideoSignatureStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<VideoSignatureState>, "setState"> & {
@@ -47,7 +50,7 @@ export declare const useVideoSignatureStore: import("zustand").UseBoundStore<Omi
47
50
  type: string;
48
51
  }) | undefined): void;
49
52
  }>;
50
- export default function VideoSignatureContextProvider({ children, }: {
53
+ export default function VideoSignatureContextProvider({ children, captureMediaInfo, }: {
51
54
  children: ReactNode;
52
55
  captureMediaInfo?: boolean;
53
56
  }): React.JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"VideoSignatureContext.d.ts","sourceRoot":"","sources":["../../../src/components/video_signature_capture/VideoSignatureContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAkC,MAAM,OAAO,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,eAAe,MAAM,wBAAwB,CAAA;AAuBpD,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,UAAU,CAAC,EAAE;QACX,yBAAyB,CAAC,EAAE,MAAM,CAAA;QAClC,kBAAkB,CAAC,EAAE,MAAM,CAAA;QAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAA;QAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAA;QAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,wBAAwB,CAAC,EAAE,MAAM,CAAA;QACjC,mBAAmB,CAAC,EAAE,MAAM,CAAA;QAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAA;KAC5B,CAAA;CACF,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,CACrC,SAAS,EAAE,IAAI,EACf,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EAAE,MAAM,GAAG,IAAI,EACjC,QAAQ,EAAE,sBAAsB,KAC7B,IAAI,CAAA;AAET,MAAM,MAAM,mBAAmB,GAAG;IAChC,cAAc,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAChD,aAAa,EAAE,CACb,aAAa,CAAC,EAAE,aAAa,EAC7B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,KAC3B,IAAI,CAAA;IACT,iBAAiB,EAAE,MAAM,IAAI,CAAA;IAE7B,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAE3B,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;IAC9C,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;IAEhD,iBAAiB,EAAE,OAAO,CAAA;IAC1B,cAAc,EAAE,OAAO,CAAA;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAIzB,wBAAwB,EAAE,wBAAwB,CAAA;CACnD,CAAA;AAaD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;EAoHlC,CAAA;AAiCD,MAAM,CAAC,OAAO,UAAU,6BAA6B,CAAC,EACpD,QAAQ,GAET,EAAE;IACD,QAAQ,EAAE,SAAS,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,qBA8IA"}
1
+ {"version":3,"file":"VideoSignatureContext.d.ts","sourceRoot":"","sources":["../../../src/components/video_signature_capture/VideoSignatureContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAkC,MAAM,OAAO,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,eAAe,MAAM,wBAAwB,CAAA;AAWpD,OAAO,KAAK,EAAiB,SAAS,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAY7E,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B,UAAU,CAAC,EAAE;QACX,yBAAyB,CAAC,EAAE,MAAM,CAAA;QAClC,kBAAkB,CAAC,EAAE,MAAM,CAAA;QAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAA;QAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAA;QAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,wBAAwB,CAAC,EAAE,MAAM,CAAA;QACjC,mBAAmB,CAAC,EAAE,MAAM,CAAA;QAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAA;KAC5B,CAAA;CACF,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,CACrC,SAAS,EAAE,IAAI,EACf,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EAAE,MAAM,GAAG,IAAI,EACjC,QAAQ,EAAE,sBAAsB,KAC7B,IAAI,CAAA;AAET,MAAM,MAAM,mBAAmB,GAAG;IAChC,cAAc,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAChD,aAAa,EAAE,CACb,aAAa,CAAC,EAAE,aAAa,EAC7B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,KAC3B,IAAI,CAAA;IACT,iBAAiB,EAAE,MAAM,IAAI,CAAA;IAE7B,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAE3B,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;IAC9C,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;IAEhD,iBAAiB,EAAE,OAAO,CAAA;IAC1B,cAAc,EAAE,OAAO,CAAA;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB,SAAS,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;IAE/B,wBAAwB,EAAE,wBAAwB,CAAA;CACnD,CAAA;AAaD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;EAkHlC,CAAA;AAiCD,MAAM,CAAC,OAAO,UAAU,6BAA6B,CAAC,EACpD,QAAQ,EACR,gBAAwB,GACzB,EAAE;IACD,QAAQ,EAAE,SAAS,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,qBAqHA"}
@@ -17,6 +17,7 @@ var middleware = require('zustand/middleware');
17
17
  var shallow = require('zustand/react/shallow');
18
18
  var cn = require('clsx');
19
19
  var SignatureCanvas = require('react-signature-canvas');
20
+ var mediainfo_js = require('mediainfo.js');
20
21
  var server = require('react-dom/server');
21
22
 
22
23
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
@@ -236,7 +237,7 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
236
237
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
237
238
  };
238
239
 
239
- var webSdkVersion = '2.3.98';
240
+ var webSdkVersion = '2.3.99';
240
241
 
241
242
  function getPlatform() {
242
243
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -14326,14 +14327,23 @@ function inferBlobType(blobPart) {
14326
14327
  return t.length > 0 ? t : undefined;
14327
14328
  }
14328
14329
 
14329
- // import { mediaInfoFactory } from 'mediainfo.js'
14330
- // import type { ReadChunkFunc, MediaInfo, MediaInfoResult } from 'mediainfo.js'
14331
- // import { DEFAULT_CDN_URL } from '../common/cdn'
14332
- // import { warn } from '../../lib/utils/logger'
14333
- // function makeReadChunk(file: File | Blob): ReadChunkFunc {
14334
- // return async (chunkSize: number, offset: number) =>
14335
- // new Uint8Array(await file.slice(offset, offset + chunkSize).arrayBuffer())
14336
- // }
14330
+ function makeReadChunk(file) {
14331
+ var _this = this;
14332
+ return function (chunkSize, offset) {
14333
+ return __awaiter(_this, void 0, void 0, function () {
14334
+ var _a;
14335
+ return __generator(this, function (_b) {
14336
+ switch (_b.label) {
14337
+ case 0:
14338
+ _a = Uint8Array.bind;
14339
+ return [4 /*yield*/, file.slice(offset, offset + chunkSize).arrayBuffer()];
14340
+ case 1:
14341
+ return [2 /*return*/, new (_a.apply(Uint8Array, [void 0, _b.sent()]))()];
14342
+ }
14343
+ });
14344
+ });
14345
+ };
14346
+ }
14337
14347
  var signatureRecorder = null;
14338
14348
  var signatureChunks = [];
14339
14349
  var videoSignatureInitialState = {
@@ -14368,9 +14378,8 @@ var useVideoSignatureStore = zustand.create()(middleware.devtools(function (set,
14368
14378
  if (!camera) throw new Error('Camera not found');
14369
14379
  // set our flag and clear whatever we have recorded so far.
14370
14380
  signatureChunks = [];
14371
- var outputCanvas = get().outputCanvas;
14372
14381
  // start recording from the output canvas to capture the signature
14373
- var outputStream = (_a = outputCanvas.current) === null || _a === void 0 ? void 0 : _a.captureStream(24);
14382
+ var outputStream = (_a = get().outputCanvas.current) === null || _a === void 0 ? void 0 : _a.captureStream(24);
14374
14383
  if (!outputStream) throw new Error('outputStream not found');
14375
14384
  var tracks = [outputStream.getVideoTracks()[0]];
14376
14385
  if (captureAudio) {
@@ -14415,39 +14424,42 @@ var useVideoSignatureStore = zustand.create()(middleware.devtools(function (set,
14415
14424
  signatureRecorder.stop();
14416
14425
  signatureRecorder.onstop = function () {
14417
14426
  return __awaiter(void 0, void 0, void 0, function () {
14418
- var recordingStoppedAt, inferredType, blob, _a, onSignatureVideoCaptured, recordingStartRequestedAt, recordingStartedAt, firstChunkReceivedAt, signatureStartedAt, signatureEndedAt, recordingStopRequestedAt, lastChunkReceivedAt;
14419
- return __generator(this, function (_b) {
14420
- recordingStoppedAt = performance.now();
14421
- set({
14422
- recordingStoppedAt: recordingStoppedAt
14423
- });
14424
- inferredType = inferBlobType(signatureChunks[0]) || (signatureRecorder === null || signatureRecorder === void 0 ? void 0 : signatureRecorder.mimeType) || 'video/mp4';
14425
- blob = new Blob(signatureChunks, {
14426
- type: inferredType
14427
- });
14428
- signatureChunks = [];
14429
- signatureRecorder = null;
14430
- if (!signatureData) return [2 /*return*/];
14431
- _a = get(), onSignatureVideoCaptured = _a.onSignatureVideoCaptured, recordingStartRequestedAt = _a.recordingStartRequestedAt, recordingStartedAt = _a.recordingStartedAt, firstChunkReceivedAt = _a.firstChunkReceivedAt, signatureStartedAt = _a.signatureStartedAt, signatureEndedAt = _a.signatureEndedAt, recordingStopRequestedAt = _a.recordingStopRequestedAt, lastChunkReceivedAt = _a.lastChunkReceivedAt;
14432
- // const mediaInfo = await get().mediaInfo?.analyzeData(
14433
- // blob.size,
14434
- // makeReadChunk(blob),
14435
- // )
14436
- onSignatureVideoCaptured(blob, signatureData, imageUrl !== null && imageUrl !== void 0 ? imageUrl : null, {
14437
- // mediaInfo,
14438
- mimeType: inferredType,
14439
- timingData: {
14440
- recordingStartRequestedAt: recordingStartRequestedAt,
14441
- recordingStartedAt: recordingStartedAt,
14442
- firstChunkReceivedAt: firstChunkReceivedAt,
14443
- signatureStartedAt: signatureStartedAt,
14444
- signatureEndedAt: signatureEndedAt,
14445
- recordingStopRequestedAt: recordingStopRequestedAt,
14446
- recordingStoppedAt: recordingStoppedAt,
14447
- lastChunkReceivedAt: lastChunkReceivedAt
14448
- }
14449
- });
14450
- return [2 /*return*/];
14427
+ var recordingStoppedAt, inferredType, blob, _a, onSignatureVideoCaptured, recordingStartRequestedAt, recordingStartedAt, firstChunkReceivedAt, signatureStartedAt, signatureEndedAt, recordingStopRequestedAt, lastChunkReceivedAt, mediaInfo;
14428
+ var _b;
14429
+ return __generator(this, function (_c) {
14430
+ switch (_c.label) {
14431
+ case 0:
14432
+ recordingStoppedAt = performance.now();
14433
+ set({
14434
+ recordingStoppedAt: recordingStoppedAt
14435
+ });
14436
+ inferredType = inferBlobType(signatureChunks[0]) || (signatureRecorder === null || signatureRecorder === void 0 ? void 0 : signatureRecorder.mimeType) || 'video/mp4';
14437
+ blob = new Blob(signatureChunks, {
14438
+ type: inferredType
14439
+ });
14440
+ signatureChunks = [];
14441
+ signatureRecorder = null;
14442
+ if (!signatureData) return [2 /*return*/];
14443
+ _a = get(), onSignatureVideoCaptured = _a.onSignatureVideoCaptured, recordingStartRequestedAt = _a.recordingStartRequestedAt, recordingStartedAt = _a.recordingStartedAt, firstChunkReceivedAt = _a.firstChunkReceivedAt, signatureStartedAt = _a.signatureStartedAt, signatureEndedAt = _a.signatureEndedAt, recordingStopRequestedAt = _a.recordingStopRequestedAt, lastChunkReceivedAt = _a.lastChunkReceivedAt;
14444
+ return [4 /*yield*/, (_b = get().mediaInfo) === null || _b === void 0 ? void 0 : _b.analyzeData(blob.size, makeReadChunk(blob))];
14445
+ case 1:
14446
+ mediaInfo = _c.sent();
14447
+ onSignatureVideoCaptured(blob, signatureData, imageUrl !== null && imageUrl !== void 0 ? imageUrl : null, {
14448
+ mediaInfo: mediaInfo,
14449
+ mimeType: inferredType,
14450
+ timingData: {
14451
+ recordingStartRequestedAt: recordingStartRequestedAt,
14452
+ recordingStartedAt: recordingStartedAt,
14453
+ firstChunkReceivedAt: firstChunkReceivedAt,
14454
+ signatureStartedAt: signatureStartedAt,
14455
+ signatureEndedAt: signatureEndedAt,
14456
+ recordingStopRequestedAt: recordingStopRequestedAt,
14457
+ recordingStoppedAt: recordingStoppedAt,
14458
+ lastChunkReceivedAt: lastChunkReceivedAt
14459
+ }
14460
+ });
14461
+ return [2 /*return*/];
14462
+ }
14451
14463
  });
14452
14464
  });
14453
14465
  };
@@ -14497,7 +14509,9 @@ function waitForOneMoreChunk(timeoutMs) {
14497
14509
  function VideoSignatureContextProvider(_a) {
14498
14510
  var _this = this;
14499
14511
  var _b, _c, _d, _e;
14500
- var children = _a.children;
14512
+ var children = _a.children,
14513
+ _f = _a.captureMediaInfo,
14514
+ captureMediaInfo = _f === void 0 ? false : _f;
14501
14515
  var videoRef = useCameraStore().videoRef;
14502
14516
  var outputCanvas = React.useRef(null);
14503
14517
  React.useEffect(function () {
@@ -14507,27 +14521,31 @@ function VideoSignatureContextProvider(_a) {
14507
14521
  }, []);
14508
14522
  var signatureVideoRef = React.useRef(null);
14509
14523
  var frameCheckCanvas = React.useRef(null);
14510
- // useEffect(() => {
14511
- // if (!captureMediaInfo) return
14512
- // mediaInfoFactory({
14513
- // format: 'object',
14514
- // full: true,
14515
- // locateFile: (filename) => `${DEFAULT_CDN_URL}/${filename}`,
14516
- // })
14517
- // .then((mediaInfo) => {
14518
- // useVideoSignatureStore.setState({ mediaInfo })
14519
- // })
14520
- // .catch((e) => {
14521
- // warn('error loading mediaInfo', e)
14522
- // })
14523
- // return () => {
14524
- // const mediaInfo = useVideoSignatureStore.getState().mediaInfo
14525
- // if (mediaInfo) {
14526
- // mediaInfo.close()
14527
- // useVideoSignatureStore.setState({ mediaInfo: undefined })
14528
- // }
14529
- // }
14530
- // }, [captureMediaInfo])
14524
+ React.useEffect(function () {
14525
+ if (!captureMediaInfo) return;
14526
+ mediainfo_js.mediaInfoFactory({
14527
+ format: 'object',
14528
+ full: true,
14529
+ locateFile: function locateFile(filename) {
14530
+ return "".concat(DEFAULT_CDN_URL, "/").concat(filename);
14531
+ }
14532
+ }).then(function (mediaInfo) {
14533
+ useVideoSignatureStore.setState({
14534
+ mediaInfo: mediaInfo
14535
+ });
14536
+ })["catch"](function (e) {
14537
+ warn('error loading mediaInfo', e);
14538
+ });
14539
+ return function () {
14540
+ var mediaInfo = useVideoSignatureStore.getState().mediaInfo;
14541
+ if (mediaInfo) {
14542
+ mediaInfo.close();
14543
+ useVideoSignatureStore.setState({
14544
+ mediaInfo: undefined
14545
+ });
14546
+ }
14547
+ };
14548
+ }, [captureMediaInfo]);
14531
14549
  var signaturePadEmpty = useVideoSignatureStore().signaturePadEmpty;
14532
14550
  var blankCheckPassed = React.useRef(false);
14533
14551
  React.useEffect(function () {
@@ -14568,40 +14586,15 @@ function VideoSignatureContextProvider(_a) {
14568
14586
  });
14569
14587
  });
14570
14588
  }, [videoRef, outputCanvas]);
14571
- React.useEffect(function () {
14572
- if (!signatureVideoRef.current) return;
14573
- var video = signatureVideoRef.current;
14574
- function onFrame() {
14575
- blankCheckPassed.current || (blankCheckPassed.current = !isVideoBlank(signatureVideoRef.current, frameCheckCanvas.current));
14576
- drawOutputFrame();
14577
- video.requestVideoFrameCallback(onFrame);
14578
- }
14579
- function onPlay() {
14580
- video.requestVideoFrameCallback(onFrame);
14581
- }
14582
- video.addEventListener('play', onPlay);
14583
- return function () {
14584
- video.removeEventListener('play', onPlay);
14585
- };
14586
- }, [drawOutputFrame]);
14587
- React.useEffect(function () {
14588
- if (!videoRef.current) return;
14589
- var video = videoRef.current;
14590
- function onFrame() {
14591
- drawOutputFrame();
14592
- video.requestVideoFrameCallback(onFrame);
14593
- }
14594
- function onPlay() {
14595
- video.requestVideoFrameCallback(onFrame);
14596
- }
14597
- video.addEventListener('play', onPlay);
14598
- return function () {
14599
- video.removeEventListener('play', onPlay);
14600
- };
14601
- }, [drawOutputFrame, videoRef]);
14602
- var _f = useVideoSignatureStore(),
14603
- signaturePad = _f.signaturePad,
14604
- recordingStartedAt = _f.recordingStartedAt;
14589
+ var checkBlankAndDrawOutputFrame = React.useCallback(function () {
14590
+ blankCheckPassed.current || (blankCheckPassed.current = !isVideoBlank(signatureVideoRef.current, frameCheckCanvas.current));
14591
+ drawOutputFrame();
14592
+ }, [drawOutputFrame, signatureVideoRef]);
14593
+ useVideoFrameLoop(signatureVideoRef, checkBlankAndDrawOutputFrame);
14594
+ useVideoFrameLoop(videoRef, drawOutputFrame);
14595
+ var _g = useVideoSignatureStore(),
14596
+ signaturePad = _g.signaturePad,
14597
+ recordingStartedAt = _g.recordingStartedAt;
14605
14598
  React.useEffect(function () {
14606
14599
  var _a;
14607
14600
  if (!signaturePad.current || !recordingStartedAt) return;
@@ -14641,6 +14634,32 @@ function isCanvasBlank(canvas) {
14641
14634
  });
14642
14635
  return result;
14643
14636
  }
14637
+ function requestVideoFrameCallback(video, onFrame) {
14638
+ if (typeof (video === null || video === void 0 ? void 0 : video.requestVideoFrameCallback) === 'function') {
14639
+ video.requestVideoFrameCallback(onFrame);
14640
+ } else {
14641
+ requestAnimationFrame(onFrame);
14642
+ }
14643
+ }
14644
+ function videoFrameLoop(video, onFrame) {
14645
+ if (!video) return;
14646
+ function onFrameRecursive() {
14647
+ onFrame();
14648
+ requestVideoFrameCallback(video, onFrameRecursive);
14649
+ }
14650
+ function onPlay() {
14651
+ requestVideoFrameCallback(video, onFrameRecursive);
14652
+ }
14653
+ video.addEventListener('play', onPlay);
14654
+ return function () {
14655
+ video.removeEventListener('play', onPlay);
14656
+ };
14657
+ }
14658
+ function useVideoFrameLoop(ref, onFrame) {
14659
+ React.useEffect(function () {
14660
+ return videoFrameLoop(ref.current, onFrame);
14661
+ }, [onFrame, ref]);
14662
+ }
14644
14663
 
14645
14664
  function VideoSignaturePad(_a) {
14646
14665
  var onAcceptBtnClicked = _a.onAcceptBtnClicked,