@byomakase/omakase-player 0.0.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.
Files changed (86) hide show
  1. package/LICENSE +228 -0
  2. package/README.md +233 -0
  3. package/dist/api/api.d.ts +17 -0
  4. package/dist/api/audio-api.d.ts +24 -0
  5. package/dist/api/marker-lane-api.d.ts +33 -0
  6. package/dist/api/omakase-player-api.d.ts +38 -0
  7. package/dist/api/subtitles-api.d.ts +36 -0
  8. package/dist/api/timeline-api.d.ts +91 -0
  9. package/dist/api/video-api.d.ts +68 -0
  10. package/dist/audio/audio-controller.d.ts +32 -0
  11. package/dist/common/browser-provider.d.ts +34 -0
  12. package/dist/common/component.d.ts +56 -0
  13. package/dist/common/measurement.d.ts +41 -0
  14. package/dist/common/style-adapter.d.ts +27 -0
  15. package/dist/common/styles-provider.d.ts +33 -0
  16. package/dist/constants.d.ts +9 -0
  17. package/dist/dom/dom-controller.d.ts +53 -0
  18. package/dist/dom/fullscreen.d.ts +32 -0
  19. package/dist/events.d.ts +14 -0
  20. package/dist/http.d.ts +2 -0
  21. package/dist/images/help.svg +17 -0
  22. package/dist/images/loading.svg +29 -0
  23. package/dist/images/pause.svg +19 -0
  24. package/dist/images/play.svg +18 -0
  25. package/dist/images/replay.svg +23 -0
  26. package/dist/index.d.ts +3 -0
  27. package/dist/omakase-player.cjs.js +71 -0
  28. package/dist/omakase-player.cjs.js.map +1 -0
  29. package/dist/omakase-player.d.ts +51 -0
  30. package/dist/omakase-player.es.js +17439 -0
  31. package/dist/omakase-player.es.js.map +1 -0
  32. package/dist/omakase-player.umd.js +71 -0
  33. package/dist/omakase-player.umd.js.map +1 -0
  34. package/dist/style.css +1 -0
  35. package/dist/subtitles/subtitles-controller.d.ts +51 -0
  36. package/dist/timeline/audio-track/audio-track-lane-item.d.ts +38 -0
  37. package/dist/timeline/audio-track/audio-track-lane.d.ts +46 -0
  38. package/dist/timeline/audio-track/index.d.ts +1 -0
  39. package/dist/timeline/index.d.ts +5 -0
  40. package/dist/timeline/marker/index.d.ts +4 -0
  41. package/dist/timeline/marker/marker-handle.d.ts +55 -0
  42. package/dist/timeline/marker/marker-lane.d.ts +38 -0
  43. package/dist/timeline/marker/marker.d.ts +64 -0
  44. package/dist/timeline/marker/moment-marker.d.ts +31 -0
  45. package/dist/timeline/marker/period-marker.d.ts +43 -0
  46. package/dist/timeline/playhead-hover.d.ts +36 -0
  47. package/dist/timeline/playhead.d.ts +40 -0
  48. package/dist/timeline/scrollbar.d.ts +60 -0
  49. package/dist/timeline/scrubber-lane.d.ts +44 -0
  50. package/dist/timeline/subtitles/index.d.ts +1 -0
  51. package/dist/timeline/subtitles/subtitles-lane-item.d.ts +40 -0
  52. package/dist/timeline/subtitles/subtitles-lane.d.ts +38 -0
  53. package/dist/timeline/thumbnail/index.d.ts +1 -0
  54. package/dist/timeline/thumbnail/thumbnail-lane.d.ts +54 -0
  55. package/dist/timeline/thumbnail/thumbnail.d.ts +46 -0
  56. package/dist/timeline/timecode-display.d.ts +32 -0
  57. package/dist/timeline/timeline-lane.d.ts +70 -0
  58. package/dist/timeline/timeline.d.ts +222 -0
  59. package/dist/track/audio-vtt-file.d.ts +8 -0
  60. package/dist/track/subtitles-vtt-file.d.ts +8 -0
  61. package/dist/track/subtitles-vtt-track.d.ts +5 -0
  62. package/dist/track/thumbnail-vtt-file.d.ts +11 -0
  63. package/dist/track/track.d.ts +12 -0
  64. package/dist/track/vtt-file.d.ts +32 -0
  65. package/dist/types/common.d.ts +6 -0
  66. package/dist/types/events.d.ts +125 -0
  67. package/dist/types/index.d.ts +5 -0
  68. package/dist/types/model.d.ts +17 -0
  69. package/dist/types/track.d.ts +21 -0
  70. package/dist/types/types.d.ts +3 -0
  71. package/dist/types/vtt.d.ts +23 -0
  72. package/dist/util/animation-util.d.ts +11 -0
  73. package/dist/util/color-util.d.ts +3 -0
  74. package/dist/util/frame-util.d.ts +18 -0
  75. package/dist/util/image-util.d.ts +9 -0
  76. package/dist/util/observable-util.d.ts +2 -0
  77. package/dist/util/shape-util.d.ts +17 -0
  78. package/dist/util/time-util.d.ts +6 -0
  79. package/dist/util/window-util.d.ts +4 -0
  80. package/dist/validators.d.ts +6 -0
  81. package/dist/video/playback-state.d.ts +23 -0
  82. package/dist/video/video-controller.d.ts +139 -0
  83. package/dist/video/video-hls-controller.d.ts +15 -0
  84. package/dist/video/video.d.ts +19 -0
  85. package/package.json +56 -0
  86. package/style/omakase-player.scss +144 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omakase-player.es.js","sources":["../node_modules/konva/lib/Global.js","../node_modules/konva/lib/Util.js","../node_modules/konva/lib/Validators.js","../node_modules/konva/lib/Factory.js","../node_modules/konva/lib/Context.js","../node_modules/konva/lib/Canvas.js","../node_modules/konva/lib/DragAndDrop.js","../node_modules/konva/lib/Node.js","../node_modules/konva/lib/Container.js","../node_modules/konva/lib/PointerEvents.js","../node_modules/konva/lib/Stage.js","../node_modules/konva/lib/Shape.js","../node_modules/konva/lib/Layer.js","../node_modules/konva/lib/FastLayer.js","../node_modules/konva/lib/Group.js","../node_modules/konva/lib/Animation.js","../node_modules/konva/lib/Tween.js","../node_modules/konva/lib/_CoreInternals.js","../node_modules/konva/lib/shapes/Arc.js","../node_modules/konva/lib/shapes/Line.js","../node_modules/konva/lib/shapes/Path.js","../node_modules/konva/lib/shapes/Arrow.js","../node_modules/konva/lib/shapes/Circle.js","../node_modules/konva/lib/shapes/Ellipse.js","../node_modules/konva/lib/shapes/Image.js","../node_modules/konva/lib/shapes/Label.js","../node_modules/konva/lib/shapes/Rect.js","../node_modules/konva/lib/shapes/RegularPolygon.js","../node_modules/konva/lib/shapes/Ring.js","../node_modules/konva/lib/shapes/Sprite.js","../node_modules/konva/lib/shapes/Star.js","../node_modules/konva/lib/shapes/Text.js","../node_modules/konva/lib/shapes/TextPath.js","../node_modules/konva/lib/shapes/Transformer.js","../node_modules/konva/lib/shapes/Wedge.js","../node_modules/konva/lib/filters/Blur.js","../node_modules/konva/lib/filters/Brighten.js","../node_modules/konva/lib/filters/Contrast.js","../node_modules/konva/lib/filters/Emboss.js","../node_modules/konva/lib/filters/Enhance.js","../node_modules/konva/lib/filters/Grayscale.js","../node_modules/konva/lib/filters/HSL.js","../node_modules/konva/lib/filters/HSV.js","../node_modules/konva/lib/filters/Invert.js","../node_modules/konva/lib/filters/Kaleidoscope.js","../node_modules/konva/lib/filters/Mask.js","../node_modules/konva/lib/filters/Noise.js","../node_modules/konva/lib/filters/Pixelate.js","../node_modules/konva/lib/filters/Posterize.js","../node_modules/konva/lib/filters/RGB.js","../node_modules/konva/lib/filters/RGBA.js","../node_modules/konva/lib/filters/Sepia.js","../node_modules/konva/lib/filters/Solarize.js","../node_modules/konva/lib/filters/Threshold.js","../node_modules/konva/lib/_FullInternals.js","../node_modules/tslib/tslib.es6.js","../node_modules/rxjs/dist/esm5/internal/util/isFunction.js","../node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js","../node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js","../node_modules/rxjs/dist/esm5/internal/util/arrRemove.js","../node_modules/rxjs/dist/esm5/internal/Subscription.js","../node_modules/rxjs/dist/esm5/internal/config.js","../node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js","../node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js","../node_modules/rxjs/dist/esm5/internal/util/noop.js","../node_modules/rxjs/dist/esm5/internal/util/errorContext.js","../node_modules/rxjs/dist/esm5/internal/Subscriber.js","../node_modules/rxjs/dist/esm5/internal/symbol/observable.js","../node_modules/rxjs/dist/esm5/internal/util/identity.js","../node_modules/rxjs/dist/esm5/internal/util/pipe.js","../node_modules/rxjs/dist/esm5/internal/Observable.js","../node_modules/rxjs/dist/esm5/internal/util/lift.js","../node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js","../node_modules/rxjs/dist/esm5/internal/util/ObjectUnsubscribedError.js","../node_modules/rxjs/dist/esm5/internal/Subject.js","../node_modules/rxjs/dist/esm5/internal/BehaviorSubject.js","../node_modules/rxjs/dist/esm5/internal/scheduler/dateTimestampProvider.js","../node_modules/rxjs/dist/esm5/internal/scheduler/Action.js","../node_modules/rxjs/dist/esm5/internal/scheduler/intervalProvider.js","../node_modules/rxjs/dist/esm5/internal/scheduler/AsyncAction.js","../node_modules/rxjs/dist/esm5/internal/Scheduler.js","../node_modules/rxjs/dist/esm5/internal/scheduler/AsyncScheduler.js","../node_modules/rxjs/dist/esm5/internal/scheduler/async.js","../node_modules/rxjs/dist/esm5/internal/observable/empty.js","../node_modules/rxjs/dist/esm5/internal/util/isScheduler.js","../node_modules/rxjs/dist/esm5/internal/util/args.js","../node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js","../node_modules/rxjs/dist/esm5/internal/util/isPromise.js","../node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js","../node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js","../node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js","../node_modules/rxjs/dist/esm5/internal/symbol/iterator.js","../node_modules/rxjs/dist/esm5/internal/util/isIterable.js","../node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js","../node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js","../node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js","../node_modules/rxjs/dist/esm5/internal/operators/observeOn.js","../node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js","../node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js","../node_modules/rxjs/dist/esm5/internal/observable/from.js","../node_modules/rxjs/dist/esm5/internal/observable/of.js","../node_modules/rxjs/dist/esm5/internal/util/EmptyError.js","../node_modules/rxjs/dist/esm5/internal/util/isDate.js","../node_modules/rxjs/dist/esm5/internal/operators/map.js","../node_modules/rxjs/dist/esm5/internal/util/mapOneOrManyArgs.js","../node_modules/rxjs/dist/esm5/internal/util/argsArgArrayOrObject.js","../node_modules/rxjs/dist/esm5/internal/util/createObject.js","../node_modules/rxjs/dist/esm5/internal/observable/combineLatest.js","../node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js","../node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js","../node_modules/rxjs/dist/esm5/internal/operators/mergeAll.js","../node_modules/rxjs/dist/esm5/internal/operators/concatAll.js","../node_modules/rxjs/dist/esm5/internal/observable/concat.js","../node_modules/rxjs/dist/esm5/internal/observable/forkJoin.js","../node_modules/rxjs/dist/esm5/internal/observable/fromEvent.js","../node_modules/rxjs/dist/esm5/internal/observable/timer.js","../node_modules/rxjs/dist/esm5/internal/observable/interval.js","../node_modules/rxjs/dist/esm5/internal/operators/filter.js","../node_modules/rxjs/dist/esm5/internal/operators/catchError.js","../node_modules/rxjs/dist/esm5/internal/operators/debounceTime.js","../node_modules/rxjs/dist/esm5/internal/operators/defaultIfEmpty.js","../node_modules/rxjs/dist/esm5/internal/operators/take.js","../node_modules/rxjs/dist/esm5/internal/operators/ignoreElements.js","../node_modules/rxjs/dist/esm5/internal/operators/mapTo.js","../node_modules/rxjs/dist/esm5/internal/operators/delayWhen.js","../node_modules/rxjs/dist/esm5/internal/operators/delay.js","../node_modules/rxjs/dist/esm5/internal/operators/throwIfEmpty.js","../node_modules/rxjs/dist/esm5/internal/operators/first.js","../node_modules/rxjs/dist/esm5/internal/operators/switchMap.js","../node_modules/rxjs/dist/esm5/internal/operators/takeUntil.js","../src/common/style-adapter.ts","../src/common/component.ts","../src/constants.ts","../node_modules/zod/lib/index.mjs","../src/validators.ts","../src/common/styles-provider.ts","../src/timeline/timeline-lane.ts","../src/timeline/marker/marker.ts","../src/util/window-util.ts","../src/timeline/marker/marker-handle.ts","../node_modules/decimal.js/decimal.mjs","../src/timeline/marker/period-marker.ts","../src/timeline/marker/moment-marker.ts","../src/timeline/marker/marker-lane.ts","../src/util/color-util.ts","../src/util/shape-util.ts","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../src/http.ts","../node_modules/node-webvtt/lib/parser.js","../node_modules/node-webvtt/lib/compiler.js","../node_modules/node-webvtt/lib/segmenter.js","../node_modules/node-webvtt/lib/hls.js","../node_modules/node-webvtt/index.js","../src/track/vtt-file.ts","../src/track/subtitles-vtt-file.ts","../src/timeline/subtitles/subtitles-lane-item.ts","../src/timeline/subtitles/subtitles-lane.ts","../src/timeline/thumbnail/thumbnail.ts","../src/track/thumbnail-vtt-file.ts","../src/util/image-util.ts","../src/timeline/thumbnail/thumbnail-lane.ts","../src/track/audio-vtt-file.ts","../src/timeline/audio-track/audio-track-lane-item.ts","../src/timeline/audio-track/audio-track-lane.ts","../src/util/animation-util.ts","../src/timeline/scrollbar.ts","../src/timeline/playhead-hover.ts","../src/timeline/playhead.ts","../src/timeline/timecode-display.ts","../src/timeline/scrubber-lane.ts","../src/timeline/timeline.ts","../src/util/frame-util.ts","../src/util/observable-util.ts","../src/common/browser-provider.ts","../src/util/time-util.ts","../src/video/playback-state.ts","../src/video/video-controller.ts","../src/video/video.ts","../src/video/video-hls-controller.ts","../src/track/track.ts","../src/track/subtitles-vtt-track.ts","../src/subtitles/subtitles-controller.ts","../node_modules/eventemitter3/index.js","../src/types/events.ts","../src/audio/audio-controller.ts","../src/dom/fullscreen.ts","../src/dom/dom-controller.ts","../src/omakase-player.ts"],"sourcesContent":["var PI_OVER_180 = Math.PI / 180;\nfunction detectBrowser() {\n return (typeof window !== 'undefined' &&\n ({}.toString.call(window) === '[object Window]' ||\n {}.toString.call(window) === '[object global]'));\n}\nexport const glob = typeof global !== 'undefined'\n ? global\n : typeof window !== 'undefined'\n ? window\n : typeof WorkerGlobalScope !== 'undefined'\n ? self\n : {};\nexport const Konva = {\n _global: glob,\n version: '8.3.14',\n isBrowser: detectBrowser(),\n isUnminified: /param/.test(function (param) { }.toString()),\n dblClickWindow: 400,\n getAngle(angle) {\n return Konva.angleDeg ? angle * PI_OVER_180 : angle;\n },\n enableTrace: false,\n pointerEventsEnabled: true,\n autoDrawEnabled: true,\n hitOnDragEnabled: false,\n capturePointerEventsEnabled: false,\n _mouseListenClick: false,\n _touchListenClick: false,\n _pointerListenClick: false,\n _mouseInDblClickWindow: false,\n _touchInDblClickWindow: false,\n _pointerInDblClickWindow: false,\n _mouseDblClickPointerId: null,\n _touchDblClickPointerId: null,\n _pointerDblClickPointerId: null,\n pixelRatio: (typeof window !== 'undefined' && window.devicePixelRatio) || 1,\n dragDistance: 3,\n angleDeg: true,\n showWarnings: true,\n dragButtons: [0, 1],\n isDragging() {\n return Konva['DD'].isDragging;\n },\n isDragReady() {\n return !!Konva['DD'].node;\n },\n releaseCanvasOnDestroy: true,\n document: glob.document,\n _injectGlobal(Konva) {\n glob.Konva = Konva;\n },\n};\nexport const _registerNode = (NodeClass) => {\n Konva[NodeClass.prototype.getClassName()] = NodeClass;\n};\nKonva._injectGlobal(Konva);\n","import { Konva } from './Global.js';\nexport class Transform {\n constructor(m = [1, 0, 0, 1, 0, 0]) {\n this.dirty = false;\n this.m = (m && m.slice()) || [1, 0, 0, 1, 0, 0];\n }\n reset() {\n this.m[0] = 1;\n this.m[1] = 0;\n this.m[2] = 0;\n this.m[3] = 1;\n this.m[4] = 0;\n this.m[5] = 0;\n }\n copy() {\n return new Transform(this.m);\n }\n copyInto(tr) {\n tr.m[0] = this.m[0];\n tr.m[1] = this.m[1];\n tr.m[2] = this.m[2];\n tr.m[3] = this.m[3];\n tr.m[4] = this.m[4];\n tr.m[5] = this.m[5];\n }\n point(point) {\n var m = this.m;\n return {\n x: m[0] * point.x + m[2] * point.y + m[4],\n y: m[1] * point.x + m[3] * point.y + m[5],\n };\n }\n translate(x, y) {\n this.m[4] += this.m[0] * x + this.m[2] * y;\n this.m[5] += this.m[1] * x + this.m[3] * y;\n return this;\n }\n scale(sx, sy) {\n this.m[0] *= sx;\n this.m[1] *= sx;\n this.m[2] *= sy;\n this.m[3] *= sy;\n return this;\n }\n rotate(rad) {\n var c = Math.cos(rad);\n var s = Math.sin(rad);\n var m11 = this.m[0] * c + this.m[2] * s;\n var m12 = this.m[1] * c + this.m[3] * s;\n var m21 = this.m[0] * -s + this.m[2] * c;\n var m22 = this.m[1] * -s + this.m[3] * c;\n this.m[0] = m11;\n this.m[1] = m12;\n this.m[2] = m21;\n this.m[3] = m22;\n return this;\n }\n getTranslation() {\n return {\n x: this.m[4],\n y: this.m[5],\n };\n }\n skew(sx, sy) {\n var m11 = this.m[0] + this.m[2] * sy;\n var m12 = this.m[1] + this.m[3] * sy;\n var m21 = this.m[2] + this.m[0] * sx;\n var m22 = this.m[3] + this.m[1] * sx;\n this.m[0] = m11;\n this.m[1] = m12;\n this.m[2] = m21;\n this.m[3] = m22;\n return this;\n }\n multiply(matrix) {\n var m11 = this.m[0] * matrix.m[0] + this.m[2] * matrix.m[1];\n var m12 = this.m[1] * matrix.m[0] + this.m[3] * matrix.m[1];\n var m21 = this.m[0] * matrix.m[2] + this.m[2] * matrix.m[3];\n var m22 = this.m[1] * matrix.m[2] + this.m[3] * matrix.m[3];\n var dx = this.m[0] * matrix.m[4] + this.m[2] * matrix.m[5] + this.m[4];\n var dy = this.m[1] * matrix.m[4] + this.m[3] * matrix.m[5] + this.m[5];\n this.m[0] = m11;\n this.m[1] = m12;\n this.m[2] = m21;\n this.m[3] = m22;\n this.m[4] = dx;\n this.m[5] = dy;\n return this;\n }\n invert() {\n var d = 1 / (this.m[0] * this.m[3] - this.m[1] * this.m[2]);\n var m0 = this.m[3] * d;\n var m1 = -this.m[1] * d;\n var m2 = -this.m[2] * d;\n var m3 = this.m[0] * d;\n var m4 = d * (this.m[2] * this.m[5] - this.m[3] * this.m[4]);\n var m5 = d * (this.m[1] * this.m[4] - this.m[0] * this.m[5]);\n this.m[0] = m0;\n this.m[1] = m1;\n this.m[2] = m2;\n this.m[3] = m3;\n this.m[4] = m4;\n this.m[5] = m5;\n return this;\n }\n getMatrix() {\n return this.m;\n }\n decompose() {\n var a = this.m[0];\n var b = this.m[1];\n var c = this.m[2];\n var d = this.m[3];\n var e = this.m[4];\n var f = this.m[5];\n var delta = a * d - b * c;\n let result = {\n x: e,\n y: f,\n rotation: 0,\n scaleX: 0,\n scaleY: 0,\n skewX: 0,\n skewY: 0,\n };\n if (a != 0 || b != 0) {\n var r = Math.sqrt(a * a + b * b);\n result.rotation = b > 0 ? Math.acos(a / r) : -Math.acos(a / r);\n result.scaleX = r;\n result.scaleY = delta / r;\n result.skewX = (a * c + b * d) / delta;\n result.skewY = 0;\n }\n else if (c != 0 || d != 0) {\n var s = Math.sqrt(c * c + d * d);\n result.rotation =\n Math.PI / 2 - (d > 0 ? Math.acos(-c / s) : -Math.acos(c / s));\n result.scaleX = delta / s;\n result.scaleY = s;\n result.skewX = 0;\n result.skewY = (a * c + b * d) / delta;\n }\n else {\n }\n result.rotation = Util._getRotation(result.rotation);\n return result;\n }\n}\nvar OBJECT_ARRAY = '[object Array]', OBJECT_NUMBER = '[object Number]', OBJECT_STRING = '[object String]', OBJECT_BOOLEAN = '[object Boolean]', PI_OVER_DEG180 = Math.PI / 180, DEG180_OVER_PI = 180 / Math.PI, HASH = '#', EMPTY_STRING = '', ZERO = '0', KONVA_WARNING = 'Konva warning: ', KONVA_ERROR = 'Konva error: ', RGB_PAREN = 'rgb(', COLORS = {\n aliceblue: [240, 248, 255],\n antiquewhite: [250, 235, 215],\n aqua: [0, 255, 255],\n aquamarine: [127, 255, 212],\n azure: [240, 255, 255],\n beige: [245, 245, 220],\n bisque: [255, 228, 196],\n black: [0, 0, 0],\n blanchedalmond: [255, 235, 205],\n blue: [0, 0, 255],\n blueviolet: [138, 43, 226],\n brown: [165, 42, 42],\n burlywood: [222, 184, 135],\n cadetblue: [95, 158, 160],\n chartreuse: [127, 255, 0],\n chocolate: [210, 105, 30],\n coral: [255, 127, 80],\n cornflowerblue: [100, 149, 237],\n cornsilk: [255, 248, 220],\n crimson: [220, 20, 60],\n cyan: [0, 255, 255],\n darkblue: [0, 0, 139],\n darkcyan: [0, 139, 139],\n darkgoldenrod: [184, 132, 11],\n darkgray: [169, 169, 169],\n darkgreen: [0, 100, 0],\n darkgrey: [169, 169, 169],\n darkkhaki: [189, 183, 107],\n darkmagenta: [139, 0, 139],\n darkolivegreen: [85, 107, 47],\n darkorange: [255, 140, 0],\n darkorchid: [153, 50, 204],\n darkred: [139, 0, 0],\n darksalmon: [233, 150, 122],\n darkseagreen: [143, 188, 143],\n darkslateblue: [72, 61, 139],\n darkslategray: [47, 79, 79],\n darkslategrey: [47, 79, 79],\n darkturquoise: [0, 206, 209],\n darkviolet: [148, 0, 211],\n deeppink: [255, 20, 147],\n deepskyblue: [0, 191, 255],\n dimgray: [105, 105, 105],\n dimgrey: [105, 105, 105],\n dodgerblue: [30, 144, 255],\n firebrick: [178, 34, 34],\n floralwhite: [255, 255, 240],\n forestgreen: [34, 139, 34],\n fuchsia: [255, 0, 255],\n gainsboro: [220, 220, 220],\n ghostwhite: [248, 248, 255],\n gold: [255, 215, 0],\n goldenrod: [218, 165, 32],\n gray: [128, 128, 128],\n green: [0, 128, 0],\n greenyellow: [173, 255, 47],\n grey: [128, 128, 128],\n honeydew: [240, 255, 240],\n hotpink: [255, 105, 180],\n indianred: [205, 92, 92],\n indigo: [75, 0, 130],\n ivory: [255, 255, 240],\n khaki: [240, 230, 140],\n lavender: [230, 230, 250],\n lavenderblush: [255, 240, 245],\n lawngreen: [124, 252, 0],\n lemonchiffon: [255, 250, 205],\n lightblue: [173, 216, 230],\n lightcoral: [240, 128, 128],\n lightcyan: [224, 255, 255],\n lightgoldenrodyellow: [250, 250, 210],\n lightgray: [211, 211, 211],\n lightgreen: [144, 238, 144],\n lightgrey: [211, 211, 211],\n lightpink: [255, 182, 193],\n lightsalmon: [255, 160, 122],\n lightseagreen: [32, 178, 170],\n lightskyblue: [135, 206, 250],\n lightslategray: [119, 136, 153],\n lightslategrey: [119, 136, 153],\n lightsteelblue: [176, 196, 222],\n lightyellow: [255, 255, 224],\n lime: [0, 255, 0],\n limegreen: [50, 205, 50],\n linen: [250, 240, 230],\n magenta: [255, 0, 255],\n maroon: [128, 0, 0],\n mediumaquamarine: [102, 205, 170],\n mediumblue: [0, 0, 205],\n mediumorchid: [186, 85, 211],\n mediumpurple: [147, 112, 219],\n mediumseagreen: [60, 179, 113],\n mediumslateblue: [123, 104, 238],\n mediumspringgreen: [0, 250, 154],\n mediumturquoise: [72, 209, 204],\n mediumvioletred: [199, 21, 133],\n midnightblue: [25, 25, 112],\n mintcream: [245, 255, 250],\n mistyrose: [255, 228, 225],\n moccasin: [255, 228, 181],\n navajowhite: [255, 222, 173],\n navy: [0, 0, 128],\n oldlace: [253, 245, 230],\n olive: [128, 128, 0],\n olivedrab: [107, 142, 35],\n orange: [255, 165, 0],\n orangered: [255, 69, 0],\n orchid: [218, 112, 214],\n palegoldenrod: [238, 232, 170],\n palegreen: [152, 251, 152],\n paleturquoise: [175, 238, 238],\n palevioletred: [219, 112, 147],\n papayawhip: [255, 239, 213],\n peachpuff: [255, 218, 185],\n peru: [205, 133, 63],\n pink: [255, 192, 203],\n plum: [221, 160, 203],\n powderblue: [176, 224, 230],\n purple: [128, 0, 128],\n rebeccapurple: [102, 51, 153],\n red: [255, 0, 0],\n rosybrown: [188, 143, 143],\n royalblue: [65, 105, 225],\n saddlebrown: [139, 69, 19],\n salmon: [250, 128, 114],\n sandybrown: [244, 164, 96],\n seagreen: [46, 139, 87],\n seashell: [255, 245, 238],\n sienna: [160, 82, 45],\n silver: [192, 192, 192],\n skyblue: [135, 206, 235],\n slateblue: [106, 90, 205],\n slategray: [119, 128, 144],\n slategrey: [119, 128, 144],\n snow: [255, 255, 250],\n springgreen: [0, 255, 127],\n steelblue: [70, 130, 180],\n tan: [210, 180, 140],\n teal: [0, 128, 128],\n thistle: [216, 191, 216],\n transparent: [255, 255, 255, 0],\n tomato: [255, 99, 71],\n turquoise: [64, 224, 208],\n violet: [238, 130, 238],\n wheat: [245, 222, 179],\n white: [255, 255, 255],\n whitesmoke: [245, 245, 245],\n yellow: [255, 255, 0],\n yellowgreen: [154, 205, 5],\n}, RGB_REGEX = /rgb\\((\\d{1,3}),(\\d{1,3}),(\\d{1,3})\\)/, animQueue = [];\nconst req = (typeof requestAnimationFrame !== 'undefined' && requestAnimationFrame) ||\n function (f) {\n setTimeout(f, 60);\n };\nexport const Util = {\n _isElement(obj) {\n return !!(obj && obj.nodeType == 1);\n },\n _isFunction(obj) {\n return !!(obj && obj.constructor && obj.call && obj.apply);\n },\n _isPlainObject(obj) {\n return !!obj && obj.constructor === Object;\n },\n _isArray(obj) {\n return Object.prototype.toString.call(obj) === OBJECT_ARRAY;\n },\n _isNumber(obj) {\n return (Object.prototype.toString.call(obj) === OBJECT_NUMBER &&\n !isNaN(obj) &&\n isFinite(obj));\n },\n _isString(obj) {\n return Object.prototype.toString.call(obj) === OBJECT_STRING;\n },\n _isBoolean(obj) {\n return Object.prototype.toString.call(obj) === OBJECT_BOOLEAN;\n },\n isObject(val) {\n return val instanceof Object;\n },\n isValidSelector(selector) {\n if (typeof selector !== 'string') {\n return false;\n }\n var firstChar = selector[0];\n return (firstChar === '#' ||\n firstChar === '.' ||\n firstChar === firstChar.toUpperCase());\n },\n _sign(number) {\n if (number === 0) {\n return 1;\n }\n if (number > 0) {\n return 1;\n }\n else {\n return -1;\n }\n },\n requestAnimFrame(callback) {\n animQueue.push(callback);\n if (animQueue.length === 1) {\n req(function () {\n const queue = animQueue;\n animQueue = [];\n queue.forEach(function (cb) {\n cb();\n });\n });\n }\n },\n createCanvasElement() {\n var canvas = document.createElement('canvas');\n try {\n canvas.style = canvas.style || {};\n }\n catch (e) { }\n return canvas;\n },\n createImageElement() {\n return document.createElement('img');\n },\n _isInDocument(el) {\n while ((el = el.parentNode)) {\n if (el == document) {\n return true;\n }\n }\n return false;\n },\n _urlToImage(url, callback) {\n var imageObj = Util.createImageElement();\n imageObj.onload = function () {\n callback(imageObj);\n };\n imageObj.src = url;\n },\n _rgbToHex(r, g, b) {\n return ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\n },\n _hexToRgb(hex) {\n hex = hex.replace(HASH, EMPTY_STRING);\n var bigint = parseInt(hex, 16);\n return {\n r: (bigint >> 16) & 255,\n g: (bigint >> 8) & 255,\n b: bigint & 255,\n };\n },\n getRandomColor() {\n var randColor = ((Math.random() * 0xffffff) << 0).toString(16);\n while (randColor.length < 6) {\n randColor = ZERO + randColor;\n }\n return HASH + randColor;\n },\n getRGB(color) {\n var rgb;\n if (color in COLORS) {\n rgb = COLORS[color];\n return {\n r: rgb[0],\n g: rgb[1],\n b: rgb[2],\n };\n }\n else if (color[0] === HASH) {\n return this._hexToRgb(color.substring(1));\n }\n else if (color.substr(0, 4) === RGB_PAREN) {\n rgb = RGB_REGEX.exec(color.replace(/ /g, ''));\n return {\n r: parseInt(rgb[1], 10),\n g: parseInt(rgb[2], 10),\n b: parseInt(rgb[3], 10),\n };\n }\n else {\n return {\n r: 0,\n g: 0,\n b: 0,\n };\n }\n },\n colorToRGBA(str) {\n str = str || 'black';\n return (Util._namedColorToRBA(str) ||\n Util._hex3ColorToRGBA(str) ||\n Util._hex6ColorToRGBA(str) ||\n Util._rgbColorToRGBA(str) ||\n Util._rgbaColorToRGBA(str) ||\n Util._hslColorToRGBA(str));\n },\n _namedColorToRBA(str) {\n var c = COLORS[str.toLowerCase()];\n if (!c) {\n return null;\n }\n return {\n r: c[0],\n g: c[1],\n b: c[2],\n a: 1,\n };\n },\n _rgbColorToRGBA(str) {\n if (str.indexOf('rgb(') === 0) {\n str = str.match(/rgb\\(([^)]+)\\)/)[1];\n var parts = str.split(/ *, */).map(Number);\n return {\n r: parts[0],\n g: parts[1],\n b: parts[2],\n a: 1,\n };\n }\n },\n _rgbaColorToRGBA(str) {\n if (str.indexOf('rgba(') === 0) {\n str = str.match(/rgba\\(([^)]+)\\)/)[1];\n var parts = str.split(/ *, */).map((n, index) => {\n if (n.slice(-1) === '%') {\n return index === 3 ? parseInt(n) / 100 : (parseInt(n) / 100) * 255;\n }\n return Number(n);\n });\n return {\n r: parts[0],\n g: parts[1],\n b: parts[2],\n a: parts[3],\n };\n }\n },\n _hex6ColorToRGBA(str) {\n if (str[0] === '#' && str.length === 7) {\n return {\n r: parseInt(str.slice(1, 3), 16),\n g: parseInt(str.slice(3, 5), 16),\n b: parseInt(str.slice(5, 7), 16),\n a: 1,\n };\n }\n },\n _hex3ColorToRGBA(str) {\n if (str[0] === '#' && str.length === 4) {\n return {\n r: parseInt(str[1] + str[1], 16),\n g: parseInt(str[2] + str[2], 16),\n b: parseInt(str[3] + str[3], 16),\n a: 1,\n };\n }\n },\n _hslColorToRGBA(str) {\n if (/hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g.test(str)) {\n const [_, ...hsl] = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g.exec(str);\n const h = Number(hsl[0]) / 360;\n const s = Number(hsl[1]) / 100;\n const l = Number(hsl[2]) / 100;\n let t2;\n let t3;\n let val;\n if (s === 0) {\n val = l * 255;\n return {\n r: Math.round(val),\n g: Math.round(val),\n b: Math.round(val),\n a: 1,\n };\n }\n if (l < 0.5) {\n t2 = l * (1 + s);\n }\n else {\n t2 = l + s - l * s;\n }\n const t1 = 2 * l - t2;\n const rgb = [0, 0, 0];\n for (let i = 0; i < 3; i++) {\n t3 = h + (1 / 3) * -(i - 1);\n if (t3 < 0) {\n t3++;\n }\n if (t3 > 1) {\n t3--;\n }\n if (6 * t3 < 1) {\n val = t1 + (t2 - t1) * 6 * t3;\n }\n else if (2 * t3 < 1) {\n val = t2;\n }\n else if (3 * t3 < 2) {\n val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n }\n else {\n val = t1;\n }\n rgb[i] = val * 255;\n }\n return {\n r: Math.round(rgb[0]),\n g: Math.round(rgb[1]),\n b: Math.round(rgb[2]),\n a: 1,\n };\n }\n },\n haveIntersection(r1, r2) {\n return !(r2.x > r1.x + r1.width ||\n r2.x + r2.width < r1.x ||\n r2.y > r1.y + r1.height ||\n r2.y + r2.height < r1.y);\n },\n cloneObject(obj) {\n var retObj = {};\n for (var key in obj) {\n if (this._isPlainObject(obj[key])) {\n retObj[key] = this.cloneObject(obj[key]);\n }\n else if (this._isArray(obj[key])) {\n retObj[key] = this.cloneArray(obj[key]);\n }\n else {\n retObj[key] = obj[key];\n }\n }\n return retObj;\n },\n cloneArray(arr) {\n return arr.slice(0);\n },\n degToRad(deg) {\n return deg * PI_OVER_DEG180;\n },\n radToDeg(rad) {\n return rad * DEG180_OVER_PI;\n },\n _degToRad(deg) {\n Util.warn('Util._degToRad is removed. Please use public Util.degToRad instead.');\n return Util.degToRad(deg);\n },\n _radToDeg(rad) {\n Util.warn('Util._radToDeg is removed. Please use public Util.radToDeg instead.');\n return Util.radToDeg(rad);\n },\n _getRotation(radians) {\n return Konva.angleDeg ? Util.radToDeg(radians) : radians;\n },\n _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n },\n throw(str) {\n throw new Error(KONVA_ERROR + str);\n },\n error(str) {\n console.error(KONVA_ERROR + str);\n },\n warn(str) {\n if (!Konva.showWarnings) {\n return;\n }\n console.warn(KONVA_WARNING + str);\n },\n each(obj, func) {\n for (var key in obj) {\n func(key, obj[key]);\n }\n },\n _inRange(val, left, right) {\n return left <= val && val < right;\n },\n _getProjectionToSegment(x1, y1, x2, y2, x3, y3) {\n var x, y, dist;\n var pd2 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);\n if (pd2 == 0) {\n x = x1;\n y = y1;\n dist = (x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2);\n }\n else {\n var u = ((x3 - x1) * (x2 - x1) + (y3 - y1) * (y2 - y1)) / pd2;\n if (u < 0) {\n x = x1;\n y = y1;\n dist = (x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3);\n }\n else if (u > 1.0) {\n x = x2;\n y = y2;\n dist = (x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3);\n }\n else {\n x = x1 + u * (x2 - x1);\n y = y1 + u * (y2 - y1);\n dist = (x - x3) * (x - x3) + (y - y3) * (y - y3);\n }\n }\n return [x, y, dist];\n },\n _getProjectionToLine(pt, line, isClosed) {\n var pc = Util.cloneObject(pt);\n var dist = Number.MAX_VALUE;\n line.forEach(function (p1, i) {\n if (!isClosed && i === line.length - 1) {\n return;\n }\n var p2 = line[(i + 1) % line.length];\n var proj = Util._getProjectionToSegment(p1.x, p1.y, p2.x, p2.y, pt.x, pt.y);\n var px = proj[0], py = proj[1], pdist = proj[2];\n if (pdist < dist) {\n pc.x = px;\n pc.y = py;\n dist = pdist;\n }\n });\n return pc;\n },\n _prepareArrayForTween(startArray, endArray, isClosed) {\n var n, start = [], end = [];\n if (startArray.length > endArray.length) {\n var temp = endArray;\n endArray = startArray;\n startArray = temp;\n }\n for (n = 0; n < startArray.length; n += 2) {\n start.push({\n x: startArray[n],\n y: startArray[n + 1],\n });\n }\n for (n = 0; n < endArray.length; n += 2) {\n end.push({\n x: endArray[n],\n y: endArray[n + 1],\n });\n }\n var newStart = [];\n end.forEach(function (point) {\n var pr = Util._getProjectionToLine(point, start, isClosed);\n newStart.push(pr.x);\n newStart.push(pr.y);\n });\n return newStart;\n },\n _prepareToStringify(obj) {\n var desc;\n obj.visitedByCircularReferenceRemoval = true;\n for (var key in obj) {\n if (!(obj.hasOwnProperty(key) && obj[key] && typeof obj[key] == 'object')) {\n continue;\n }\n desc = Object.getOwnPropertyDescriptor(obj, key);\n if (obj[key].visitedByCircularReferenceRemoval ||\n Util._isElement(obj[key])) {\n if (desc.configurable) {\n delete obj[key];\n }\n else {\n return null;\n }\n }\n else if (Util._prepareToStringify(obj[key]) === null) {\n if (desc.configurable) {\n delete obj[key];\n }\n else {\n return null;\n }\n }\n }\n delete obj.visitedByCircularReferenceRemoval;\n return obj;\n },\n _assign(target, source) {\n for (var key in source) {\n target[key] = source[key];\n }\n return target;\n },\n _getFirstPointerId(evt) {\n if (!evt.touches) {\n return evt.pointerId || 999;\n }\n else {\n return evt.changedTouches[0].identifier;\n }\n },\n releaseCanvas(...canvases) {\n if (!Konva.releaseCanvasOnDestroy)\n return;\n canvases.forEach(c => {\n c.width = 0;\n c.height = 0;\n });\n }\n};\n","import { Konva } from './Global.js';\nimport { Util } from './Util.js';\nfunction _formatValue(val) {\n if (Util._isString(val)) {\n return '\"' + val + '\"';\n }\n if (Object.prototype.toString.call(val) === '[object Number]') {\n return val;\n }\n if (Util._isBoolean(val)) {\n return val;\n }\n return Object.prototype.toString.call(val);\n}\nexport function RGBComponent(val) {\n if (val > 255) {\n return 255;\n }\n else if (val < 0) {\n return 0;\n }\n return Math.round(val);\n}\nexport function alphaComponent(val) {\n if (val > 1) {\n return 1;\n }\n else if (val < 0.0001) {\n return 0.0001;\n }\n return val;\n}\nexport function getNumberValidator() {\n if (Konva.isUnminified) {\n return function (val, attr) {\n if (!Util._isNumber(val)) {\n Util.warn(_formatValue(val) +\n ' is a not valid value for \"' +\n attr +\n '\" attribute. The value should be a number.');\n }\n return val;\n };\n }\n}\nexport function getNumberOrArrayOfNumbersValidator(noOfElements) {\n if (Konva.isUnminified) {\n return function (val, attr) {\n let isNumber = Util._isNumber(val);\n let isValidArray = Util._isArray(val) && val.length == noOfElements;\n if (!isNumber && !isValidArray) {\n Util.warn(_formatValue(val) +\n ' is a not valid value for \"' +\n attr +\n '\" attribute. The value should be a number or Array<number>(' +\n noOfElements +\n ')');\n }\n return val;\n };\n }\n}\nexport function getNumberOrAutoValidator() {\n if (Konva.isUnminified) {\n return function (val, attr) {\n var isNumber = Util._isNumber(val);\n var isAuto = val === 'auto';\n if (!(isNumber || isAuto)) {\n Util.warn(_formatValue(val) +\n ' is a not valid value for \"' +\n attr +\n '\" attribute. The value should be a number or \"auto\".');\n }\n return val;\n };\n }\n}\nexport function getStringValidator() {\n if (Konva.isUnminified) {\n return function (val, attr) {\n if (!Util._isString(val)) {\n Util.warn(_formatValue(val) +\n ' is a not valid value for \"' +\n attr +\n '\" attribute. The value should be a string.');\n }\n return val;\n };\n }\n}\nexport function getStringOrGradientValidator() {\n if (Konva.isUnminified) {\n return function (val, attr) {\n const isString = Util._isString(val);\n const isGradient = Object.prototype.toString.call(val) === '[object CanvasGradient]' ||\n (val && val.addColorStop);\n if (!(isString || isGradient)) {\n Util.warn(_formatValue(val) +\n ' is a not valid value for \"' +\n attr +\n '\" attribute. The value should be a string or a native gradient.');\n }\n return val;\n };\n }\n}\nexport function getFunctionValidator() {\n if (Konva.isUnminified) {\n return function (val, attr) {\n if (!Util._isFunction(val)) {\n Util.warn(_formatValue(val) +\n ' is a not valid value for \"' +\n attr +\n '\" attribute. The value should be a function.');\n }\n return val;\n };\n }\n}\nexport function getNumberArrayValidator() {\n if (Konva.isUnminified) {\n return function (val, attr) {\n const TypedArray = Int8Array ? Object.getPrototypeOf(Int8Array) : null;\n if (TypedArray && val instanceof TypedArray) {\n return val;\n }\n if (!Util._isArray(val)) {\n Util.warn(_formatValue(val) +\n ' is a not valid value for \"' +\n attr +\n '\" attribute. The value should be a array of numbers.');\n }\n else {\n val.forEach(function (item) {\n if (!Util._isNumber(item)) {\n Util.warn('\"' +\n attr +\n '\" attribute has non numeric element ' +\n item +\n '. Make sure that all elements are numbers.');\n }\n });\n }\n return val;\n };\n }\n}\nexport function getBooleanValidator() {\n if (Konva.isUnminified) {\n return function (val, attr) {\n var isBool = val === true || val === false;\n if (!isBool) {\n Util.warn(_formatValue(val) +\n ' is a not valid value for \"' +\n attr +\n '\" attribute. The value should be a boolean.');\n }\n return val;\n };\n }\n}\nexport function getComponentValidator(components) {\n if (Konva.isUnminified) {\n return function (val, attr) {\n if (val === undefined || val === null) {\n return val;\n }\n if (!Util.isObject(val)) {\n Util.warn(_formatValue(val) +\n ' is a not valid value for \"' +\n attr +\n '\" attribute. The value should be an object with properties ' +\n components);\n }\n return val;\n };\n }\n}\n","import { Util } from './Util.js';\nimport { getComponentValidator } from './Validators.js';\nvar GET = 'get', SET = 'set';\nexport const Factory = {\n addGetterSetter(constructor, attr, def, validator, after) {\n Factory.addGetter(constructor, attr, def);\n Factory.addSetter(constructor, attr, validator, after);\n Factory.addOverloadedGetterSetter(constructor, attr);\n },\n addGetter(constructor, attr, def) {\n var method = GET + Util._capitalize(attr);\n constructor.prototype[method] =\n constructor.prototype[method] ||\n function () {\n var val = this.attrs[attr];\n return val === undefined ? def : val;\n };\n },\n addSetter(constructor, attr, validator, after) {\n var method = SET + Util._capitalize(attr);\n if (!constructor.prototype[method]) {\n Factory.overWriteSetter(constructor, attr, validator, after);\n }\n },\n overWriteSetter(constructor, attr, validator, after) {\n var method = SET + Util._capitalize(attr);\n constructor.prototype[method] = function (val) {\n if (validator && val !== undefined && val !== null) {\n val = validator.call(this, val, attr);\n }\n this._setAttr(attr, val);\n if (after) {\n after.call(this);\n }\n return this;\n };\n },\n addComponentsGetterSetter(constructor, attr, components, validator, after) {\n var len = components.length, capitalize = Util._capitalize, getter = GET + capitalize(attr), setter = SET + capitalize(attr), n, component;\n constructor.prototype[getter] = function () {\n var ret = {};\n for (n = 0; n < len; n++) {\n component = components[n];\n ret[component] = this.getAttr(attr + capitalize(component));\n }\n return ret;\n };\n var basicValidator = getComponentValidator(components);\n constructor.prototype[setter] = function (val) {\n var oldVal = this.attrs[attr], key;\n if (validator) {\n val = validator.call(this, val);\n }\n if (basicValidator) {\n basicValidator.call(this, val, attr);\n }\n for (key in val) {\n if (!val.hasOwnProperty(key)) {\n continue;\n }\n this._setAttr(attr + capitalize(key), val[key]);\n }\n if (!val) {\n components.forEach((component) => {\n this._setAttr(attr + capitalize(component), undefined);\n });\n }\n this._fireChangeEvent(attr, oldVal, val);\n if (after) {\n after.call(this);\n }\n return this;\n };\n Factory.addOverloadedGetterSetter(constructor, attr);\n },\n addOverloadedGetterSetter(constructor, attr) {\n var capitalizedAttr = Util._capitalize(attr), setter = SET + capitalizedAttr, getter = GET + capitalizedAttr;\n constructor.prototype[attr] = function () {\n if (arguments.length) {\n this[setter](arguments[0]);\n return this;\n }\n return this[getter]();\n };\n },\n addDeprecatedGetterSetter(constructor, attr, def, validator) {\n Util.error('Adding deprecated ' + attr);\n var method = GET + Util._capitalize(attr);\n var message = attr +\n ' property is deprecated and will be removed soon. Look at Konva change log for more information.';\n constructor.prototype[method] = function () {\n Util.error(message);\n var val = this.attrs[attr];\n return val === undefined ? def : val;\n };\n Factory.addSetter(constructor, attr, validator, function () {\n Util.error(message);\n });\n Factory.addOverloadedGetterSetter(constructor, attr);\n },\n backCompat(constructor, methods) {\n Util.each(methods, function (oldMethodName, newMethodName) {\n var method = constructor.prototype[newMethodName];\n var oldGetter = GET + Util._capitalize(oldMethodName);\n var oldSetter = SET + Util._capitalize(oldMethodName);\n function deprecated() {\n method.apply(this, arguments);\n Util.error('\"' +\n oldMethodName +\n '\" method is deprecated and will be removed soon. Use \"\"' +\n newMethodName +\n '\" instead.');\n }\n constructor.prototype[oldMethodName] = deprecated;\n constructor.prototype[oldGetter] = deprecated;\n constructor.prototype[oldSetter] = deprecated;\n });\n },\n afterSetFilter() {\n this._filterUpToDate = false;\n },\n};\n","import { Util } from './Util.js';\nimport { Konva } from './Global.js';\nfunction simplifyArray(arr) {\n var retArr = [], len = arr.length, util = Util, n, val;\n for (n = 0; n < len; n++) {\n val = arr[n];\n if (util._isNumber(val)) {\n val = Math.round(val * 1000) / 1000;\n }\n else if (!util._isString(val)) {\n val = val + '';\n }\n retArr.push(val);\n }\n return retArr;\n}\nvar COMMA = ',', OPEN_PAREN = '(', CLOSE_PAREN = ')', OPEN_PAREN_BRACKET = '([', CLOSE_BRACKET_PAREN = '])', SEMICOLON = ';', DOUBLE_PAREN = '()', EQUALS = '=', CONTEXT_METHODS = [\n 'arc',\n 'arcTo',\n 'beginPath',\n 'bezierCurveTo',\n 'clearRect',\n 'clip',\n 'closePath',\n 'createLinearGradient',\n 'createPattern',\n 'createRadialGradient',\n 'drawImage',\n 'ellipse',\n 'fill',\n 'fillText',\n 'getImageData',\n 'createImageData',\n 'lineTo',\n 'moveTo',\n 'putImageData',\n 'quadraticCurveTo',\n 'rect',\n 'restore',\n 'rotate',\n 'save',\n 'scale',\n 'setLineDash',\n 'setTransform',\n 'stroke',\n 'strokeText',\n 'transform',\n 'translate',\n];\nvar CONTEXT_PROPERTIES = [\n 'fillStyle',\n 'strokeStyle',\n 'shadowColor',\n 'shadowBlur',\n 'shadowOffsetX',\n 'shadowOffsetY',\n 'lineCap',\n 'lineDashOffset',\n 'lineJoin',\n 'lineWidth',\n 'miterLimit',\n 'font',\n 'textAlign',\n 'textBaseline',\n 'globalAlpha',\n 'globalCompositeOperation',\n 'imageSmoothingEnabled',\n];\nconst traceArrMax = 100;\nexport class Context {\n constructor(canvas) {\n this.canvas = canvas;\n if (Konva.enableTrace) {\n this.traceArr = [];\n this._enableTrace();\n }\n }\n fillShape(shape) {\n if (shape.fillEnabled()) {\n this._fill(shape);\n }\n }\n _fill(shape) {\n }\n strokeShape(shape) {\n if (shape.hasStroke()) {\n this._stroke(shape);\n }\n }\n _stroke(shape) {\n }\n fillStrokeShape(shape) {\n if (shape.attrs.fillAfterStrokeEnabled) {\n this.strokeShape(shape);\n this.fillShape(shape);\n }\n else {\n this.fillShape(shape);\n this.strokeShape(shape);\n }\n }\n getTrace(relaxed, rounded) {\n var traceArr = this.traceArr, len = traceArr.length, str = '', n, trace, method, args;\n for (n = 0; n < len; n++) {\n trace = traceArr[n];\n method = trace.method;\n if (method) {\n args = trace.args;\n str += method;\n if (relaxed) {\n str += DOUBLE_PAREN;\n }\n else {\n if (Util._isArray(args[0])) {\n str += OPEN_PAREN_BRACKET + args.join(COMMA) + CLOSE_BRACKET_PAREN;\n }\n else {\n if (rounded) {\n args = args.map((a) => typeof a === 'number' ? Math.floor(a) : a);\n }\n str += OPEN_PAREN + args.join(COMMA) + CLOSE_PAREN;\n }\n }\n }\n else {\n str += trace.property;\n if (!relaxed) {\n str += EQUALS + trace.val;\n }\n }\n str += SEMICOLON;\n }\n return str;\n }\n clearTrace() {\n this.traceArr = [];\n }\n _trace(str) {\n var traceArr = this.traceArr, len;\n traceArr.push(str);\n len = traceArr.length;\n if (len >= traceArrMax) {\n traceArr.shift();\n }\n }\n reset() {\n var pixelRatio = this.getCanvas().getPixelRatio();\n this.setTransform(1 * pixelRatio, 0, 0, 1 * pixelRatio, 0, 0);\n }\n getCanvas() {\n return this.canvas;\n }\n clear(bounds) {\n var canvas = this.getCanvas();\n if (bounds) {\n this.clearRect(bounds.x || 0, bounds.y || 0, bounds.width || 0, bounds.height || 0);\n }\n else {\n this.clearRect(0, 0, canvas.getWidth() / canvas.pixelRatio, canvas.getHeight() / canvas.pixelRatio);\n }\n }\n _applyLineCap(shape) {\n var lineCap = shape.getLineCap();\n if (lineCap) {\n this.setAttr('lineCap', lineCap);\n }\n }\n _applyOpacity(shape) {\n var absOpacity = shape.getAbsoluteOpacity();\n if (absOpacity !== 1) {\n this.setAttr('globalAlpha', absOpacity);\n }\n }\n _applyLineJoin(shape) {\n var lineJoin = shape.attrs.lineJoin;\n if (lineJoin) {\n this.setAttr('lineJoin', lineJoin);\n }\n }\n setAttr(attr, val) {\n this._context[attr] = val;\n }\n arc(a0, a1, a2, a3, a4, a5) {\n this._context.arc(a0, a1, a2, a3, a4, a5);\n }\n arcTo(a0, a1, a2, a3, a4) {\n this._context.arcTo(a0, a1, a2, a3, a4);\n }\n beginPath() {\n this._context.beginPath();\n }\n bezierCurveTo(a0, a1, a2, a3, a4, a5) {\n this._context.bezierCurveTo(a0, a1, a2, a3, a4, a5);\n }\n clearRect(a0, a1, a2, a3) {\n this._context.clearRect(a0, a1, a2, a3);\n }\n clip() {\n this._context.clip();\n }\n closePath() {\n this._context.closePath();\n }\n createImageData(a0, a1) {\n var a = arguments;\n if (a.length === 2) {\n return this._context.createImageData(a0, a1);\n }\n else if (a.length === 1) {\n return this._context.createImageData(a0);\n }\n }\n createLinearGradient(a0, a1, a2, a3) {\n return this._context.createLinearGradient(a0, a1, a2, a3);\n }\n createPattern(a0, a1) {\n return this._context.createPattern(a0, a1);\n }\n createRadialGradient(a0, a1, a2, a3, a4, a5) {\n return this._context.createRadialGradient(a0, a1, a2, a3, a4, a5);\n }\n drawImage(a0, a1, a2, a3, a4, a5, a6, a7, a8) {\n var a = arguments, _context = this._context;\n if (a.length === 3) {\n _context.drawImage(a0, a1, a2);\n }\n else if (a.length === 5) {\n _context.drawImage(a0, a1, a2, a3, a4);\n }\n else if (a.length === 9) {\n _context.drawImage(a0, a1, a2, a3, a4, a5, a6, a7, a8);\n }\n }\n ellipse(a0, a1, a2, a3, a4, a5, a6, a7) {\n this._context.ellipse(a0, a1, a2, a3, a4, a5, a6, a7);\n }\n isPointInPath(x, y) {\n return this._context.isPointInPath(x, y);\n }\n fill(path2d) {\n if (path2d) {\n this._context.fill(path2d);\n }\n else {\n this._context.fill();\n }\n }\n fillRect(x, y, width, height) {\n this._context.fillRect(x, y, width, height);\n }\n strokeRect(x, y, width, height) {\n this._context.strokeRect(x, y, width, height);\n }\n fillText(text, x, y, maxWidth) {\n if (maxWidth) {\n this._context.fillText(text, x, y, maxWidth);\n }\n else {\n this._context.fillText(text, x, y);\n }\n }\n measureText(text) {\n return this._context.measureText(text);\n }\n getImageData(a0, a1, a2, a3) {\n return this._context.getImageData(a0, a1, a2, a3);\n }\n lineTo(a0, a1) {\n this._context.lineTo(a0, a1);\n }\n moveTo(a0, a1) {\n this._context.moveTo(a0, a1);\n }\n rect(a0, a1, a2, a3) {\n this._context.rect(a0, a1, a2, a3);\n }\n putImageData(a0, a1, a2) {\n this._context.putImageData(a0, a1, a2);\n }\n quadraticCurveTo(a0, a1, a2, a3) {\n this._context.quadraticCurveTo(a0, a1, a2, a3);\n }\n restore() {\n this._context.restore();\n }\n rotate(a0) {\n this._context.rotate(a0);\n }\n save() {\n this._context.save();\n }\n scale(a0, a1) {\n this._context.scale(a0, a1);\n }\n setLineDash(a0) {\n if (this._context.setLineDash) {\n this._context.setLineDash(a0);\n }\n else if ('mozDash' in this._context) {\n this._context['mozDash'] = a0;\n }\n else if ('webkitLineDash' in this._context) {\n this._context['webkitLineDash'] = a0;\n }\n }\n getLineDash() {\n return this._context.getLineDash();\n }\n setTransform(a0, a1, a2, a3, a4, a5) {\n this._context.setTransform(a0, a1, a2, a3, a4, a5);\n }\n stroke(path2d) {\n if (path2d) {\n this._context.stroke(path2d);\n }\n else {\n this._context.stroke();\n }\n }\n strokeText(a0, a1, a2, a3) {\n this._context.strokeText(a0, a1, a2, a3);\n }\n transform(a0, a1, a2, a3, a4, a5) {\n this._context.transform(a0, a1, a2, a3, a4, a5);\n }\n translate(a0, a1) {\n this._context.translate(a0, a1);\n }\n _enableTrace() {\n var that = this, len = CONTEXT_METHODS.length, origSetter = this.setAttr, n, args;\n var func = function (methodName) {\n var origMethod = that[methodName], ret;\n that[methodName] = function () {\n args = simplifyArray(Array.prototype.slice.call(arguments, 0));\n ret = origMethod.apply(that, arguments);\n that._trace({\n method: methodName,\n args: args,\n });\n return ret;\n };\n };\n for (n = 0; n < len; n++) {\n func(CONTEXT_METHODS[n]);\n }\n that.setAttr = function () {\n origSetter.apply(that, arguments);\n var prop = arguments[0];\n var val = arguments[1];\n if (prop === 'shadowOffsetX' ||\n prop === 'shadowOffsetY' ||\n prop === 'shadowBlur') {\n val = val / this.canvas.getPixelRatio();\n }\n that._trace({\n property: prop,\n val: val,\n });\n };\n }\n _applyGlobalCompositeOperation(node) {\n const op = node.attrs.globalCompositeOperation;\n var def = !op || op === 'source-over';\n if (!def) {\n this.setAttr('globalCompositeOperation', op);\n }\n }\n}\n;\nCONTEXT_PROPERTIES.forEach(function (prop) {\n Object.defineProperty(Context.prototype, prop, {\n get() {\n return this._context[prop];\n },\n set(val) {\n this._context[prop] = val;\n },\n });\n});\nexport class SceneContext extends Context {\n constructor(canvas) {\n super(canvas);\n this._context = canvas._canvas.getContext('2d');\n }\n _fillColor(shape) {\n var fill = shape.fill();\n this.setAttr('fillStyle', fill);\n shape._fillFunc(this);\n }\n _fillPattern(shape) {\n this.setAttr('fillStyle', shape._getFillPattern());\n shape._fillFunc(this);\n }\n _fillLinearGradient(shape) {\n var grd = shape._getLinearGradient();\n if (grd) {\n this.setAttr('fillStyle', grd);\n shape._fillFunc(this);\n }\n }\n _fillRadialGradient(shape) {\n var grd = shape._getRadialGradient();\n if (grd) {\n this.setAttr('fillStyle', grd);\n shape._fillFunc(this);\n }\n }\n _fill(shape) {\n var hasColor = shape.fill(), fillPriority = shape.getFillPriority();\n if (hasColor && fillPriority === 'color') {\n this._fillColor(shape);\n return;\n }\n var hasPattern = shape.getFillPatternImage();\n if (hasPattern && fillPriority === 'pattern') {\n this._fillPattern(shape);\n return;\n }\n var hasLinearGradient = shape.getFillLinearGradientColorStops();\n if (hasLinearGradient && fillPriority === 'linear-gradient') {\n this._fillLinearGradient(shape);\n return;\n }\n var hasRadialGradient = shape.getFillRadialGradientColorStops();\n if (hasRadialGradient && fillPriority === 'radial-gradient') {\n this._fillRadialGradient(shape);\n return;\n }\n if (hasColor) {\n this._fillColor(shape);\n }\n else if (hasPattern) {\n this._fillPattern(shape);\n }\n else if (hasLinearGradient) {\n this._fillLinearGradient(shape);\n }\n else if (hasRadialGradient) {\n this._fillRadialGradient(shape);\n }\n }\n _strokeLinearGradient(shape) {\n var start = shape.getStrokeLinearGradientStartPoint(), end = shape.getStrokeLinearGradientEndPoint(), colorStops = shape.getStrokeLinearGradientColorStops(), grd = this.createLinearGradient(start.x, start.y, end.x, end.y);\n if (colorStops) {\n for (var n = 0; n < colorStops.length; n += 2) {\n grd.addColorStop(colorStops[n], colorStops[n + 1]);\n }\n this.setAttr('strokeStyle', grd);\n }\n }\n _stroke(shape) {\n var dash = shape.dash(), strokeScaleEnabled = shape.getStrokeScaleEnabled();\n if (shape.hasStroke()) {\n if (!strokeScaleEnabled) {\n this.save();\n var pixelRatio = this.getCanvas().getPixelRatio();\n this.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n }\n this._applyLineCap(shape);\n if (dash && shape.dashEnabled()) {\n this.setLineDash(dash);\n this.setAttr('lineDashOffset', shape.dashOffset());\n }\n this.setAttr('lineWidth', shape.strokeWidth());\n if (!shape.getShadowForStrokeEnabled()) {\n this.setAttr('shadowColor', 'rgba(0,0,0,0)');\n }\n var hasLinearGradient = shape.getStrokeLinearGradientColorStops();\n if (hasLinearGradient) {\n this._strokeLinearGradient(shape);\n }\n else {\n this.setAttr('strokeStyle', shape.stroke());\n }\n shape._strokeFunc(this);\n if (!strokeScaleEnabled) {\n this.restore();\n }\n }\n }\n _applyShadow(shape) {\n var _a, _b, _c;\n var color = (_a = shape.getShadowRGBA()) !== null && _a !== void 0 ? _a : 'black', blur = (_b = shape.getShadowBlur()) !== null && _b !== void 0 ? _b : 5, offset = (_c = shape.getShadowOffset()) !== null && _c !== void 0 ? _c : {\n x: 0,\n y: 0,\n }, scale = shape.getAbsoluteScale(), ratio = this.canvas.getPixelRatio(), scaleX = scale.x * ratio, scaleY = scale.y * ratio;\n this.setAttr('shadowColor', color);\n this.setAttr('shadowBlur', blur * Math.min(Math.abs(scaleX), Math.abs(scaleY)));\n this.setAttr('shadowOffsetX', offset.x * scaleX);\n this.setAttr('shadowOffsetY', offset.y * scaleY);\n }\n}\nexport class HitContext extends Context {\n constructor(canvas) {\n super(canvas);\n this._context = canvas._canvas.getContext('2d', {\n willReadFrequently: true,\n });\n }\n _fill(shape) {\n this.save();\n this.setAttr('fillStyle', shape.colorKey);\n shape._fillFuncHit(this);\n this.restore();\n }\n strokeShape(shape) {\n if (shape.hasHitStroke()) {\n this._stroke(shape);\n }\n }\n _stroke(shape) {\n if (shape.hasHitStroke()) {\n var strokeScaleEnabled = shape.getStrokeScaleEnabled();\n if (!strokeScaleEnabled) {\n this.save();\n var pixelRatio = this.getCanvas().getPixelRatio();\n this.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n }\n this._applyLineCap(shape);\n var hitStrokeWidth = shape.hitStrokeWidth();\n var strokeWidth = hitStrokeWidth === 'auto' ? shape.strokeWidth() : hitStrokeWidth;\n this.setAttr('lineWidth', strokeWidth);\n this.setAttr('strokeStyle', shape.colorKey);\n shape._strokeFuncHit(this);\n if (!strokeScaleEnabled) {\n this.restore();\n }\n }\n }\n}\n","import { Util } from './Util.js';\nimport { SceneContext, HitContext } from './Context.js';\nimport { Konva } from './Global.js';\nimport { Factory } from './Factory.js';\nimport { getNumberValidator } from './Validators.js';\nvar _pixelRatio;\nfunction getDevicePixelRatio() {\n if (_pixelRatio) {\n return _pixelRatio;\n }\n var canvas = Util.createCanvasElement();\n var context = canvas.getContext('2d');\n _pixelRatio = (function () {\n var devicePixelRatio = Konva._global.devicePixelRatio || 1, backingStoreRatio = context.webkitBackingStorePixelRatio ||\n context.mozBackingStorePixelRatio ||\n context.msBackingStorePixelRatio ||\n context.oBackingStorePixelRatio ||\n context.backingStorePixelRatio ||\n 1;\n return devicePixelRatio / backingStoreRatio;\n })();\n Util.releaseCanvas(canvas);\n return _pixelRatio;\n}\nexport class Canvas {\n constructor(config) {\n this.pixelRatio = 1;\n this.width = 0;\n this.height = 0;\n this.isCache = false;\n var conf = config || {};\n var pixelRatio = conf.pixelRatio || Konva.pixelRatio || getDevicePixelRatio();\n this.pixelRatio = pixelRatio;\n this._canvas = Util.createCanvasElement();\n this._canvas.style.padding = '0';\n this._canvas.style.margin = '0';\n this._canvas.style.border = '0';\n this._canvas.style.background = 'transparent';\n this._canvas.style.position = 'absolute';\n this._canvas.style.top = '0';\n this._canvas.style.left = '0';\n }\n getContext() {\n return this.context;\n }\n getPixelRatio() {\n return this.pixelRatio;\n }\n setPixelRatio(pixelRatio) {\n var previousRatio = this.pixelRatio;\n this.pixelRatio = pixelRatio;\n this.setSize(this.getWidth() / previousRatio, this.getHeight() / previousRatio);\n }\n setWidth(width) {\n this.width = this._canvas.width = width * this.pixelRatio;\n this._canvas.style.width = width + 'px';\n var pixelRatio = this.pixelRatio, _context = this.getContext()._context;\n _context.scale(pixelRatio, pixelRatio);\n }\n setHeight(height) {\n this.height = this._canvas.height = height * this.pixelRatio;\n this._canvas.style.height = height + 'px';\n var pixelRatio = this.pixelRatio, _context = this.getContext()._context;\n _context.scale(pixelRatio, pixelRatio);\n }\n getWidth() {\n return this.width;\n }\n getHeight() {\n return this.height;\n }\n setSize(width, height) {\n this.setWidth(width || 0);\n this.setHeight(height || 0);\n }\n toDataURL(mimeType, quality) {\n try {\n return this._canvas.toDataURL(mimeType, quality);\n }\n catch (e) {\n try {\n return this._canvas.toDataURL();\n }\n catch (err) {\n Util.error('Unable to get data URL. ' +\n err.message +\n ' For more info read https://konvajs.org/docs/posts/Tainted_Canvas.html.');\n return '';\n }\n }\n }\n}\nFactory.addGetterSetter(Canvas, 'pixelRatio', undefined, getNumberValidator());\nexport class SceneCanvas extends Canvas {\n constructor(config = { width: 0, height: 0 }) {\n super(config);\n this.context = new SceneContext(this);\n this.setSize(config.width, config.height);\n }\n}\nexport class HitCanvas extends Canvas {\n constructor(config = { width: 0, height: 0 }) {\n super(config);\n this.hitCanvas = true;\n this.context = new HitContext(this);\n this.setSize(config.width, config.height);\n }\n}\n","import { Konva } from './Global.js';\nimport { Util } from './Util.js';\nexport const DD = {\n get isDragging() {\n var flag = false;\n DD._dragElements.forEach((elem) => {\n if (elem.dragStatus === 'dragging') {\n flag = true;\n }\n });\n return flag;\n },\n justDragged: false,\n get node() {\n var node;\n DD._dragElements.forEach((elem) => {\n node = elem.node;\n });\n return node;\n },\n _dragElements: new Map(),\n _drag(evt) {\n const nodesToFireEvents = [];\n DD._dragElements.forEach((elem, key) => {\n const { node } = elem;\n const stage = node.getStage();\n stage.setPointersPositions(evt);\n if (elem.pointerId === undefined) {\n elem.pointerId = Util._getFirstPointerId(evt);\n }\n const pos = stage._changedPointerPositions.find((pos) => pos.id === elem.pointerId);\n if (!pos) {\n return;\n }\n if (elem.dragStatus !== 'dragging') {\n var dragDistance = node.dragDistance();\n var distance = Math.max(Math.abs(pos.x - elem.startPointerPos.x), Math.abs(pos.y - elem.startPointerPos.y));\n if (distance < dragDistance) {\n return;\n }\n node.startDrag({ evt });\n if (!node.isDragging()) {\n return;\n }\n }\n node._setDragPosition(evt, elem);\n nodesToFireEvents.push(node);\n });\n nodesToFireEvents.forEach((node) => {\n node.fire('dragmove', {\n type: 'dragmove',\n target: node,\n evt: evt,\n }, true);\n });\n },\n _endDragBefore(evt) {\n const drawNodes = [];\n DD._dragElements.forEach((elem) => {\n const { node } = elem;\n const stage = node.getStage();\n if (evt) {\n stage.setPointersPositions(evt);\n }\n const pos = stage._changedPointerPositions.find((pos) => pos.id === elem.pointerId);\n if (!pos) {\n return;\n }\n if (elem.dragStatus === 'dragging' || elem.dragStatus === 'stopped') {\n DD.justDragged = true;\n Konva._mouseListenClick = false;\n Konva._touchListenClick = false;\n Konva._pointerListenClick = false;\n elem.dragStatus = 'stopped';\n }\n const drawNode = elem.node.getLayer() ||\n (elem.node instanceof Konva['Stage'] && elem.node);\n if (drawNode && drawNodes.indexOf(drawNode) === -1) {\n drawNodes.push(drawNode);\n }\n });\n drawNodes.forEach((drawNode) => {\n drawNode.draw();\n });\n },\n _endDragAfter(evt) {\n DD._dragElements.forEach((elem, key) => {\n if (elem.dragStatus === 'stopped') {\n elem.node.fire('dragend', {\n type: 'dragend',\n target: elem.node,\n evt: evt,\n }, true);\n }\n if (elem.dragStatus !== 'dragging') {\n DD._dragElements.delete(key);\n }\n });\n },\n};\nif (Konva.isBrowser) {\n window.addEventListener('mouseup', DD._endDragBefore, true);\n window.addEventListener('touchend', DD._endDragBefore, true);\n window.addEventListener('mousemove', DD._drag);\n window.addEventListener('touchmove', DD._drag);\n window.addEventListener('mouseup', DD._endDragAfter, false);\n window.addEventListener('touchend', DD._endDragAfter, false);\n}\n","import { Util, Transform } from './Util.js';\nimport { Factory } from './Factory.js';\nimport { SceneCanvas, HitCanvas } from './Canvas.js';\nimport { Konva } from './Global.js';\nimport { DD } from './DragAndDrop.js';\nimport { getNumberValidator, getStringValidator, getBooleanValidator, } from './Validators.js';\nvar ABSOLUTE_OPACITY = 'absoluteOpacity', ALL_LISTENERS = 'allEventListeners', ABSOLUTE_TRANSFORM = 'absoluteTransform', ABSOLUTE_SCALE = 'absoluteScale', CANVAS = 'canvas', CHANGE = 'Change', CHILDREN = 'children', KONVA = 'konva', LISTENING = 'listening', MOUSEENTER = 'mouseenter', MOUSELEAVE = 'mouseleave', NAME = 'name', SET = 'set', SHAPE = 'Shape', SPACE = ' ', STAGE = 'stage', TRANSFORM = 'transform', UPPER_STAGE = 'Stage', VISIBLE = 'visible', TRANSFORM_CHANGE_STR = [\n 'xChange.konva',\n 'yChange.konva',\n 'scaleXChange.konva',\n 'scaleYChange.konva',\n 'skewXChange.konva',\n 'skewYChange.konva',\n 'rotationChange.konva',\n 'offsetXChange.konva',\n 'offsetYChange.konva',\n 'transformsEnabledChange.konva',\n].join(SPACE);\nlet idCounter = 1;\nexport class Node {\n constructor(config) {\n this._id = idCounter++;\n this.eventListeners = {};\n this.attrs = {};\n this.index = 0;\n this._allEventListeners = null;\n this.parent = null;\n this._cache = new Map();\n this._attachedDepsListeners = new Map();\n this._lastPos = null;\n this._batchingTransformChange = false;\n this._needClearTransformCache = false;\n this._filterUpToDate = false;\n this._isUnderCache = false;\n this._dragEventId = null;\n this._shouldFireChangeEvents = false;\n this.setAttrs(config);\n this._shouldFireChangeEvents = true;\n }\n hasChildren() {\n return false;\n }\n _clearCache(attr) {\n if ((attr === TRANSFORM || attr === ABSOLUTE_TRANSFORM) &&\n this._cache.get(attr)) {\n this._cache.get(attr).dirty = true;\n }\n else if (attr) {\n this._cache.delete(attr);\n }\n else {\n this._cache.clear();\n }\n }\n _getCache(attr, privateGetter) {\n var cache = this._cache.get(attr);\n var isTransform = attr === TRANSFORM || attr === ABSOLUTE_TRANSFORM;\n var invalid = cache === undefined || (isTransform && cache.dirty === true);\n if (invalid) {\n cache = privateGetter.call(this);\n this._cache.set(attr, cache);\n }\n return cache;\n }\n _calculate(name, deps, getter) {\n if (!this._attachedDepsListeners.get(name)) {\n const depsString = deps.map((dep) => dep + 'Change.konva').join(SPACE);\n this.on(depsString, () => {\n this._clearCache(name);\n });\n this._attachedDepsListeners.set(name, true);\n }\n return this._getCache(name, getter);\n }\n _getCanvasCache() {\n return this._cache.get(CANVAS);\n }\n _clearSelfAndDescendantCache(attr) {\n this._clearCache(attr);\n if (attr === ABSOLUTE_TRANSFORM) {\n this.fire('absoluteTransformChange');\n }\n }\n clearCache() {\n if (this._cache.has(CANVAS)) {\n const { scene, filter, hit } = this._cache.get(CANVAS);\n Util.releaseCanvas(scene, filter, hit);\n this._cache.delete(CANVAS);\n }\n this._clearSelfAndDescendantCache();\n this._requestDraw();\n return this;\n }\n cache(config) {\n var conf = config || {};\n var rect = {};\n if (conf.x === undefined ||\n conf.y === undefined ||\n conf.width === undefined ||\n conf.height === undefined) {\n rect = this.getClientRect({\n skipTransform: true,\n relativeTo: this.getParent(),\n });\n }\n var width = Math.ceil(conf.width || rect.width), height = Math.ceil(conf.height || rect.height), pixelRatio = conf.pixelRatio, x = conf.x === undefined ? Math.floor(rect.x) : conf.x, y = conf.y === undefined ? Math.floor(rect.y) : conf.y, offset = conf.offset || 0, drawBorder = conf.drawBorder || false, hitCanvasPixelRatio = conf.hitCanvasPixelRatio || 1;\n if (!width || !height) {\n Util.error('Can not cache the node. Width or height of the node equals 0. Caching is skipped.');\n return;\n }\n width += offset * 2 + 1;\n height += offset * 2 + 1;\n x -= offset;\n y -= offset;\n var cachedSceneCanvas = new SceneCanvas({\n pixelRatio: pixelRatio,\n width: width,\n height: height,\n }), cachedFilterCanvas = new SceneCanvas({\n pixelRatio: pixelRatio,\n width: 0,\n height: 0,\n }), cachedHitCanvas = new HitCanvas({\n pixelRatio: hitCanvasPixelRatio,\n width: width,\n height: height,\n }), sceneContext = cachedSceneCanvas.getContext(), hitContext = cachedHitCanvas.getContext();\n cachedHitCanvas.isCache = true;\n cachedSceneCanvas.isCache = true;\n this._cache.delete(CANVAS);\n this._filterUpToDate = false;\n if (conf.imageSmoothingEnabled === false) {\n cachedSceneCanvas.getContext()._context.imageSmoothingEnabled = false;\n cachedFilterCanvas.getContext()._context.imageSmoothingEnabled = false;\n }\n sceneContext.save();\n hitContext.save();\n sceneContext.translate(-x, -y);\n hitContext.translate(-x, -y);\n this._isUnderCache = true;\n this._clearSelfAndDescendantCache(ABSOLUTE_OPACITY);\n this._clearSelfAndDescendantCache(ABSOLUTE_SCALE);\n this.drawScene(cachedSceneCanvas, this);\n this.drawHit(cachedHitCanvas, this);\n this._isUnderCache = false;\n sceneContext.restore();\n hitContext.restore();\n if (drawBorder) {\n sceneContext.save();\n sceneContext.beginPath();\n sceneContext.rect(0, 0, width, height);\n sceneContext.closePath();\n sceneContext.setAttr('strokeStyle', 'red');\n sceneContext.setAttr('lineWidth', 5);\n sceneContext.stroke();\n sceneContext.restore();\n }\n this._cache.set(CANVAS, {\n scene: cachedSceneCanvas,\n filter: cachedFilterCanvas,\n hit: cachedHitCanvas,\n x: x,\n y: y,\n });\n this._requestDraw();\n return this;\n }\n isCached() {\n return this._cache.has(CANVAS);\n }\n getClientRect(config) {\n throw new Error('abstract \"getClientRect\" method call');\n }\n _transformedRect(rect, top) {\n var points = [\n { x: rect.x, y: rect.y },\n { x: rect.x + rect.width, y: rect.y },\n { x: rect.x + rect.width, y: rect.y + rect.height },\n { x: rect.x, y: rect.y + rect.height },\n ];\n var minX, minY, maxX, maxY;\n var trans = this.getAbsoluteTransform(top);\n points.forEach(function (point) {\n var transformed = trans.point(point);\n if (minX === undefined) {\n minX = maxX = transformed.x;\n minY = maxY = transformed.y;\n }\n minX = Math.min(minX, transformed.x);\n minY = Math.min(minY, transformed.y);\n maxX = Math.max(maxX, transformed.x);\n maxY = Math.max(maxY, transformed.y);\n });\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n }\n _drawCachedSceneCanvas(context) {\n context.save();\n context._applyOpacity(this);\n context._applyGlobalCompositeOperation(this);\n const canvasCache = this._getCanvasCache();\n context.translate(canvasCache.x, canvasCache.y);\n var cacheCanvas = this._getCachedSceneCanvas();\n var ratio = cacheCanvas.pixelRatio;\n context.drawImage(cacheCanvas._canvas, 0, 0, cacheCanvas.width / ratio, cacheCanvas.height / ratio);\n context.restore();\n }\n _drawCachedHitCanvas(context) {\n var canvasCache = this._getCanvasCache(), hitCanvas = canvasCache.hit;\n context.save();\n context.translate(canvasCache.x, canvasCache.y);\n context.drawImage(hitCanvas._canvas, 0, 0, hitCanvas.width / hitCanvas.pixelRatio, hitCanvas.height / hitCanvas.pixelRatio);\n context.restore();\n }\n _getCachedSceneCanvas() {\n var filters = this.filters(), cachedCanvas = this._getCanvasCache(), sceneCanvas = cachedCanvas.scene, filterCanvas = cachedCanvas.filter, filterContext = filterCanvas.getContext(), len, imageData, n, filter;\n if (filters) {\n if (!this._filterUpToDate) {\n var ratio = sceneCanvas.pixelRatio;\n filterCanvas.setSize(sceneCanvas.width / sceneCanvas.pixelRatio, sceneCanvas.height / sceneCanvas.pixelRatio);\n try {\n len = filters.length;\n filterContext.clear();\n filterContext.drawImage(sceneCanvas._canvas, 0, 0, sceneCanvas.getWidth() / ratio, sceneCanvas.getHeight() / ratio);\n imageData = filterContext.getImageData(0, 0, filterCanvas.getWidth(), filterCanvas.getHeight());\n for (n = 0; n < len; n++) {\n filter = filters[n];\n if (typeof filter !== 'function') {\n Util.error('Filter should be type of function, but got ' +\n typeof filter +\n ' instead. Please check correct filters');\n continue;\n }\n filter.call(this, imageData);\n filterContext.putImageData(imageData, 0, 0);\n }\n }\n catch (e) {\n Util.error('Unable to apply filter. ' +\n e.message +\n ' This post my help you https://konvajs.org/docs/posts/Tainted_Canvas.html.');\n }\n this._filterUpToDate = true;\n }\n return filterCanvas;\n }\n return sceneCanvas;\n }\n on(evtStr, handler) {\n this._cache && this._cache.delete(ALL_LISTENERS);\n if (arguments.length === 3) {\n return this._delegate.apply(this, arguments);\n }\n var events = evtStr.split(SPACE), len = events.length, n, event, parts, baseEvent, name;\n for (n = 0; n < len; n++) {\n event = events[n];\n parts = event.split('.');\n baseEvent = parts[0];\n name = parts[1] || '';\n if (!this.eventListeners[baseEvent]) {\n this.eventListeners[baseEvent] = [];\n }\n this.eventListeners[baseEvent].push({\n name: name,\n handler: handler,\n });\n }\n return this;\n }\n off(evtStr, callback) {\n var events = (evtStr || '').split(SPACE), len = events.length, n, t, event, parts, baseEvent, name;\n this._cache && this._cache.delete(ALL_LISTENERS);\n if (!evtStr) {\n for (t in this.eventListeners) {\n this._off(t);\n }\n }\n for (n = 0; n < len; n++) {\n event = events[n];\n parts = event.split('.');\n baseEvent = parts[0];\n name = parts[1];\n if (baseEvent) {\n if (this.eventListeners[baseEvent]) {\n this._off(baseEvent, name, callback);\n }\n }\n else {\n for (t in this.eventListeners) {\n this._off(t, name, callback);\n }\n }\n }\n return this;\n }\n dispatchEvent(evt) {\n var e = {\n target: this,\n type: evt.type,\n evt: evt,\n };\n this.fire(evt.type, e);\n return this;\n }\n addEventListener(type, handler) {\n this.on(type, function (evt) {\n handler.call(this, evt.evt);\n });\n return this;\n }\n removeEventListener(type) {\n this.off(type);\n return this;\n }\n _delegate(event, selector, handler) {\n var stopNode = this;\n this.on(event, function (evt) {\n var targets = evt.target.findAncestors(selector, true, stopNode);\n for (var i = 0; i < targets.length; i++) {\n evt = Util.cloneObject(evt);\n evt.currentTarget = targets[i];\n handler.call(targets[i], evt);\n }\n });\n }\n remove() {\n if (this.isDragging()) {\n this.stopDrag();\n }\n DD._dragElements.delete(this._id);\n this._remove();\n return this;\n }\n _clearCaches() {\n this._clearSelfAndDescendantCache(ABSOLUTE_TRANSFORM);\n this._clearSelfAndDescendantCache(ABSOLUTE_OPACITY);\n this._clearSelfAndDescendantCache(ABSOLUTE_SCALE);\n this._clearSelfAndDescendantCache(STAGE);\n this._clearSelfAndDescendantCache(VISIBLE);\n this._clearSelfAndDescendantCache(LISTENING);\n }\n _remove() {\n this._clearCaches();\n var parent = this.getParent();\n if (parent && parent.children) {\n parent.children.splice(this.index, 1);\n parent._setChildrenIndices();\n this.parent = null;\n }\n }\n destroy() {\n this.remove();\n this.clearCache();\n return this;\n }\n getAttr(attr) {\n var method = 'get' + Util._capitalize(attr);\n if (Util._isFunction(this[method])) {\n return this[method]();\n }\n return this.attrs[attr];\n }\n getAncestors() {\n var parent = this.getParent(), ancestors = [];\n while (parent) {\n ancestors.push(parent);\n parent = parent.getParent();\n }\n return ancestors;\n }\n getAttrs() {\n return this.attrs || {};\n }\n setAttrs(config) {\n this._batchTransformChanges(() => {\n var key, method;\n if (!config) {\n return this;\n }\n for (key in config) {\n if (key === CHILDREN) {\n continue;\n }\n method = SET + Util._capitalize(key);\n if (Util._isFunction(this[method])) {\n this[method](config[key]);\n }\n else {\n this._setAttr(key, config[key]);\n }\n }\n });\n return this;\n }\n isListening() {\n return this._getCache(LISTENING, this._isListening);\n }\n _isListening(relativeTo) {\n const listening = this.listening();\n if (!listening) {\n return false;\n }\n const parent = this.getParent();\n if (parent && parent !== relativeTo && this !== relativeTo) {\n return parent._isListening(relativeTo);\n }\n else {\n return true;\n }\n }\n isVisible() {\n return this._getCache(VISIBLE, this._isVisible);\n }\n _isVisible(relativeTo) {\n const visible = this.visible();\n if (!visible) {\n return false;\n }\n const parent = this.getParent();\n if (parent && parent !== relativeTo && this !== relativeTo) {\n return parent._isVisible(relativeTo);\n }\n else {\n return true;\n }\n }\n shouldDrawHit(top, skipDragCheck = false) {\n if (top) {\n return this._isVisible(top) && this._isListening(top);\n }\n var layer = this.getLayer();\n var layerUnderDrag = false;\n DD._dragElements.forEach((elem) => {\n if (elem.dragStatus !== 'dragging') {\n return;\n }\n else if (elem.node.nodeType === 'Stage') {\n layerUnderDrag = true;\n }\n else if (elem.node.getLayer() === layer) {\n layerUnderDrag = true;\n }\n });\n var dragSkip = !skipDragCheck && !Konva.hitOnDragEnabled && layerUnderDrag;\n return this.isListening() && this.isVisible() && !dragSkip;\n }\n show() {\n this.visible(true);\n return this;\n }\n hide() {\n this.visible(false);\n return this;\n }\n getZIndex() {\n return this.index || 0;\n }\n getAbsoluteZIndex() {\n var depth = this.getDepth(), that = this, index = 0, nodes, len, n, child;\n function addChildren(children) {\n nodes = [];\n len = children.length;\n for (n = 0; n < len; n++) {\n child = children[n];\n index++;\n if (child.nodeType !== SHAPE) {\n nodes = nodes.concat(child.getChildren().slice());\n }\n if (child._id === that._id) {\n n = len;\n }\n }\n if (nodes.length > 0 && nodes[0].getDepth() <= depth) {\n addChildren(nodes);\n }\n }\n if (that.nodeType !== UPPER_STAGE) {\n addChildren(that.getStage().getChildren());\n }\n return index;\n }\n getDepth() {\n var depth = 0, parent = this.parent;\n while (parent) {\n depth++;\n parent = parent.parent;\n }\n return depth;\n }\n _batchTransformChanges(func) {\n this._batchingTransformChange = true;\n func();\n this._batchingTransformChange = false;\n if (this._needClearTransformCache) {\n this._clearCache(TRANSFORM);\n this._clearSelfAndDescendantCache(ABSOLUTE_TRANSFORM);\n }\n this._needClearTransformCache = false;\n }\n setPosition(pos) {\n this._batchTransformChanges(() => {\n this.x(pos.x);\n this.y(pos.y);\n });\n return this;\n }\n getPosition() {\n return {\n x: this.x(),\n y: this.y(),\n };\n }\n getRelativePointerPosition() {\n if (!this.getStage()) {\n return null;\n }\n var pos = this.getStage().getPointerPosition();\n if (!pos) {\n return null;\n }\n var transform = this.getAbsoluteTransform().copy();\n transform.invert();\n return transform.point(pos);\n }\n getAbsolutePosition(top) {\n let haveCachedParent = false;\n let parent = this.parent;\n while (parent) {\n if (parent.isCached()) {\n haveCachedParent = true;\n break;\n }\n parent = parent.parent;\n }\n if (haveCachedParent && !top) {\n top = true;\n }\n var absoluteMatrix = this.getAbsoluteTransform(top).getMatrix(), absoluteTransform = new Transform(), offset = this.offset();\n absoluteTransform.m = absoluteMatrix.slice();\n absoluteTransform.translate(offset.x, offset.y);\n return absoluteTransform.getTranslation();\n }\n setAbsolutePosition(pos) {\n var origTrans = this._clearTransform();\n this.attrs.x = origTrans.x;\n this.attrs.y = origTrans.y;\n delete origTrans.x;\n delete origTrans.y;\n this._clearCache(TRANSFORM);\n var it = this._getAbsoluteTransform().copy();\n it.invert();\n it.translate(pos.x, pos.y);\n pos = {\n x: this.attrs.x + it.getTranslation().x,\n y: this.attrs.y + it.getTranslation().y,\n };\n this._setTransform(origTrans);\n this.setPosition({ x: pos.x, y: pos.y });\n this._clearCache(TRANSFORM);\n this._clearSelfAndDescendantCache(ABSOLUTE_TRANSFORM);\n return this;\n }\n _setTransform(trans) {\n var key;\n for (key in trans) {\n this.attrs[key] = trans[key];\n }\n }\n _clearTransform() {\n var trans = {\n x: this.x(),\n y: this.y(),\n rotation: this.rotation(),\n scaleX: this.scaleX(),\n scaleY: this.scaleY(),\n offsetX: this.offsetX(),\n offsetY: this.offsetY(),\n skewX: this.skewX(),\n skewY: this.skewY(),\n };\n this.attrs.x = 0;\n this.attrs.y = 0;\n this.attrs.rotation = 0;\n this.attrs.scaleX = 1;\n this.attrs.scaleY = 1;\n this.attrs.offsetX = 0;\n this.attrs.offsetY = 0;\n this.attrs.skewX = 0;\n this.attrs.skewY = 0;\n return trans;\n }\n move(change) {\n var changeX = change.x, changeY = change.y, x = this.x(), y = this.y();\n if (changeX !== undefined) {\n x += changeX;\n }\n if (changeY !== undefined) {\n y += changeY;\n }\n this.setPosition({ x: x, y: y });\n return this;\n }\n _eachAncestorReverse(func, top) {\n var family = [], parent = this.getParent(), len, n;\n if (top && top._id === this._id) {\n return;\n }\n family.unshift(this);\n while (parent && (!top || parent._id !== top._id)) {\n family.unshift(parent);\n parent = parent.parent;\n }\n len = family.length;\n for (n = 0; n < len; n++) {\n func(family[n]);\n }\n }\n rotate(theta) {\n this.rotation(this.rotation() + theta);\n return this;\n }\n moveToTop() {\n if (!this.parent) {\n Util.warn('Node has no parent. moveToTop function is ignored.');\n return false;\n }\n var index = this.index, len = this.parent.getChildren().length;\n if (index < len - 1) {\n this.parent.children.splice(index, 1);\n this.parent.children.push(this);\n this.parent._setChildrenIndices();\n return true;\n }\n return false;\n }\n moveUp() {\n if (!this.parent) {\n Util.warn('Node has no parent. moveUp function is ignored.');\n return false;\n }\n var index = this.index, len = this.parent.getChildren().length;\n if (index < len - 1) {\n this.parent.children.splice(index, 1);\n this.parent.children.splice(index + 1, 0, this);\n this.parent._setChildrenIndices();\n return true;\n }\n return false;\n }\n moveDown() {\n if (!this.parent) {\n Util.warn('Node has no parent. moveDown function is ignored.');\n return false;\n }\n var index = this.index;\n if (index > 0) {\n this.parent.children.splice(index, 1);\n this.parent.children.splice(index - 1, 0, this);\n this.parent._setChildrenIndices();\n return true;\n }\n return false;\n }\n moveToBottom() {\n if (!this.parent) {\n Util.warn('Node has no parent. moveToBottom function is ignored.');\n return false;\n }\n var index = this.index;\n if (index > 0) {\n this.parent.children.splice(index, 1);\n this.parent.children.unshift(this);\n this.parent._setChildrenIndices();\n return true;\n }\n return false;\n }\n setZIndex(zIndex) {\n if (!this.parent) {\n Util.warn('Node has no parent. zIndex parameter is ignored.');\n return this;\n }\n if (zIndex < 0 || zIndex >= this.parent.children.length) {\n Util.warn('Unexpected value ' +\n zIndex +\n ' for zIndex property. zIndex is just index of a node in children of its parent. Expected value is from 0 to ' +\n (this.parent.children.length - 1) +\n '.');\n }\n var index = this.index;\n this.parent.children.splice(index, 1);\n this.parent.children.splice(zIndex, 0, this);\n this.parent._setChildrenIndices();\n return this;\n }\n getAbsoluteOpacity() {\n return this._getCache(ABSOLUTE_OPACITY, this._getAbsoluteOpacity);\n }\n _getAbsoluteOpacity() {\n var absOpacity = this.opacity();\n var parent = this.getParent();\n if (parent && !parent._isUnderCache) {\n absOpacity *= parent.getAbsoluteOpacity();\n }\n return absOpacity;\n }\n moveTo(newContainer) {\n if (this.getParent() !== newContainer) {\n this._remove();\n newContainer.add(this);\n }\n return this;\n }\n toObject() {\n var obj = {}, attrs = this.getAttrs(), key, val, getter, defaultValue, nonPlainObject;\n obj.attrs = {};\n for (key in attrs) {\n val = attrs[key];\n nonPlainObject =\n Util.isObject(val) && !Util._isPlainObject(val) && !Util._isArray(val);\n if (nonPlainObject) {\n continue;\n }\n getter = typeof this[key] === 'function' && this[key];\n delete attrs[key];\n defaultValue = getter ? getter.call(this) : null;\n attrs[key] = val;\n if (defaultValue !== val) {\n obj.attrs[key] = val;\n }\n }\n obj.className = this.getClassName();\n return Util._prepareToStringify(obj);\n }\n toJSON() {\n return JSON.stringify(this.toObject());\n }\n getParent() {\n return this.parent;\n }\n findAncestors(selector, includeSelf, stopNode) {\n var res = [];\n if (includeSelf && this._isMatch(selector)) {\n res.push(this);\n }\n var ancestor = this.parent;\n while (ancestor) {\n if (ancestor === stopNode) {\n return res;\n }\n if (ancestor._isMatch(selector)) {\n res.push(ancestor);\n }\n ancestor = ancestor.parent;\n }\n return res;\n }\n isAncestorOf(node) {\n return false;\n }\n findAncestor(selector, includeSelf, stopNode) {\n return this.findAncestors(selector, includeSelf, stopNode)[0];\n }\n _isMatch(selector) {\n if (!selector) {\n return false;\n }\n if (typeof selector === 'function') {\n return selector(this);\n }\n var selectorArr = selector.replace(/ /g, '').split(','), len = selectorArr.length, n, sel;\n for (n = 0; n < len; n++) {\n sel = selectorArr[n];\n if (!Util.isValidSelector(sel)) {\n Util.warn('Selector \"' +\n sel +\n '\" is invalid. Allowed selectors examples are \"#foo\", \".bar\" or \"Group\".');\n Util.warn('If you have a custom shape with such className, please change it to start with upper letter like \"Triangle\".');\n Util.warn('Konva is awesome, right?');\n }\n if (sel.charAt(0) === '#') {\n if (this.id() === sel.slice(1)) {\n return true;\n }\n }\n else if (sel.charAt(0) === '.') {\n if (this.hasName(sel.slice(1))) {\n return true;\n }\n }\n else if (this.className === sel || this.nodeType === sel) {\n return true;\n }\n }\n return false;\n }\n getLayer() {\n var parent = this.getParent();\n return parent ? parent.getLayer() : null;\n }\n getStage() {\n return this._getCache(STAGE, this._getStage);\n }\n _getStage() {\n var parent = this.getParent();\n if (parent) {\n return parent.getStage();\n }\n else {\n return undefined;\n }\n }\n fire(eventType, evt = {}, bubble) {\n evt.target = evt.target || this;\n if (bubble) {\n this._fireAndBubble(eventType, evt);\n }\n else {\n this._fire(eventType, evt);\n }\n return this;\n }\n getAbsoluteTransform(top) {\n if (top) {\n return this._getAbsoluteTransform(top);\n }\n else {\n return this._getCache(ABSOLUTE_TRANSFORM, this._getAbsoluteTransform);\n }\n }\n _getAbsoluteTransform(top) {\n var at;\n if (top) {\n at = new Transform();\n this._eachAncestorReverse(function (node) {\n var transformsEnabled = node.transformsEnabled();\n if (transformsEnabled === 'all') {\n at.multiply(node.getTransform());\n }\n else if (transformsEnabled === 'position') {\n at.translate(node.x() - node.offsetX(), node.y() - node.offsetY());\n }\n }, top);\n return at;\n }\n else {\n at = this._cache.get(ABSOLUTE_TRANSFORM) || new Transform();\n if (this.parent) {\n this.parent.getAbsoluteTransform().copyInto(at);\n }\n else {\n at.reset();\n }\n var transformsEnabled = this.transformsEnabled();\n if (transformsEnabled === 'all') {\n at.multiply(this.getTransform());\n }\n else if (transformsEnabled === 'position') {\n const x = this.attrs.x || 0;\n const y = this.attrs.y || 0;\n const offsetX = this.attrs.offsetX || 0;\n const offsetY = this.attrs.offsetY || 0;\n at.translate(x - offsetX, y - offsetY);\n }\n at.dirty = false;\n return at;\n }\n }\n getAbsoluteScale(top) {\n var parent = this;\n while (parent) {\n if (parent._isUnderCache) {\n top = parent;\n }\n parent = parent.getParent();\n }\n const transform = this.getAbsoluteTransform(top);\n const attrs = transform.decompose();\n return {\n x: attrs.scaleX,\n y: attrs.scaleY,\n };\n }\n getAbsoluteRotation() {\n return this.getAbsoluteTransform().decompose().rotation;\n }\n getTransform() {\n return this._getCache(TRANSFORM, this._getTransform);\n }\n _getTransform() {\n var _a, _b;\n var m = this._cache.get(TRANSFORM) || new Transform();\n m.reset();\n var x = this.x(), y = this.y(), rotation = Konva.getAngle(this.rotation()), scaleX = (_a = this.attrs.scaleX) !== null && _a !== void 0 ? _a : 1, scaleY = (_b = this.attrs.scaleY) !== null && _b !== void 0 ? _b : 1, skewX = this.attrs.skewX || 0, skewY = this.attrs.skewY || 0, offsetX = this.attrs.offsetX || 0, offsetY = this.attrs.offsetY || 0;\n if (x !== 0 || y !== 0) {\n m.translate(x, y);\n }\n if (rotation !== 0) {\n m.rotate(rotation);\n }\n if (skewX !== 0 || skewY !== 0) {\n m.skew(skewX, skewY);\n }\n if (scaleX !== 1 || scaleY !== 1) {\n m.scale(scaleX, scaleY);\n }\n if (offsetX !== 0 || offsetY !== 0) {\n m.translate(-1 * offsetX, -1 * offsetY);\n }\n m.dirty = false;\n return m;\n }\n clone(obj) {\n var attrs = Util.cloneObject(this.attrs), key, allListeners, len, n, listener;\n for (key in obj) {\n attrs[key] = obj[key];\n }\n var node = new this.constructor(attrs);\n for (key in this.eventListeners) {\n allListeners = this.eventListeners[key];\n len = allListeners.length;\n for (n = 0; n < len; n++) {\n listener = allListeners[n];\n if (listener.name.indexOf(KONVA) < 0) {\n if (!node.eventListeners[key]) {\n node.eventListeners[key] = [];\n }\n node.eventListeners[key].push(listener);\n }\n }\n }\n return node;\n }\n _toKonvaCanvas(config) {\n config = config || {};\n var box = this.getClientRect();\n var stage = this.getStage(), x = config.x !== undefined ? config.x : Math.floor(box.x), y = config.y !== undefined ? config.y : Math.floor(box.y), pixelRatio = config.pixelRatio || 1, canvas = new SceneCanvas({\n width: config.width || Math.ceil(box.width) || (stage ? stage.width() : 0),\n height: config.height ||\n Math.ceil(box.height) ||\n (stage ? stage.height() : 0),\n pixelRatio: pixelRatio,\n }), context = canvas.getContext();\n if (config.imageSmoothingEnabled === false) {\n context._context.imageSmoothingEnabled = false;\n }\n context.save();\n if (x || y) {\n context.translate(-1 * x, -1 * y);\n }\n this.drawScene(canvas);\n context.restore();\n return canvas;\n }\n toCanvas(config) {\n return this._toKonvaCanvas(config)._canvas;\n }\n toDataURL(config) {\n config = config || {};\n var mimeType = config.mimeType || null, quality = config.quality || null;\n var url = this._toKonvaCanvas(config).toDataURL(mimeType, quality);\n if (config.callback) {\n config.callback(url);\n }\n return url;\n }\n toImage(config) {\n return new Promise((resolve, reject) => {\n try {\n const callback = config === null || config === void 0 ? void 0 : config.callback;\n if (callback)\n delete config.callback;\n Util._urlToImage(this.toDataURL(config), function (img) {\n resolve(img);\n callback === null || callback === void 0 ? void 0 : callback(img);\n });\n }\n catch (err) {\n reject(err);\n }\n });\n }\n toBlob(config) {\n return new Promise((resolve, reject) => {\n try {\n const callback = config === null || config === void 0 ? void 0 : config.callback;\n if (callback)\n delete config.callback;\n this.toCanvas(config).toBlob((blob) => {\n resolve(blob);\n callback === null || callback === void 0 ? void 0 : callback(blob);\n });\n }\n catch (err) {\n reject(err);\n }\n });\n }\n setSize(size) {\n this.width(size.width);\n this.height(size.height);\n return this;\n }\n getSize() {\n return {\n width: this.width(),\n height: this.height(),\n };\n }\n getClassName() {\n return this.className || this.nodeType;\n }\n getType() {\n return this.nodeType;\n }\n getDragDistance() {\n if (this.attrs.dragDistance !== undefined) {\n return this.attrs.dragDistance;\n }\n else if (this.parent) {\n return this.parent.getDragDistance();\n }\n else {\n return Konva.dragDistance;\n }\n }\n _off(type, name, callback) {\n var evtListeners = this.eventListeners[type], i, evtName, handler;\n for (i = 0; i < evtListeners.length; i++) {\n evtName = evtListeners[i].name;\n handler = evtListeners[i].handler;\n if ((evtName !== 'konva' || name === 'konva') &&\n (!name || evtName === name) &&\n (!callback || callback === handler)) {\n evtListeners.splice(i, 1);\n if (evtListeners.length === 0) {\n delete this.eventListeners[type];\n break;\n }\n i--;\n }\n }\n }\n _fireChangeEvent(attr, oldVal, newVal) {\n this._fire(attr + CHANGE, {\n oldVal: oldVal,\n newVal: newVal,\n });\n }\n addName(name) {\n if (!this.hasName(name)) {\n var oldName = this.name();\n var newName = oldName ? oldName + ' ' + name : name;\n this.name(newName);\n }\n return this;\n }\n hasName(name) {\n if (!name) {\n return false;\n }\n const fullName = this.name();\n if (!fullName) {\n return false;\n }\n var names = (fullName || '').split(/\\s/g);\n return names.indexOf(name) !== -1;\n }\n removeName(name) {\n var names = (this.name() || '').split(/\\s/g);\n var index = names.indexOf(name);\n if (index !== -1) {\n names.splice(index, 1);\n this.name(names.join(' '));\n }\n return this;\n }\n setAttr(attr, val) {\n var func = this[SET + Util._capitalize(attr)];\n if (Util._isFunction(func)) {\n func.call(this, val);\n }\n else {\n this._setAttr(attr, val);\n }\n return this;\n }\n _requestDraw() {\n if (Konva.autoDrawEnabled) {\n const drawNode = this.getLayer() || this.getStage();\n drawNode === null || drawNode === void 0 ? void 0 : drawNode.batchDraw();\n }\n }\n _setAttr(key, val) {\n var oldVal = this.attrs[key];\n if (oldVal === val && !Util.isObject(val)) {\n return;\n }\n if (val === undefined || val === null) {\n delete this.attrs[key];\n }\n else {\n this.attrs[key] = val;\n }\n if (this._shouldFireChangeEvents) {\n this._fireChangeEvent(key, oldVal, val);\n }\n this._requestDraw();\n }\n _setComponentAttr(key, component, val) {\n var oldVal;\n if (val !== undefined) {\n oldVal = this.attrs[key];\n if (!oldVal) {\n this.attrs[key] = this.getAttr(key);\n }\n this.attrs[key][component] = val;\n this._fireChangeEvent(key, oldVal, val);\n }\n }\n _fireAndBubble(eventType, evt, compareShape) {\n if (evt && this.nodeType === SHAPE) {\n evt.target = this;\n }\n var shouldStop = (eventType === MOUSEENTER || eventType === MOUSELEAVE) &&\n ((compareShape &&\n (this === compareShape ||\n (this.isAncestorOf && this.isAncestorOf(compareShape)))) ||\n (this.nodeType === 'Stage' && !compareShape));\n if (!shouldStop) {\n this._fire(eventType, evt);\n var stopBubble = (eventType === MOUSEENTER || eventType === MOUSELEAVE) &&\n compareShape &&\n compareShape.isAncestorOf &&\n compareShape.isAncestorOf(this) &&\n !compareShape.isAncestorOf(this.parent);\n if (((evt && !evt.cancelBubble) || !evt) &&\n this.parent &&\n this.parent.isListening() &&\n !stopBubble) {\n if (compareShape && compareShape.parent) {\n this._fireAndBubble.call(this.parent, eventType, evt, compareShape);\n }\n else {\n this._fireAndBubble.call(this.parent, eventType, evt);\n }\n }\n }\n }\n _getProtoListeners(eventType) {\n let listeners = this._cache.get(ALL_LISTENERS);\n if (!listeners) {\n listeners = {};\n let obj = Object.getPrototypeOf(this);\n while (obj) {\n if (!obj.eventListeners) {\n obj = Object.getPrototypeOf(obj);\n continue;\n }\n for (var event in obj.eventListeners) {\n const newEvents = obj.eventListeners[event];\n const oldEvents = listeners[event] || [];\n listeners[event] = newEvents.concat(oldEvents);\n }\n obj = Object.getPrototypeOf(obj);\n }\n this._cache.set(ALL_LISTENERS, listeners);\n }\n return listeners[eventType];\n }\n _fire(eventType, evt) {\n evt = evt || {};\n evt.currentTarget = this;\n evt.type = eventType;\n const topListeners = this._getProtoListeners(eventType);\n if (topListeners) {\n for (var i = 0; i < topListeners.length; i++) {\n topListeners[i].handler.call(this, evt);\n }\n }\n const selfListeners = this.eventListeners[eventType];\n if (selfListeners) {\n for (var i = 0; i < selfListeners.length; i++) {\n selfListeners[i].handler.call(this, evt);\n }\n }\n }\n draw() {\n this.drawScene();\n this.drawHit();\n return this;\n }\n _createDragElement(evt) {\n var pointerId = evt ? evt.pointerId : undefined;\n var stage = this.getStage();\n var ap = this.getAbsolutePosition();\n var pos = stage._getPointerById(pointerId) ||\n stage._changedPointerPositions[0] ||\n ap;\n DD._dragElements.set(this._id, {\n node: this,\n startPointerPos: pos,\n offset: {\n x: pos.x - ap.x,\n y: pos.y - ap.y,\n },\n dragStatus: 'ready',\n pointerId,\n });\n }\n startDrag(evt, bubbleEvent = true) {\n if (!DD._dragElements.has(this._id)) {\n this._createDragElement(evt);\n }\n const elem = DD._dragElements.get(this._id);\n elem.dragStatus = 'dragging';\n this.fire('dragstart', {\n type: 'dragstart',\n target: this,\n evt: evt && evt.evt,\n }, bubbleEvent);\n }\n _setDragPosition(evt, elem) {\n const pos = this.getStage()._getPointerById(elem.pointerId);\n if (!pos) {\n return;\n }\n var newNodePos = {\n x: pos.x - elem.offset.x,\n y: pos.y - elem.offset.y,\n };\n var dbf = this.dragBoundFunc();\n if (dbf !== undefined) {\n const bounded = dbf.call(this, newNodePos, evt);\n if (!bounded) {\n Util.warn('dragBoundFunc did not return any value. That is unexpected behavior. You must return new absolute position from dragBoundFunc.');\n }\n else {\n newNodePos = bounded;\n }\n }\n if (!this._lastPos ||\n this._lastPos.x !== newNodePos.x ||\n this._lastPos.y !== newNodePos.y) {\n this.setAbsolutePosition(newNodePos);\n this._requestDraw();\n }\n this._lastPos = newNodePos;\n }\n stopDrag(evt) {\n const elem = DD._dragElements.get(this._id);\n if (elem) {\n elem.dragStatus = 'stopped';\n }\n DD._endDragBefore(evt);\n DD._endDragAfter(evt);\n }\n setDraggable(draggable) {\n this._setAttr('draggable', draggable);\n this._dragChange();\n }\n isDragging() {\n const elem = DD._dragElements.get(this._id);\n return elem ? elem.dragStatus === 'dragging' : false;\n }\n _listenDrag() {\n this._dragCleanup();\n this.on('mousedown.konva touchstart.konva', function (evt) {\n var shouldCheckButton = evt.evt['button'] !== undefined;\n var canDrag = !shouldCheckButton || Konva.dragButtons.indexOf(evt.evt['button']) >= 0;\n if (!canDrag) {\n return;\n }\n if (this.isDragging()) {\n return;\n }\n var hasDraggingChild = false;\n DD._dragElements.forEach((elem) => {\n if (this.isAncestorOf(elem.node)) {\n hasDraggingChild = true;\n }\n });\n if (!hasDraggingChild) {\n this._createDragElement(evt);\n }\n });\n }\n _dragChange() {\n if (this.attrs.draggable) {\n this._listenDrag();\n }\n else {\n this._dragCleanup();\n var stage = this.getStage();\n if (!stage) {\n return;\n }\n const dragElement = DD._dragElements.get(this._id);\n const isDragging = dragElement && dragElement.dragStatus === 'dragging';\n const isReady = dragElement && dragElement.dragStatus === 'ready';\n if (isDragging) {\n this.stopDrag();\n }\n else if (isReady) {\n DD._dragElements.delete(this._id);\n }\n }\n }\n _dragCleanup() {\n this.off('mousedown.konva');\n this.off('touchstart.konva');\n }\n isClientRectOnScreen(margin = { x: 0, y: 0 }) {\n const stage = this.getStage();\n if (!stage) {\n return false;\n }\n const screenRect = {\n x: -margin.x,\n y: -margin.y,\n width: stage.width() + 2 * margin.x,\n height: stage.height() + 2 * margin.y,\n };\n return Util.haveIntersection(screenRect, this.getClientRect());\n }\n static create(data, container) {\n if (Util._isString(data)) {\n data = JSON.parse(data);\n }\n return this._createNode(data, container);\n }\n static _createNode(obj, container) {\n var className = Node.prototype.getClassName.call(obj), children = obj.children, no, len, n;\n if (container) {\n obj.attrs.container = container;\n }\n if (!Konva[className]) {\n Util.warn('Can not find a node with class name \"' +\n className +\n '\". Fallback to \"Shape\".');\n className = 'Shape';\n }\n const Class = Konva[className];\n no = new Class(obj.attrs);\n if (children) {\n len = children.length;\n for (n = 0; n < len; n++) {\n no.add(Node._createNode(children[n]));\n }\n }\n return no;\n }\n}\nNode.prototype.nodeType = 'Node';\nNode.prototype._attrsAffectingSize = [];\nNode.prototype.eventListeners = {};\nNode.prototype.on.call(Node.prototype, TRANSFORM_CHANGE_STR, function () {\n if (this._batchingTransformChange) {\n this._needClearTransformCache = true;\n return;\n }\n this._clearCache(TRANSFORM);\n this._clearSelfAndDescendantCache(ABSOLUTE_TRANSFORM);\n});\nNode.prototype.on.call(Node.prototype, 'visibleChange.konva', function () {\n this._clearSelfAndDescendantCache(VISIBLE);\n});\nNode.prototype.on.call(Node.prototype, 'listeningChange.konva', function () {\n this._clearSelfAndDescendantCache(LISTENING);\n});\nNode.prototype.on.call(Node.prototype, 'opacityChange.konva', function () {\n this._clearSelfAndDescendantCache(ABSOLUTE_OPACITY);\n});\nconst addGetterSetter = Factory.addGetterSetter;\naddGetterSetter(Node, 'zIndex');\naddGetterSetter(Node, 'absolutePosition');\naddGetterSetter(Node, 'position');\naddGetterSetter(Node, 'x', 0, getNumberValidator());\naddGetterSetter(Node, 'y', 0, getNumberValidator());\naddGetterSetter(Node, 'globalCompositeOperation', 'source-over', getStringValidator());\naddGetterSetter(Node, 'opacity', 1, getNumberValidator());\naddGetterSetter(Node, 'name', '', getStringValidator());\naddGetterSetter(Node, 'id', '', getStringValidator());\naddGetterSetter(Node, 'rotation', 0, getNumberValidator());\nFactory.addComponentsGetterSetter(Node, 'scale', ['x', 'y']);\naddGetterSetter(Node, 'scaleX', 1, getNumberValidator());\naddGetterSetter(Node, 'scaleY', 1, getNumberValidator());\nFactory.addComponentsGetterSetter(Node, 'skew', ['x', 'y']);\naddGetterSetter(Node, 'skewX', 0, getNumberValidator());\naddGetterSetter(Node, 'skewY', 0, getNumberValidator());\nFactory.addComponentsGetterSetter(Node, 'offset', ['x', 'y']);\naddGetterSetter(Node, 'offsetX', 0, getNumberValidator());\naddGetterSetter(Node, 'offsetY', 0, getNumberValidator());\naddGetterSetter(Node, 'dragDistance', null, getNumberValidator());\naddGetterSetter(Node, 'width', 0, getNumberValidator());\naddGetterSetter(Node, 'height', 0, getNumberValidator());\naddGetterSetter(Node, 'listening', true, getBooleanValidator());\naddGetterSetter(Node, 'preventDefault', true, getBooleanValidator());\naddGetterSetter(Node, 'filters', null, function (val) {\n this._filterUpToDate = false;\n return val;\n});\naddGetterSetter(Node, 'visible', true, getBooleanValidator());\naddGetterSetter(Node, 'transformsEnabled', 'all', getStringValidator());\naddGetterSetter(Node, 'size');\naddGetterSetter(Node, 'dragBoundFunc');\naddGetterSetter(Node, 'draggable', false, getBooleanValidator());\nFactory.backCompat(Node, {\n rotateDeg: 'rotate',\n setRotationDeg: 'setRotation',\n getRotationDeg: 'getRotation',\n});\n","import { Factory } from './Factory.js';\nimport { Node } from './Node.js';\nimport { getNumberValidator } from './Validators.js';\nexport class Container extends Node {\n constructor() {\n super(...arguments);\n this.children = [];\n }\n getChildren(filterFunc) {\n if (!filterFunc) {\n return this.children || [];\n }\n const children = this.children || [];\n var results = [];\n children.forEach(function (child) {\n if (filterFunc(child)) {\n results.push(child);\n }\n });\n return results;\n }\n hasChildren() {\n return this.getChildren().length > 0;\n }\n removeChildren() {\n this.getChildren().forEach((child) => {\n child.parent = null;\n child.index = 0;\n child.remove();\n });\n this.children = [];\n this._requestDraw();\n return this;\n }\n destroyChildren() {\n this.getChildren().forEach((child) => {\n child.parent = null;\n child.index = 0;\n child.destroy();\n });\n this.children = [];\n this._requestDraw();\n return this;\n }\n add(...children) {\n if (arguments.length > 1) {\n for (var i = 0; i < arguments.length; i++) {\n this.add(arguments[i]);\n }\n return this;\n }\n var child = children[0];\n if (child.getParent()) {\n child.moveTo(this);\n return this;\n }\n this._validateAdd(child);\n child.index = this.getChildren().length;\n child.parent = this;\n child._clearCaches();\n this.getChildren().push(child);\n this._fire('add', {\n child: child,\n });\n this._requestDraw();\n return this;\n }\n destroy() {\n if (this.hasChildren()) {\n this.destroyChildren();\n }\n super.destroy();\n return this;\n }\n find(selector) {\n return this._generalFind(selector, false);\n }\n findOne(selector) {\n var result = this._generalFind(selector, true);\n return result.length > 0 ? result[0] : undefined;\n }\n _generalFind(selector, findOne) {\n var retArr = [];\n this._descendants((node) => {\n const valid = node._isMatch(selector);\n if (valid) {\n retArr.push(node);\n }\n if (valid && findOne) {\n return true;\n }\n return false;\n });\n return retArr;\n }\n _descendants(fn) {\n let shouldStop = false;\n const children = this.getChildren();\n for (const child of children) {\n shouldStop = fn(child);\n if (shouldStop) {\n return true;\n }\n if (!child.hasChildren()) {\n continue;\n }\n shouldStop = child._descendants(fn);\n if (shouldStop) {\n return true;\n }\n }\n return false;\n }\n toObject() {\n var obj = Node.prototype.toObject.call(this);\n obj.children = [];\n this.getChildren().forEach((child) => {\n obj.children.push(child.toObject());\n });\n return obj;\n }\n isAncestorOf(node) {\n var parent = node.getParent();\n while (parent) {\n if (parent._id === this._id) {\n return true;\n }\n parent = parent.getParent();\n }\n return false;\n }\n clone(obj) {\n var node = Node.prototype.clone.call(this, obj);\n this.getChildren().forEach(function (no) {\n node.add(no.clone());\n });\n return node;\n }\n getAllIntersections(pos) {\n var arr = [];\n this.find('Shape').forEach(function (shape) {\n if (shape.isVisible() && shape.intersects(pos)) {\n arr.push(shape);\n }\n });\n return arr;\n }\n _clearSelfAndDescendantCache(attr) {\n var _a;\n super._clearSelfAndDescendantCache(attr);\n if (this.isCached()) {\n return;\n }\n (_a = this.children) === null || _a === void 0 ? void 0 : _a.forEach(function (node) {\n node._clearSelfAndDescendantCache(attr);\n });\n }\n _setChildrenIndices() {\n var _a;\n (_a = this.children) === null || _a === void 0 ? void 0 : _a.forEach(function (child, n) {\n child.index = n;\n });\n this._requestDraw();\n }\n drawScene(can, top) {\n var layer = this.getLayer(), canvas = can || (layer && layer.getCanvas()), context = canvas && canvas.getContext(), cachedCanvas = this._getCanvasCache(), cachedSceneCanvas = cachedCanvas && cachedCanvas.scene;\n var caching = canvas && canvas.isCache;\n if (!this.isVisible() && !caching) {\n return this;\n }\n if (cachedSceneCanvas) {\n context.save();\n var m = this.getAbsoluteTransform(top).getMatrix();\n context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n this._drawCachedSceneCanvas(context);\n context.restore();\n }\n else {\n this._drawChildren('drawScene', canvas, top);\n }\n return this;\n }\n drawHit(can, top) {\n if (!this.shouldDrawHit(top)) {\n return this;\n }\n var layer = this.getLayer(), canvas = can || (layer && layer.hitCanvas), context = canvas && canvas.getContext(), cachedCanvas = this._getCanvasCache(), cachedHitCanvas = cachedCanvas && cachedCanvas.hit;\n if (cachedHitCanvas) {\n context.save();\n var m = this.getAbsoluteTransform(top).getMatrix();\n context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n this._drawCachedHitCanvas(context);\n context.restore();\n }\n else {\n this._drawChildren('drawHit', canvas, top);\n }\n return this;\n }\n _drawChildren(drawMethod, canvas, top) {\n var _a;\n var context = canvas && canvas.getContext(), clipWidth = this.clipWidth(), clipHeight = this.clipHeight(), clipFunc = this.clipFunc(), hasClip = (clipWidth && clipHeight) || clipFunc;\n const selfCache = top === this;\n if (hasClip) {\n context.save();\n var transform = this.getAbsoluteTransform(top);\n var m = transform.getMatrix();\n context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n context.beginPath();\n if (clipFunc) {\n clipFunc.call(this, context, this);\n }\n else {\n var clipX = this.clipX();\n var clipY = this.clipY();\n context.rect(clipX, clipY, clipWidth, clipHeight);\n }\n context.clip();\n m = transform.copy().invert().getMatrix();\n context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n var hasComposition = !selfCache &&\n this.globalCompositeOperation() !== 'source-over' &&\n drawMethod === 'drawScene';\n if (hasComposition) {\n context.save();\n context._applyGlobalCompositeOperation(this);\n }\n (_a = this.children) === null || _a === void 0 ? void 0 : _a.forEach(function (child) {\n child[drawMethod](canvas, top);\n });\n if (hasComposition) {\n context.restore();\n }\n if (hasClip) {\n context.restore();\n }\n }\n getClientRect(config) {\n var _a;\n config = config || {};\n var skipTransform = config.skipTransform;\n var relativeTo = config.relativeTo;\n var minX, minY, maxX, maxY;\n var selfRect = {\n x: Infinity,\n y: Infinity,\n width: 0,\n height: 0,\n };\n var that = this;\n (_a = this.children) === null || _a === void 0 ? void 0 : _a.forEach(function (child) {\n if (!child.visible()) {\n return;\n }\n var rect = child.getClientRect({\n relativeTo: that,\n skipShadow: config.skipShadow,\n skipStroke: config.skipStroke,\n });\n if (rect.width === 0 && rect.height === 0) {\n return;\n }\n if (minX === undefined) {\n minX = rect.x;\n minY = rect.y;\n maxX = rect.x + rect.width;\n maxY = rect.y + rect.height;\n }\n else {\n minX = Math.min(minX, rect.x);\n minY = Math.min(minY, rect.y);\n maxX = Math.max(maxX, rect.x + rect.width);\n maxY = Math.max(maxY, rect.y + rect.height);\n }\n });\n var shapes = this.find('Shape');\n var hasVisible = false;\n for (var i = 0; i < shapes.length; i++) {\n var shape = shapes[i];\n if (shape._isVisible(this)) {\n hasVisible = true;\n break;\n }\n }\n if (hasVisible && minX !== undefined) {\n selfRect = {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n }\n else {\n selfRect = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n };\n }\n if (!skipTransform) {\n return this._transformedRect(selfRect, relativeTo);\n }\n return selfRect;\n }\n}\nFactory.addComponentsGetterSetter(Container, 'clip', [\n 'x',\n 'y',\n 'width',\n 'height',\n]);\nFactory.addGetterSetter(Container, 'clipX', undefined, getNumberValidator());\nFactory.addGetterSetter(Container, 'clipY', undefined, getNumberValidator());\nFactory.addGetterSetter(Container, 'clipWidth', undefined, getNumberValidator());\nFactory.addGetterSetter(Container, 'clipHeight', undefined, getNumberValidator());\nFactory.addGetterSetter(Container, 'clipFunc');\n","import { Konva } from './Global.js';\nconst Captures = new Map();\nconst SUPPORT_POINTER_EVENTS = Konva._global['PointerEvent'] !== undefined;\nexport function getCapturedShape(pointerId) {\n return Captures.get(pointerId);\n}\nexport function createEvent(evt) {\n return {\n evt,\n pointerId: evt.pointerId,\n };\n}\nexport function hasPointerCapture(pointerId, shape) {\n return Captures.get(pointerId) === shape;\n}\nexport function setPointerCapture(pointerId, shape) {\n releaseCapture(pointerId);\n const stage = shape.getStage();\n if (!stage)\n return;\n Captures.set(pointerId, shape);\n if (SUPPORT_POINTER_EVENTS) {\n shape._fire('gotpointercapture', createEvent(new PointerEvent('gotpointercapture')));\n }\n}\nexport function releaseCapture(pointerId, target) {\n const shape = Captures.get(pointerId);\n if (!shape)\n return;\n const stage = shape.getStage();\n if (stage && stage.content) {\n }\n Captures.delete(pointerId);\n if (SUPPORT_POINTER_EVENTS) {\n shape._fire('lostpointercapture', createEvent(new PointerEvent('lostpointercapture')));\n }\n}\n","import { Util } from './Util.js';\nimport { Factory } from './Factory.js';\nimport { Container } from './Container.js';\nimport { Konva } from './Global.js';\nimport { SceneCanvas, HitCanvas } from './Canvas.js';\nimport { DD } from './DragAndDrop.js';\nimport { _registerNode } from './Global.js';\nimport * as PointerEvents from './PointerEvents.js';\nvar STAGE = 'Stage', STRING = 'string', PX = 'px', MOUSEOUT = 'mouseout', MOUSELEAVE = 'mouseleave', MOUSEOVER = 'mouseover', MOUSEENTER = 'mouseenter', MOUSEMOVE = 'mousemove', MOUSEDOWN = 'mousedown', MOUSEUP = 'mouseup', POINTERMOVE = 'pointermove', POINTERDOWN = 'pointerdown', POINTERUP = 'pointerup', POINTERCANCEL = 'pointercancel', LOSTPOINTERCAPTURE = 'lostpointercapture', POINTEROUT = 'pointerout', POINTERLEAVE = 'pointerleave', POINTEROVER = 'pointerover', POINTERENTER = 'pointerenter', CONTEXTMENU = 'contextmenu', TOUCHSTART = 'touchstart', TOUCHEND = 'touchend', TOUCHMOVE = 'touchmove', TOUCHCANCEL = 'touchcancel', WHEEL = 'wheel', MAX_LAYERS_NUMBER = 5, EVENTS = [\n [MOUSEENTER, '_pointerenter'],\n [MOUSEDOWN, '_pointerdown'],\n [MOUSEMOVE, '_pointermove'],\n [MOUSEUP, '_pointerup'],\n [MOUSELEAVE, '_pointerleave'],\n [TOUCHSTART, '_pointerdown'],\n [TOUCHMOVE, '_pointermove'],\n [TOUCHEND, '_pointerup'],\n [TOUCHCANCEL, '_pointercancel'],\n [MOUSEOVER, '_pointerover'],\n [WHEEL, '_wheel'],\n [CONTEXTMENU, '_contextmenu'],\n [POINTERDOWN, '_pointerdown'],\n [POINTERMOVE, '_pointermove'],\n [POINTERUP, '_pointerup'],\n [POINTERCANCEL, '_pointercancel'],\n [LOSTPOINTERCAPTURE, '_lostpointercapture'],\n];\nconst EVENTS_MAP = {\n mouse: {\n [POINTEROUT]: MOUSEOUT,\n [POINTERLEAVE]: MOUSELEAVE,\n [POINTEROVER]: MOUSEOVER,\n [POINTERENTER]: MOUSEENTER,\n [POINTERMOVE]: MOUSEMOVE,\n [POINTERDOWN]: MOUSEDOWN,\n [POINTERUP]: MOUSEUP,\n [POINTERCANCEL]: 'mousecancel',\n pointerclick: 'click',\n pointerdblclick: 'dblclick',\n },\n touch: {\n [POINTEROUT]: 'touchout',\n [POINTERLEAVE]: 'touchleave',\n [POINTEROVER]: 'touchover',\n [POINTERENTER]: 'touchenter',\n [POINTERMOVE]: TOUCHMOVE,\n [POINTERDOWN]: TOUCHSTART,\n [POINTERUP]: TOUCHEND,\n [POINTERCANCEL]: TOUCHCANCEL,\n pointerclick: 'tap',\n pointerdblclick: 'dbltap',\n },\n pointer: {\n [POINTEROUT]: POINTEROUT,\n [POINTERLEAVE]: POINTERLEAVE,\n [POINTEROVER]: POINTEROVER,\n [POINTERENTER]: POINTERENTER,\n [POINTERMOVE]: POINTERMOVE,\n [POINTERDOWN]: POINTERDOWN,\n [POINTERUP]: POINTERUP,\n [POINTERCANCEL]: POINTERCANCEL,\n pointerclick: 'pointerclick',\n pointerdblclick: 'pointerdblclick',\n },\n};\nconst getEventType = (type) => {\n if (type.indexOf('pointer') >= 0) {\n return 'pointer';\n }\n if (type.indexOf('touch') >= 0) {\n return 'touch';\n }\n return 'mouse';\n};\nconst getEventsMap = (eventType) => {\n const type = getEventType(eventType);\n if (type === 'pointer') {\n return Konva.pointerEventsEnabled && EVENTS_MAP.pointer;\n }\n if (type === 'touch') {\n return EVENTS_MAP.touch;\n }\n if (type === 'mouse') {\n return EVENTS_MAP.mouse;\n }\n};\nfunction checkNoClip(attrs = {}) {\n if (attrs.clipFunc || attrs.clipWidth || attrs.clipHeight) {\n Util.warn('Stage does not support clipping. Please use clip for Layers or Groups.');\n }\n return attrs;\n}\nconst NO_POINTERS_MESSAGE = `Pointer position is missing and not registered by the stage. Looks like it is outside of the stage container. You can set it manually from event: stage.setPointersPositions(event);`;\nexport const stages = [];\nexport class Stage extends Container {\n constructor(config) {\n super(checkNoClip(config));\n this._pointerPositions = [];\n this._changedPointerPositions = [];\n this._buildDOM();\n this._bindContentEvents();\n stages.push(this);\n this.on('widthChange.konva heightChange.konva', this._resizeDOM);\n this.on('visibleChange.konva', this._checkVisibility);\n this.on('clipWidthChange.konva clipHeightChange.konva clipFuncChange.konva', () => {\n checkNoClip(this.attrs);\n });\n this._checkVisibility();\n }\n _validateAdd(child) {\n const isLayer = child.getType() === 'Layer';\n const isFastLayer = child.getType() === 'FastLayer';\n const valid = isLayer || isFastLayer;\n if (!valid) {\n Util.throw('You may only add layers to the stage.');\n }\n }\n _checkVisibility() {\n if (!this.content) {\n return;\n }\n const style = this.visible() ? '' : 'none';\n this.content.style.display = style;\n }\n setContainer(container) {\n if (typeof container === STRING) {\n if (container.charAt(0) === '.') {\n var className = container.slice(1);\n container = document.getElementsByClassName(className)[0];\n }\n else {\n var id;\n if (container.charAt(0) !== '#') {\n id = container;\n }\n else {\n id = container.slice(1);\n }\n container = document.getElementById(id);\n }\n if (!container) {\n throw 'Can not find container in document with id ' + id;\n }\n }\n this._setAttr('container', container);\n if (this.content) {\n if (this.content.parentElement) {\n this.content.parentElement.removeChild(this.content);\n }\n container.appendChild(this.content);\n }\n return this;\n }\n shouldDrawHit() {\n return true;\n }\n clear() {\n var layers = this.children, len = layers.length, n;\n for (n = 0; n < len; n++) {\n layers[n].clear();\n }\n return this;\n }\n clone(obj) {\n if (!obj) {\n obj = {};\n }\n obj.container =\n typeof document !== 'undefined' && document.createElement('div');\n return Container.prototype.clone.call(this, obj);\n }\n destroy() {\n super.destroy();\n var content = this.content;\n if (content && Util._isInDocument(content)) {\n this.container().removeChild(content);\n }\n var index = stages.indexOf(this);\n if (index > -1) {\n stages.splice(index, 1);\n }\n Util.releaseCanvas(this.bufferCanvas._canvas, this.bufferHitCanvas._canvas);\n return this;\n }\n getPointerPosition() {\n const pos = this._pointerPositions[0] || this._changedPointerPositions[0];\n if (!pos) {\n Util.warn(NO_POINTERS_MESSAGE);\n return null;\n }\n return {\n x: pos.x,\n y: pos.y,\n };\n }\n _getPointerById(id) {\n return this._pointerPositions.find((p) => p.id === id);\n }\n getPointersPositions() {\n return this._pointerPositions;\n }\n getStage() {\n return this;\n }\n getContent() {\n return this.content;\n }\n _toKonvaCanvas(config) {\n config = config || {};\n config.x = config.x || 0;\n config.y = config.y || 0;\n config.width = config.width || this.width();\n config.height = config.height || this.height();\n var canvas = new SceneCanvas({\n width: config.width,\n height: config.height,\n pixelRatio: config.pixelRatio || 1,\n });\n var _context = canvas.getContext()._context;\n var layers = this.children;\n if (config.x || config.y) {\n _context.translate(-1 * config.x, -1 * config.y);\n }\n layers.forEach(function (layer) {\n if (!layer.isVisible()) {\n return;\n }\n var layerCanvas = layer._toKonvaCanvas(config);\n _context.drawImage(layerCanvas._canvas, config.x, config.y, layerCanvas.getWidth() / layerCanvas.getPixelRatio(), layerCanvas.getHeight() / layerCanvas.getPixelRatio());\n });\n return canvas;\n }\n getIntersection(pos) {\n if (!pos) {\n return null;\n }\n var layers = this.children, len = layers.length, end = len - 1, n;\n for (n = end; n >= 0; n--) {\n const shape = layers[n].getIntersection(pos);\n if (shape) {\n return shape;\n }\n }\n return null;\n }\n _resizeDOM() {\n var width = this.width();\n var height = this.height();\n if (this.content) {\n this.content.style.width = width + PX;\n this.content.style.height = height + PX;\n }\n this.bufferCanvas.setSize(width, height);\n this.bufferHitCanvas.setSize(width, height);\n this.children.forEach((layer) => {\n layer.setSize({ width, height });\n layer.draw();\n });\n }\n add(layer, ...rest) {\n if (arguments.length > 1) {\n for (var i = 0; i < arguments.length; i++) {\n this.add(arguments[i]);\n }\n return this;\n }\n super.add(layer);\n var length = this.children.length;\n if (length > MAX_LAYERS_NUMBER) {\n Util.warn('The stage has ' +\n length +\n ' layers. Recommended maximum number of layers is 3-5. Adding more layers into the stage may drop the performance. Rethink your tree structure, you can use Konva.Group.');\n }\n layer.setSize({ width: this.width(), height: this.height() });\n layer.draw();\n if (Konva.isBrowser) {\n this.content.appendChild(layer.canvas._canvas);\n }\n return this;\n }\n getParent() {\n return null;\n }\n getLayer() {\n return null;\n }\n hasPointerCapture(pointerId) {\n return PointerEvents.hasPointerCapture(pointerId, this);\n }\n setPointerCapture(pointerId) {\n PointerEvents.setPointerCapture(pointerId, this);\n }\n releaseCapture(pointerId) {\n PointerEvents.releaseCapture(pointerId, this);\n }\n getLayers() {\n return this.children;\n }\n _bindContentEvents() {\n if (!Konva.isBrowser) {\n return;\n }\n EVENTS.forEach(([event, methodName]) => {\n this.content.addEventListener(event, (evt) => {\n this[methodName](evt);\n }, { passive: false });\n });\n }\n _pointerenter(evt) {\n this.setPointersPositions(evt);\n const events = getEventsMap(evt.type);\n this._fire(events.pointerenter, {\n evt: evt,\n target: this,\n currentTarget: this,\n });\n }\n _pointerover(evt) {\n this.setPointersPositions(evt);\n const events = getEventsMap(evt.type);\n this._fire(events.pointerover, {\n evt: evt,\n target: this,\n currentTarget: this,\n });\n }\n _getTargetShape(evenType) {\n let shape = this[evenType + 'targetShape'];\n if (shape && !shape.getStage()) {\n shape = null;\n }\n return shape;\n }\n _pointerleave(evt) {\n const events = getEventsMap(evt.type);\n const eventType = getEventType(evt.type);\n if (!events) {\n return;\n }\n this.setPointersPositions(evt);\n var targetShape = this._getTargetShape(eventType);\n var eventsEnabled = !DD.isDragging || Konva.hitOnDragEnabled;\n if (targetShape && eventsEnabled) {\n targetShape._fireAndBubble(events.pointerout, { evt: evt });\n targetShape._fireAndBubble(events.pointerleave, { evt: evt });\n this._fire(events.pointerleave, {\n evt: evt,\n target: this,\n currentTarget: this,\n });\n this[eventType + 'targetShape'] = null;\n }\n else if (eventsEnabled) {\n this._fire(events.pointerleave, {\n evt: evt,\n target: this,\n currentTarget: this,\n });\n this._fire(events.pointerout, {\n evt: evt,\n target: this,\n currentTarget: this,\n });\n }\n this.pointerPos = undefined;\n this._pointerPositions = [];\n }\n _pointerdown(evt) {\n const events = getEventsMap(evt.type);\n const eventType = getEventType(evt.type);\n if (!events) {\n return;\n }\n this.setPointersPositions(evt);\n var triggeredOnShape = false;\n this._changedPointerPositions.forEach((pos) => {\n var shape = this.getIntersection(pos);\n DD.justDragged = false;\n Konva['_' + eventType + 'ListenClick'] = true;\n const hasShape = shape && shape.isListening();\n if (!hasShape) {\n return;\n }\n if (Konva.capturePointerEventsEnabled) {\n shape.setPointerCapture(pos.id);\n }\n this[eventType + 'ClickStartShape'] = shape;\n shape._fireAndBubble(events.pointerdown, {\n evt: evt,\n pointerId: pos.id,\n });\n triggeredOnShape = true;\n const isTouch = evt.type.indexOf('touch') >= 0;\n if (shape.preventDefault() && evt.cancelable && isTouch) {\n evt.preventDefault();\n }\n });\n if (!triggeredOnShape) {\n this._fire(events.pointerdown, {\n evt: evt,\n target: this,\n currentTarget: this,\n pointerId: this._pointerPositions[0].id,\n });\n }\n }\n _pointermove(evt) {\n const events = getEventsMap(evt.type);\n const eventType = getEventType(evt.type);\n if (!events) {\n return;\n }\n if (DD.isDragging && DD.node.preventDefault() && evt.cancelable) {\n evt.preventDefault();\n }\n this.setPointersPositions(evt);\n var eventsEnabled = !DD.isDragging || Konva.hitOnDragEnabled;\n if (!eventsEnabled) {\n return;\n }\n var processedShapesIds = {};\n let triggeredOnShape = false;\n var targetShape = this._getTargetShape(eventType);\n this._changedPointerPositions.forEach((pos) => {\n const shape = (PointerEvents.getCapturedShape(pos.id) ||\n this.getIntersection(pos));\n const pointerId = pos.id;\n const event = { evt: evt, pointerId };\n var differentTarget = targetShape !== shape;\n if (differentTarget && targetShape) {\n targetShape._fireAndBubble(events.pointerout, Object.assign({}, event), shape);\n targetShape._fireAndBubble(events.pointerleave, Object.assign({}, event), shape);\n }\n if (shape) {\n if (processedShapesIds[shape._id]) {\n return;\n }\n processedShapesIds[shape._id] = true;\n }\n if (shape && shape.isListening()) {\n triggeredOnShape = true;\n if (differentTarget) {\n shape._fireAndBubble(events.pointerover, Object.assign({}, event), targetShape);\n shape._fireAndBubble(events.pointerenter, Object.assign({}, event), targetShape);\n this[eventType + 'targetShape'] = shape;\n }\n shape._fireAndBubble(events.pointermove, Object.assign({}, event));\n }\n else {\n if (targetShape) {\n this._fire(events.pointerover, {\n evt: evt,\n target: this,\n currentTarget: this,\n pointerId,\n });\n this[eventType + 'targetShape'] = null;\n }\n }\n });\n if (!triggeredOnShape) {\n this._fire(events.pointermove, {\n evt: evt,\n target: this,\n currentTarget: this,\n pointerId: this._changedPointerPositions[0].id,\n });\n }\n }\n _pointerup(evt) {\n const events = getEventsMap(evt.type);\n const eventType = getEventType(evt.type);\n if (!events) {\n return;\n }\n this.setPointersPositions(evt);\n const clickStartShape = this[eventType + 'ClickStartShape'];\n const clickEndShape = this[eventType + 'ClickEndShape'];\n var processedShapesIds = {};\n let triggeredOnShape = false;\n this._changedPointerPositions.forEach((pos) => {\n const shape = (PointerEvents.getCapturedShape(pos.id) ||\n this.getIntersection(pos));\n if (shape) {\n shape.releaseCapture(pos.id);\n if (processedShapesIds[shape._id]) {\n return;\n }\n processedShapesIds[shape._id] = true;\n }\n const pointerId = pos.id;\n const event = { evt: evt, pointerId };\n let fireDblClick = false;\n if (Konva['_' + eventType + 'InDblClickWindow']) {\n fireDblClick = true;\n clearTimeout(this[eventType + 'DblTimeout']);\n }\n else if (!DD.justDragged) {\n Konva['_' + eventType + 'InDblClickWindow'] = true;\n clearTimeout(this[eventType + 'DblTimeout']);\n }\n this[eventType + 'DblTimeout'] = setTimeout(function () {\n Konva['_' + eventType + 'InDblClickWindow'] = false;\n }, Konva.dblClickWindow);\n if (shape && shape.isListening()) {\n triggeredOnShape = true;\n this[eventType + 'ClickEndShape'] = shape;\n shape._fireAndBubble(events.pointerup, Object.assign({}, event));\n if (Konva['_' + eventType + 'ListenClick'] &&\n clickStartShape &&\n clickStartShape === shape) {\n shape._fireAndBubble(events.pointerclick, Object.assign({}, event));\n if (fireDblClick && clickEndShape && clickEndShape === shape) {\n shape._fireAndBubble(events.pointerdblclick, Object.assign({}, event));\n }\n }\n }\n else {\n this[eventType + 'ClickEndShape'] = null;\n if (Konva['_' + eventType + 'ListenClick']) {\n this._fire(events.pointerclick, {\n evt: evt,\n target: this,\n currentTarget: this,\n pointerId,\n });\n }\n if (fireDblClick) {\n this._fire(events.pointerdblclick, {\n evt: evt,\n target: this,\n currentTarget: this,\n pointerId,\n });\n }\n }\n });\n if (!triggeredOnShape) {\n this._fire(events.pointerup, {\n evt: evt,\n target: this,\n currentTarget: this,\n pointerId: this._changedPointerPositions[0].id,\n });\n }\n Konva['_' + eventType + 'ListenClick'] = false;\n if (evt.cancelable && eventType !== 'touch') {\n evt.preventDefault();\n }\n }\n _contextmenu(evt) {\n this.setPointersPositions(evt);\n var shape = this.getIntersection(this.getPointerPosition());\n if (shape && shape.isListening()) {\n shape._fireAndBubble(CONTEXTMENU, { evt: evt });\n }\n else {\n this._fire(CONTEXTMENU, {\n evt: evt,\n target: this,\n currentTarget: this,\n });\n }\n }\n _wheel(evt) {\n this.setPointersPositions(evt);\n var shape = this.getIntersection(this.getPointerPosition());\n if (shape && shape.isListening()) {\n shape._fireAndBubble(WHEEL, { evt: evt });\n }\n else {\n this._fire(WHEEL, {\n evt: evt,\n target: this,\n currentTarget: this,\n });\n }\n }\n _pointercancel(evt) {\n this.setPointersPositions(evt);\n const shape = PointerEvents.getCapturedShape(evt.pointerId) ||\n this.getIntersection(this.getPointerPosition());\n if (shape) {\n shape._fireAndBubble(POINTERUP, PointerEvents.createEvent(evt));\n }\n PointerEvents.releaseCapture(evt.pointerId);\n }\n _lostpointercapture(evt) {\n PointerEvents.releaseCapture(evt.pointerId);\n }\n setPointersPositions(evt) {\n var contentPosition = this._getContentPosition(), x = null, y = null;\n evt = evt ? evt : window.event;\n if (evt.touches !== undefined) {\n this._pointerPositions = [];\n this._changedPointerPositions = [];\n Array.prototype.forEach.call(evt.touches, (touch) => {\n this._pointerPositions.push({\n id: touch.identifier,\n x: (touch.clientX - contentPosition.left) / contentPosition.scaleX,\n y: (touch.clientY - contentPosition.top) / contentPosition.scaleY,\n });\n });\n Array.prototype.forEach.call(evt.changedTouches || evt.touches, (touch) => {\n this._changedPointerPositions.push({\n id: touch.identifier,\n x: (touch.clientX - contentPosition.left) / contentPosition.scaleX,\n y: (touch.clientY - contentPosition.top) / contentPosition.scaleY,\n });\n });\n }\n else {\n x = (evt.clientX - contentPosition.left) / contentPosition.scaleX;\n y = (evt.clientY - contentPosition.top) / contentPosition.scaleY;\n this.pointerPos = {\n x: x,\n y: y,\n };\n this._pointerPositions = [{ x, y, id: Util._getFirstPointerId(evt) }];\n this._changedPointerPositions = [\n { x, y, id: Util._getFirstPointerId(evt) },\n ];\n }\n }\n _setPointerPosition(evt) {\n Util.warn('Method _setPointerPosition is deprecated. Use \"stage.setPointersPositions(event)\" instead.');\n this.setPointersPositions(evt);\n }\n _getContentPosition() {\n if (!this.content || !this.content.getBoundingClientRect) {\n return {\n top: 0,\n left: 0,\n scaleX: 1,\n scaleY: 1,\n };\n }\n var rect = this.content.getBoundingClientRect();\n return {\n top: rect.top,\n left: rect.left,\n scaleX: rect.width / this.content.clientWidth || 1,\n scaleY: rect.height / this.content.clientHeight || 1,\n };\n }\n _buildDOM() {\n this.bufferCanvas = new SceneCanvas({\n width: this.width(),\n height: this.height(),\n });\n this.bufferHitCanvas = new HitCanvas({\n pixelRatio: 1,\n width: this.width(),\n height: this.height(),\n });\n if (!Konva.isBrowser) {\n return;\n }\n var container = this.container();\n if (!container) {\n throw 'Stage has no container. A container is required.';\n }\n container.innerHTML = '';\n this.content = document.createElement('div');\n this.content.style.position = 'relative';\n this.content.style.userSelect = 'none';\n this.content.className = 'konvajs-content';\n this.content.setAttribute('role', 'presentation');\n container.appendChild(this.content);\n this._resizeDOM();\n }\n cache() {\n Util.warn('Cache function is not allowed for stage. You may use cache only for layers, groups and shapes.');\n return this;\n }\n clearCache() {\n return this;\n }\n batchDraw() {\n this.getChildren().forEach(function (layer) {\n layer.batchDraw();\n });\n return this;\n }\n}\nStage.prototype.nodeType = STAGE;\n_registerNode(Stage);\nFactory.addGetterSetter(Stage, 'container');\n","import { Konva } from './Global.js';\nimport { Transform, Util } from './Util.js';\nimport { Factory } from './Factory.js';\nimport { Node } from './Node.js';\nimport { getNumberValidator, getNumberOrAutoValidator, getStringValidator, getBooleanValidator, getStringOrGradientValidator, } from './Validators.js';\nimport { _registerNode } from './Global.js';\nimport * as PointerEvents from './PointerEvents.js';\nvar HAS_SHADOW = 'hasShadow';\nvar SHADOW_RGBA = 'shadowRGBA';\nvar patternImage = 'patternImage';\nvar linearGradient = 'linearGradient';\nvar radialGradient = 'radialGradient';\nlet dummyContext;\nfunction getDummyContext() {\n if (dummyContext) {\n return dummyContext;\n }\n dummyContext = Util.createCanvasElement().getContext('2d');\n return dummyContext;\n}\nexport const shapes = {};\nfunction _fillFunc(context) {\n context.fill();\n}\nfunction _strokeFunc(context) {\n context.stroke();\n}\nfunction _fillFuncHit(context) {\n context.fill();\n}\nfunction _strokeFuncHit(context) {\n context.stroke();\n}\nfunction _clearHasShadowCache() {\n this._clearCache(HAS_SHADOW);\n}\nfunction _clearGetShadowRGBACache() {\n this._clearCache(SHADOW_RGBA);\n}\nfunction _clearFillPatternCache() {\n this._clearCache(patternImage);\n}\nfunction _clearLinearGradientCache() {\n this._clearCache(linearGradient);\n}\nfunction _clearRadialGradientCache() {\n this._clearCache(radialGradient);\n}\nexport class Shape extends Node {\n constructor(config) {\n super(config);\n let key;\n while (true) {\n key = Util.getRandomColor();\n if (key && !(key in shapes)) {\n break;\n }\n }\n this.colorKey = key;\n shapes[key] = this;\n }\n getContext() {\n Util.warn('shape.getContext() method is deprecated. Please do not use it.');\n return this.getLayer().getContext();\n }\n getCanvas() {\n Util.warn('shape.getCanvas() method is deprecated. Please do not use it.');\n return this.getLayer().getCanvas();\n }\n getSceneFunc() {\n return this.attrs.sceneFunc || this['_sceneFunc'];\n }\n getHitFunc() {\n return this.attrs.hitFunc || this['_hitFunc'];\n }\n hasShadow() {\n return this._getCache(HAS_SHADOW, this._hasShadow);\n }\n _hasShadow() {\n return (this.shadowEnabled() &&\n this.shadowOpacity() !== 0 &&\n !!(this.shadowColor() ||\n this.shadowBlur() ||\n this.shadowOffsetX() ||\n this.shadowOffsetY()));\n }\n _getFillPattern() {\n return this._getCache(patternImage, this.__getFillPattern);\n }\n __getFillPattern() {\n if (this.fillPatternImage()) {\n var ctx = getDummyContext();\n const pattern = ctx.createPattern(this.fillPatternImage(), this.fillPatternRepeat() || 'repeat');\n if (pattern && pattern.setTransform) {\n const tr = new Transform();\n tr.translate(this.fillPatternX(), this.fillPatternY());\n tr.rotate(Konva.getAngle(this.fillPatternRotation()));\n tr.scale(this.fillPatternScaleX(), this.fillPatternScaleY());\n tr.translate(-1 * this.fillPatternOffsetX(), -1 * this.fillPatternOffsetY());\n const m = tr.getMatrix();\n const matrix = typeof DOMMatrix === 'undefined'\n ? {\n a: m[0],\n b: m[1],\n c: m[2],\n d: m[3],\n e: m[4],\n f: m[5],\n }\n : new DOMMatrix(m);\n pattern.setTransform(matrix);\n }\n return pattern;\n }\n }\n _getLinearGradient() {\n return this._getCache(linearGradient, this.__getLinearGradient);\n }\n __getLinearGradient() {\n var colorStops = this.fillLinearGradientColorStops();\n if (colorStops) {\n var ctx = getDummyContext();\n var start = this.fillLinearGradientStartPoint();\n var end = this.fillLinearGradientEndPoint();\n var grd = ctx.createLinearGradient(start.x, start.y, end.x, end.y);\n for (var n = 0; n < colorStops.length; n += 2) {\n grd.addColorStop(colorStops[n], colorStops[n + 1]);\n }\n return grd;\n }\n }\n _getRadialGradient() {\n return this._getCache(radialGradient, this.__getRadialGradient);\n }\n __getRadialGradient() {\n var colorStops = this.fillRadialGradientColorStops();\n if (colorStops) {\n var ctx = getDummyContext();\n var start = this.fillRadialGradientStartPoint();\n var end = this.fillRadialGradientEndPoint();\n var grd = ctx.createRadialGradient(start.x, start.y, this.fillRadialGradientStartRadius(), end.x, end.y, this.fillRadialGradientEndRadius());\n for (var n = 0; n < colorStops.length; n += 2) {\n grd.addColorStop(colorStops[n], colorStops[n + 1]);\n }\n return grd;\n }\n }\n getShadowRGBA() {\n return this._getCache(SHADOW_RGBA, this._getShadowRGBA);\n }\n _getShadowRGBA() {\n if (!this.hasShadow()) {\n return;\n }\n var rgba = Util.colorToRGBA(this.shadowColor());\n if (rgba) {\n return ('rgba(' +\n rgba.r +\n ',' +\n rgba.g +\n ',' +\n rgba.b +\n ',' +\n rgba.a * (this.shadowOpacity() || 1) +\n ')');\n }\n }\n hasFill() {\n return this._calculate('hasFill', [\n 'fillEnabled',\n 'fill',\n 'fillPatternImage',\n 'fillLinearGradientColorStops',\n 'fillRadialGradientColorStops',\n ], () => {\n return (this.fillEnabled() &&\n !!(this.fill() ||\n this.fillPatternImage() ||\n this.fillLinearGradientColorStops() ||\n this.fillRadialGradientColorStops()));\n });\n }\n hasStroke() {\n return this._calculate('hasStroke', [\n 'strokeEnabled',\n 'strokeWidth',\n 'stroke',\n 'strokeLinearGradientColorStops',\n ], () => {\n return (this.strokeEnabled() &&\n this.strokeWidth() &&\n !!(this.stroke() || this.strokeLinearGradientColorStops()));\n });\n }\n hasHitStroke() {\n const width = this.hitStrokeWidth();\n if (width === 'auto') {\n return this.hasStroke();\n }\n return this.strokeEnabled() && !!width;\n }\n intersects(point) {\n var stage = this.getStage(), bufferHitCanvas = stage.bufferHitCanvas, p;\n bufferHitCanvas.getContext().clear();\n this.drawHit(bufferHitCanvas, null, true);\n p = bufferHitCanvas.context.getImageData(Math.round(point.x), Math.round(point.y), 1, 1).data;\n return p[3] > 0;\n }\n destroy() {\n Node.prototype.destroy.call(this);\n delete shapes[this.colorKey];\n delete this.colorKey;\n return this;\n }\n _useBufferCanvas(forceFill) {\n var _a;\n if (!this.getStage()) {\n return false;\n }\n const perfectDrawEnabled = (_a = this.attrs.perfectDrawEnabled) !== null && _a !== void 0 ? _a : true;\n if (!perfectDrawEnabled) {\n return false;\n }\n const hasFill = forceFill || this.hasFill();\n const hasStroke = this.hasStroke();\n const isTransparent = this.getAbsoluteOpacity() !== 1;\n if (hasFill && hasStroke && isTransparent) {\n return true;\n }\n const hasShadow = this.hasShadow();\n const strokeForShadow = this.shadowForStrokeEnabled();\n if (hasFill && hasStroke && hasShadow && strokeForShadow) {\n return true;\n }\n return false;\n }\n setStrokeHitEnabled(val) {\n Util.warn('strokeHitEnabled property is deprecated. Please use hitStrokeWidth instead.');\n if (val) {\n this.hitStrokeWidth('auto');\n }\n else {\n this.hitStrokeWidth(0);\n }\n }\n getStrokeHitEnabled() {\n if (this.hitStrokeWidth() === 0) {\n return false;\n }\n else {\n return true;\n }\n }\n getSelfRect() {\n var size = this.size();\n return {\n x: this._centroid ? -size.width / 2 : 0,\n y: this._centroid ? -size.height / 2 : 0,\n width: size.width,\n height: size.height,\n };\n }\n getClientRect(config = {}) {\n const skipTransform = config.skipTransform;\n const relativeTo = config.relativeTo;\n const fillRect = this.getSelfRect();\n const applyStroke = !config.skipStroke && this.hasStroke();\n const strokeWidth = (applyStroke && this.strokeWidth()) || 0;\n const fillAndStrokeWidth = fillRect.width + strokeWidth;\n const fillAndStrokeHeight = fillRect.height + strokeWidth;\n const applyShadow = !config.skipShadow && this.hasShadow();\n const shadowOffsetX = applyShadow ? this.shadowOffsetX() : 0;\n const shadowOffsetY = applyShadow ? this.shadowOffsetY() : 0;\n const preWidth = fillAndStrokeWidth + Math.abs(shadowOffsetX);\n const preHeight = fillAndStrokeHeight + Math.abs(shadowOffsetY);\n const blurRadius = (applyShadow && this.shadowBlur()) || 0;\n const width = preWidth + blurRadius * 2;\n const height = preHeight + blurRadius * 2;\n const rect = {\n width: width,\n height: height,\n x: -(strokeWidth / 2 + blurRadius) +\n Math.min(shadowOffsetX, 0) +\n fillRect.x,\n y: -(strokeWidth / 2 + blurRadius) +\n Math.min(shadowOffsetY, 0) +\n fillRect.y,\n };\n if (!skipTransform) {\n return this._transformedRect(rect, relativeTo);\n }\n return rect;\n }\n drawScene(can, top) {\n var layer = this.getLayer(), canvas = can || layer.getCanvas(), context = canvas.getContext(), cachedCanvas = this._getCanvasCache(), drawFunc = this.getSceneFunc(), hasShadow = this.hasShadow(), stage, bufferCanvas, bufferContext;\n var skipBuffer = canvas.isCache;\n var cachingSelf = top === this;\n if (!this.isVisible() && !cachingSelf) {\n return this;\n }\n if (cachedCanvas) {\n context.save();\n var m = this.getAbsoluteTransform(top).getMatrix();\n context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n this._drawCachedSceneCanvas(context);\n context.restore();\n return this;\n }\n if (!drawFunc) {\n return this;\n }\n context.save();\n if (this._useBufferCanvas() && !skipBuffer) {\n stage = this.getStage();\n bufferCanvas = stage.bufferCanvas;\n bufferContext = bufferCanvas.getContext();\n bufferContext.clear();\n bufferContext.save();\n bufferContext._applyLineJoin(this);\n var o = this.getAbsoluteTransform(top).getMatrix();\n bufferContext.transform(o[0], o[1], o[2], o[3], o[4], o[5]);\n drawFunc.call(this, bufferContext, this);\n bufferContext.restore();\n var ratio = bufferCanvas.pixelRatio;\n if (hasShadow) {\n context._applyShadow(this);\n }\n context._applyOpacity(this);\n context._applyGlobalCompositeOperation(this);\n context.drawImage(bufferCanvas._canvas, 0, 0, bufferCanvas.width / ratio, bufferCanvas.height / ratio);\n }\n else {\n context._applyLineJoin(this);\n if (!cachingSelf) {\n var o = this.getAbsoluteTransform(top).getMatrix();\n context.transform(o[0], o[1], o[2], o[3], o[4], o[5]);\n context._applyOpacity(this);\n context._applyGlobalCompositeOperation(this);\n }\n if (hasShadow) {\n context._applyShadow(this);\n }\n drawFunc.call(this, context, this);\n }\n context.restore();\n return this;\n }\n drawHit(can, top, skipDragCheck = false) {\n if (!this.shouldDrawHit(top, skipDragCheck)) {\n return this;\n }\n var layer = this.getLayer(), canvas = can || layer.hitCanvas, context = canvas && canvas.getContext(), drawFunc = this.hitFunc() || this.sceneFunc(), cachedCanvas = this._getCanvasCache(), cachedHitCanvas = cachedCanvas && cachedCanvas.hit;\n if (!this.colorKey) {\n Util.warn('Looks like your canvas has a destroyed shape in it. Do not reuse shape after you destroyed it. If you want to reuse shape you should call remove() instead of destroy()');\n }\n if (cachedHitCanvas) {\n context.save();\n var m = this.getAbsoluteTransform(top).getMatrix();\n context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n this._drawCachedHitCanvas(context);\n context.restore();\n return this;\n }\n if (!drawFunc) {\n return this;\n }\n context.save();\n context._applyLineJoin(this);\n const selfCache = this === top;\n if (!selfCache) {\n var o = this.getAbsoluteTransform(top).getMatrix();\n context.transform(o[0], o[1], o[2], o[3], o[4], o[5]);\n }\n drawFunc.call(this, context, this);\n context.restore();\n return this;\n }\n drawHitFromCache(alphaThreshold = 0) {\n var cachedCanvas = this._getCanvasCache(), sceneCanvas = this._getCachedSceneCanvas(), hitCanvas = cachedCanvas.hit, hitContext = hitCanvas.getContext(), hitWidth = hitCanvas.getWidth(), hitHeight = hitCanvas.getHeight(), hitImageData, hitData, len, rgbColorKey, i, alpha;\n hitContext.clear();\n hitContext.drawImage(sceneCanvas._canvas, 0, 0, hitWidth, hitHeight);\n try {\n hitImageData = hitContext.getImageData(0, 0, hitWidth, hitHeight);\n hitData = hitImageData.data;\n len = hitData.length;\n rgbColorKey = Util._hexToRgb(this.colorKey);\n for (i = 0; i < len; i += 4) {\n alpha = hitData[i + 3];\n if (alpha > alphaThreshold) {\n hitData[i] = rgbColorKey.r;\n hitData[i + 1] = rgbColorKey.g;\n hitData[i + 2] = rgbColorKey.b;\n hitData[i + 3] = 255;\n }\n else {\n hitData[i + 3] = 0;\n }\n }\n hitContext.putImageData(hitImageData, 0, 0);\n }\n catch (e) {\n Util.error('Unable to draw hit graph from cached scene canvas. ' + e.message);\n }\n return this;\n }\n hasPointerCapture(pointerId) {\n return PointerEvents.hasPointerCapture(pointerId, this);\n }\n setPointerCapture(pointerId) {\n PointerEvents.setPointerCapture(pointerId, this);\n }\n releaseCapture(pointerId) {\n PointerEvents.releaseCapture(pointerId, this);\n }\n}\nShape.prototype._fillFunc = _fillFunc;\nShape.prototype._strokeFunc = _strokeFunc;\nShape.prototype._fillFuncHit = _fillFuncHit;\nShape.prototype._strokeFuncHit = _strokeFuncHit;\nShape.prototype._centroid = false;\nShape.prototype.nodeType = 'Shape';\n_registerNode(Shape);\nShape.prototype.eventListeners = {};\nShape.prototype.on.call(Shape.prototype, 'shadowColorChange.konva shadowBlurChange.konva shadowOffsetChange.konva shadowOpacityChange.konva shadowEnabledChange.konva', _clearHasShadowCache);\nShape.prototype.on.call(Shape.prototype, 'shadowColorChange.konva shadowOpacityChange.konva shadowEnabledChange.konva', _clearGetShadowRGBACache);\nShape.prototype.on.call(Shape.prototype, 'fillPriorityChange.konva fillPatternImageChange.konva fillPatternRepeatChange.konva fillPatternScaleXChange.konva fillPatternScaleYChange.konva fillPatternOffsetXChange.konva fillPatternOffsetYChange.konva fillPatternXChange.konva fillPatternYChange.konva fillPatternRotationChange.konva', _clearFillPatternCache);\nShape.prototype.on.call(Shape.prototype, 'fillPriorityChange.konva fillLinearGradientColorStopsChange.konva fillLinearGradientStartPointXChange.konva fillLinearGradientStartPointYChange.konva fillLinearGradientEndPointXChange.konva fillLinearGradientEndPointYChange.konva', _clearLinearGradientCache);\nShape.prototype.on.call(Shape.prototype, 'fillPriorityChange.konva fillRadialGradientColorStopsChange.konva fillRadialGradientStartPointXChange.konva fillRadialGradientStartPointYChange.konva fillRadialGradientEndPointXChange.konva fillRadialGradientEndPointYChange.konva fillRadialGradientStartRadiusChange.konva fillRadialGradientEndRadiusChange.konva', _clearRadialGradientCache);\nFactory.addGetterSetter(Shape, 'stroke', undefined, getStringOrGradientValidator());\nFactory.addGetterSetter(Shape, 'strokeWidth', 2, getNumberValidator());\nFactory.addGetterSetter(Shape, 'fillAfterStrokeEnabled', false);\nFactory.addGetterSetter(Shape, 'hitStrokeWidth', 'auto', getNumberOrAutoValidator());\nFactory.addGetterSetter(Shape, 'strokeHitEnabled', true, getBooleanValidator());\nFactory.addGetterSetter(Shape, 'perfectDrawEnabled', true, getBooleanValidator());\nFactory.addGetterSetter(Shape, 'shadowForStrokeEnabled', true, getBooleanValidator());\nFactory.addGetterSetter(Shape, 'lineJoin');\nFactory.addGetterSetter(Shape, 'lineCap');\nFactory.addGetterSetter(Shape, 'sceneFunc');\nFactory.addGetterSetter(Shape, 'hitFunc');\nFactory.addGetterSetter(Shape, 'dash');\nFactory.addGetterSetter(Shape, 'dashOffset', 0, getNumberValidator());\nFactory.addGetterSetter(Shape, 'shadowColor', undefined, getStringValidator());\nFactory.addGetterSetter(Shape, 'shadowBlur', 0, getNumberValidator());\nFactory.addGetterSetter(Shape, 'shadowOpacity', 1, getNumberValidator());\nFactory.addComponentsGetterSetter(Shape, 'shadowOffset', ['x', 'y']);\nFactory.addGetterSetter(Shape, 'shadowOffsetX', 0, getNumberValidator());\nFactory.addGetterSetter(Shape, 'shadowOffsetY', 0, getNumberValidator());\nFactory.addGetterSetter(Shape, 'fillPatternImage');\nFactory.addGetterSetter(Shape, 'fill', undefined, getStringOrGradientValidator());\nFactory.addGetterSetter(Shape, 'fillPatternX', 0, getNumberValidator());\nFactory.addGetterSetter(Shape, 'fillPatternY', 0, getNumberValidator());\nFactory.addGetterSetter(Shape, 'fillLinearGradientColorStops');\nFactory.addGetterSetter(Shape, 'strokeLinearGradientColorStops');\nFactory.addGetterSetter(Shape, 'fillRadialGradientStartRadius', 0);\nFactory.addGetterSetter(Shape, 'fillRadialGradientEndRadius', 0);\nFactory.addGetterSetter(Shape, 'fillRadialGradientColorStops');\nFactory.addGetterSetter(Shape, 'fillPatternRepeat', 'repeat');\nFactory.addGetterSetter(Shape, 'fillEnabled', true);\nFactory.addGetterSetter(Shape, 'strokeEnabled', true);\nFactory.addGetterSetter(Shape, 'shadowEnabled', true);\nFactory.addGetterSetter(Shape, 'dashEnabled', true);\nFactory.addGetterSetter(Shape, 'strokeScaleEnabled', true);\nFactory.addGetterSetter(Shape, 'fillPriority', 'color');\nFactory.addComponentsGetterSetter(Shape, 'fillPatternOffset', ['x', 'y']);\nFactory.addGetterSetter(Shape, 'fillPatternOffsetX', 0, getNumberValidator());\nFactory.addGetterSetter(Shape, 'fillPatternOffsetY', 0, getNumberValidator());\nFactory.addComponentsGetterSetter(Shape, 'fillPatternScale', ['x', 'y']);\nFactory.addGetterSetter(Shape, 'fillPatternScaleX', 1, getNumberValidator());\nFactory.addGetterSetter(Shape, 'fillPatternScaleY', 1, getNumberValidator());\nFactory.addComponentsGetterSetter(Shape, 'fillLinearGradientStartPoint', [\n 'x',\n 'y',\n]);\nFactory.addComponentsGetterSetter(Shape, 'strokeLinearGradientStartPoint', [\n 'x',\n 'y',\n]);\nFactory.addGetterSetter(Shape, 'fillLinearGradientStartPointX', 0);\nFactory.addGetterSetter(Shape, 'strokeLinearGradientStartPointX', 0);\nFactory.addGetterSetter(Shape, 'fillLinearGradientStartPointY', 0);\nFactory.addGetterSetter(Shape, 'strokeLinearGradientStartPointY', 0);\nFactory.addComponentsGetterSetter(Shape, 'fillLinearGradientEndPoint', [\n 'x',\n 'y',\n]);\nFactory.addComponentsGetterSetter(Shape, 'strokeLinearGradientEndPoint', [\n 'x',\n 'y',\n]);\nFactory.addGetterSetter(Shape, 'fillLinearGradientEndPointX', 0);\nFactory.addGetterSetter(Shape, 'strokeLinearGradientEndPointX', 0);\nFactory.addGetterSetter(Shape, 'fillLinearGradientEndPointY', 0);\nFactory.addGetterSetter(Shape, 'strokeLinearGradientEndPointY', 0);\nFactory.addComponentsGetterSetter(Shape, 'fillRadialGradientStartPoint', [\n 'x',\n 'y',\n]);\nFactory.addGetterSetter(Shape, 'fillRadialGradientStartPointX', 0);\nFactory.addGetterSetter(Shape, 'fillRadialGradientStartPointY', 0);\nFactory.addComponentsGetterSetter(Shape, 'fillRadialGradientEndPoint', [\n 'x',\n 'y',\n]);\nFactory.addGetterSetter(Shape, 'fillRadialGradientEndPointX', 0);\nFactory.addGetterSetter(Shape, 'fillRadialGradientEndPointY', 0);\nFactory.addGetterSetter(Shape, 'fillPatternRotation', 0);\nFactory.backCompat(Shape, {\n dashArray: 'dash',\n getDashArray: 'getDash',\n setDashArray: 'getDash',\n drawFunc: 'sceneFunc',\n getDrawFunc: 'getSceneFunc',\n setDrawFunc: 'setSceneFunc',\n drawHitFunc: 'hitFunc',\n getDrawHitFunc: 'getHitFunc',\n setDrawHitFunc: 'setHitFunc',\n});\n","import { Util } from './Util.js';\nimport { Container } from './Container.js';\nimport { Node } from './Node.js';\nimport { Factory } from './Factory.js';\nimport { SceneCanvas, HitCanvas } from './Canvas.js';\nimport { getBooleanValidator } from './Validators.js';\nimport { shapes } from './Shape.js';\nimport { _registerNode } from './Global.js';\nvar HASH = '#', BEFORE_DRAW = 'beforeDraw', DRAW = 'draw', INTERSECTION_OFFSETS = [\n { x: 0, y: 0 },\n { x: -1, y: -1 },\n { x: 1, y: -1 },\n { x: 1, y: 1 },\n { x: -1, y: 1 },\n], INTERSECTION_OFFSETS_LEN = INTERSECTION_OFFSETS.length;\nexport class Layer extends Container {\n constructor(config) {\n super(config);\n this.canvas = new SceneCanvas();\n this.hitCanvas = new HitCanvas({\n pixelRatio: 1,\n });\n this._waitingForDraw = false;\n this.on('visibleChange.konva', this._checkVisibility);\n this._checkVisibility();\n this.on('imageSmoothingEnabledChange.konva', this._setSmoothEnabled);\n this._setSmoothEnabled();\n }\n createPNGStream() {\n const c = this.canvas._canvas;\n return c.createPNGStream();\n }\n getCanvas() {\n return this.canvas;\n }\n getNativeCanvasElement() {\n return this.canvas._canvas;\n }\n getHitCanvas() {\n return this.hitCanvas;\n }\n getContext() {\n return this.getCanvas().getContext();\n }\n clear(bounds) {\n this.getContext().clear(bounds);\n this.getHitCanvas().getContext().clear(bounds);\n return this;\n }\n setZIndex(index) {\n super.setZIndex(index);\n var stage = this.getStage();\n if (stage && stage.content) {\n stage.content.removeChild(this.getNativeCanvasElement());\n if (index < stage.children.length - 1) {\n stage.content.insertBefore(this.getNativeCanvasElement(), stage.children[index + 1].getCanvas()._canvas);\n }\n else {\n stage.content.appendChild(this.getNativeCanvasElement());\n }\n }\n return this;\n }\n moveToTop() {\n Node.prototype.moveToTop.call(this);\n var stage = this.getStage();\n if (stage && stage.content) {\n stage.content.removeChild(this.getNativeCanvasElement());\n stage.content.appendChild(this.getNativeCanvasElement());\n }\n return true;\n }\n moveUp() {\n var moved = Node.prototype.moveUp.call(this);\n if (!moved) {\n return false;\n }\n var stage = this.getStage();\n if (!stage || !stage.content) {\n return false;\n }\n stage.content.removeChild(this.getNativeCanvasElement());\n if (this.index < stage.children.length - 1) {\n stage.content.insertBefore(this.getNativeCanvasElement(), stage.children[this.index + 1].getCanvas()._canvas);\n }\n else {\n stage.content.appendChild(this.getNativeCanvasElement());\n }\n return true;\n }\n moveDown() {\n if (Node.prototype.moveDown.call(this)) {\n var stage = this.getStage();\n if (stage) {\n var children = stage.children;\n if (stage.content) {\n stage.content.removeChild(this.getNativeCanvasElement());\n stage.content.insertBefore(this.getNativeCanvasElement(), children[this.index + 1].getCanvas()._canvas);\n }\n }\n return true;\n }\n return false;\n }\n moveToBottom() {\n if (Node.prototype.moveToBottom.call(this)) {\n var stage = this.getStage();\n if (stage) {\n var children = stage.children;\n if (stage.content) {\n stage.content.removeChild(this.getNativeCanvasElement());\n stage.content.insertBefore(this.getNativeCanvasElement(), children[1].getCanvas()._canvas);\n }\n }\n return true;\n }\n return false;\n }\n getLayer() {\n return this;\n }\n remove() {\n var _canvas = this.getNativeCanvasElement();\n Node.prototype.remove.call(this);\n if (_canvas && _canvas.parentNode && Util._isInDocument(_canvas)) {\n _canvas.parentNode.removeChild(_canvas);\n }\n return this;\n }\n getStage() {\n return this.parent;\n }\n setSize({ width, height }) {\n this.canvas.setSize(width, height);\n this.hitCanvas.setSize(width, height);\n this._setSmoothEnabled();\n return this;\n }\n _validateAdd(child) {\n var type = child.getType();\n if (type !== 'Group' && type !== 'Shape') {\n Util.throw('You may only add groups and shapes to a layer.');\n }\n }\n _toKonvaCanvas(config) {\n config = config || {};\n config.width = config.width || this.getWidth();\n config.height = config.height || this.getHeight();\n config.x = config.x !== undefined ? config.x : this.x();\n config.y = config.y !== undefined ? config.y : this.y();\n return Node.prototype._toKonvaCanvas.call(this, config);\n }\n _checkVisibility() {\n const visible = this.visible();\n if (visible) {\n this.canvas._canvas.style.display = 'block';\n }\n else {\n this.canvas._canvas.style.display = 'none';\n }\n }\n _setSmoothEnabled() {\n this.getContext()._context.imageSmoothingEnabled =\n this.imageSmoothingEnabled();\n }\n getWidth() {\n if (this.parent) {\n return this.parent.width();\n }\n }\n setWidth() {\n Util.warn('Can not change width of layer. Use \"stage.width(value)\" function instead.');\n }\n getHeight() {\n if (this.parent) {\n return this.parent.height();\n }\n }\n setHeight() {\n Util.warn('Can not change height of layer. Use \"stage.height(value)\" function instead.');\n }\n batchDraw() {\n if (!this._waitingForDraw) {\n this._waitingForDraw = true;\n Util.requestAnimFrame(() => {\n this.draw();\n this._waitingForDraw = false;\n });\n }\n return this;\n }\n getIntersection(pos) {\n if (!this.isListening() || !this.isVisible()) {\n return null;\n }\n var spiralSearchDistance = 1;\n var continueSearch = false;\n while (true) {\n for (let i = 0; i < INTERSECTION_OFFSETS_LEN; i++) {\n const intersectionOffset = INTERSECTION_OFFSETS[i];\n const obj = this._getIntersection({\n x: pos.x + intersectionOffset.x * spiralSearchDistance,\n y: pos.y + intersectionOffset.y * spiralSearchDistance,\n });\n const shape = obj.shape;\n if (shape) {\n return shape;\n }\n continueSearch = !!obj.antialiased;\n if (!obj.antialiased) {\n break;\n }\n }\n if (continueSearch) {\n spiralSearchDistance += 1;\n }\n else {\n return null;\n }\n }\n }\n _getIntersection(pos) {\n const ratio = this.hitCanvas.pixelRatio;\n const p = this.hitCanvas.context.getImageData(Math.round(pos.x * ratio), Math.round(pos.y * ratio), 1, 1).data;\n const p3 = p[3];\n if (p3 === 255) {\n const colorKey = Util._rgbToHex(p[0], p[1], p[2]);\n const shape = shapes[HASH + colorKey];\n if (shape) {\n return {\n shape: shape,\n };\n }\n return {\n antialiased: true,\n };\n }\n else if (p3 > 0) {\n return {\n antialiased: true,\n };\n }\n return {};\n }\n drawScene(can, top) {\n var layer = this.getLayer(), canvas = can || (layer && layer.getCanvas());\n this._fire(BEFORE_DRAW, {\n node: this,\n });\n if (this.clearBeforeDraw()) {\n canvas.getContext().clear();\n }\n Container.prototype.drawScene.call(this, canvas, top);\n this._fire(DRAW, {\n node: this,\n });\n return this;\n }\n drawHit(can, top) {\n var layer = this.getLayer(), canvas = can || (layer && layer.hitCanvas);\n if (layer && layer.clearBeforeDraw()) {\n layer.getHitCanvas().getContext().clear();\n }\n Container.prototype.drawHit.call(this, canvas, top);\n return this;\n }\n enableHitGraph() {\n this.hitGraphEnabled(true);\n return this;\n }\n disableHitGraph() {\n this.hitGraphEnabled(false);\n return this;\n }\n setHitGraphEnabled(val) {\n Util.warn('hitGraphEnabled method is deprecated. Please use layer.listening() instead.');\n this.listening(val);\n }\n getHitGraphEnabled(val) {\n Util.warn('hitGraphEnabled method is deprecated. Please use layer.listening() instead.');\n return this.listening();\n }\n toggleHitCanvas() {\n if (!this.parent || !this.parent['content']) {\n return;\n }\n var parent = this.parent;\n var added = !!this.hitCanvas._canvas.parentNode;\n if (added) {\n parent.content.removeChild(this.hitCanvas._canvas);\n }\n else {\n parent.content.appendChild(this.hitCanvas._canvas);\n }\n }\n destroy() {\n Util.releaseCanvas(this.getNativeCanvasElement(), this.getHitCanvas()._canvas);\n return super.destroy();\n }\n}\nLayer.prototype.nodeType = 'Layer';\n_registerNode(Layer);\nFactory.addGetterSetter(Layer, 'imageSmoothingEnabled', true);\nFactory.addGetterSetter(Layer, 'clearBeforeDraw', true);\nFactory.addGetterSetter(Layer, 'hitGraphEnabled', true, getBooleanValidator());\n","import { Util } from './Util.js';\nimport { Layer } from './Layer.js';\nimport { _registerNode } from './Global.js';\nexport class FastLayer extends Layer {\n constructor(attrs) {\n super(attrs);\n this.listening(false);\n Util.warn('Konva.Fast layer is deprecated. Please use \"new Konva.Layer({ listening: false })\" instead.');\n }\n}\nFastLayer.prototype.nodeType = 'FastLayer';\n_registerNode(FastLayer);\n","import { Util } from './Util.js';\nimport { Container } from './Container.js';\nimport { _registerNode } from './Global.js';\nexport class Group extends Container {\n _validateAdd(child) {\n var type = child.getType();\n if (type !== 'Group' && type !== 'Shape') {\n Util.throw('You may only add groups and shapes to groups.');\n }\n }\n}\nGroup.prototype.nodeType = 'Group';\n_registerNode(Group);\n","import { glob } from './Global.js';\nimport { Util } from './Util.js';\nvar now = (function () {\n if (glob.performance && glob.performance.now) {\n return function () {\n return glob.performance.now();\n };\n }\n return function () {\n return new Date().getTime();\n };\n})();\nexport class Animation {\n constructor(func, layers) {\n this.id = Animation.animIdCounter++;\n this.frame = {\n time: 0,\n timeDiff: 0,\n lastTime: now(),\n frameRate: 0,\n };\n this.func = func;\n this.setLayers(layers);\n }\n setLayers(layers) {\n var lays = [];\n if (!layers) {\n lays = [];\n }\n else if (layers.length > 0) {\n lays = layers;\n }\n else {\n lays = [layers];\n }\n this.layers = lays;\n return this;\n }\n getLayers() {\n return this.layers;\n }\n addLayer(layer) {\n var layers = this.layers, len = layers.length, n;\n for (n = 0; n < len; n++) {\n if (layers[n]._id === layer._id) {\n return false;\n }\n }\n this.layers.push(layer);\n return true;\n }\n isRunning() {\n var a = Animation, animations = a.animations, len = animations.length, n;\n for (n = 0; n < len; n++) {\n if (animations[n].id === this.id) {\n return true;\n }\n }\n return false;\n }\n start() {\n this.stop();\n this.frame.timeDiff = 0;\n this.frame.lastTime = now();\n Animation._addAnimation(this);\n return this;\n }\n stop() {\n Animation._removeAnimation(this);\n return this;\n }\n _updateFrameObject(time) {\n this.frame.timeDiff = time - this.frame.lastTime;\n this.frame.lastTime = time;\n this.frame.time += this.frame.timeDiff;\n this.frame.frameRate = 1000 / this.frame.timeDiff;\n }\n static _addAnimation(anim) {\n this.animations.push(anim);\n this._handleAnimation();\n }\n static _removeAnimation(anim) {\n var id = anim.id, animations = this.animations, len = animations.length, n;\n for (n = 0; n < len; n++) {\n if (animations[n].id === id) {\n this.animations.splice(n, 1);\n break;\n }\n }\n }\n static _runFrames() {\n var layerHash = {}, animations = this.animations, anim, layers, func, n, i, layersLen, layer, key, needRedraw;\n for (n = 0; n < animations.length; n++) {\n anim = animations[n];\n layers = anim.layers;\n func = anim.func;\n anim._updateFrameObject(now());\n layersLen = layers.length;\n if (func) {\n needRedraw = func.call(anim, anim.frame) !== false;\n }\n else {\n needRedraw = true;\n }\n if (!needRedraw) {\n continue;\n }\n for (i = 0; i < layersLen; i++) {\n layer = layers[i];\n if (layer._id !== undefined) {\n layerHash[layer._id] = layer;\n }\n }\n }\n for (key in layerHash) {\n if (!layerHash.hasOwnProperty(key)) {\n continue;\n }\n layerHash[key].batchDraw();\n }\n }\n static _animationLoop() {\n var Anim = Animation;\n if (Anim.animations.length) {\n Anim._runFrames();\n Util.requestAnimFrame(Anim._animationLoop);\n }\n else {\n Anim.animRunning = false;\n }\n }\n static _handleAnimation() {\n if (!this.animRunning) {\n this.animRunning = true;\n Util.requestAnimFrame(this._animationLoop);\n }\n }\n}\nAnimation.animations = [];\nAnimation.animIdCounter = 0;\nAnimation.animRunning = false;\n","import { Util } from './Util.js';\nimport { Animation } from './Animation.js';\nimport { Node } from './Node.js';\nimport { Konva } from './Global.js';\nvar blacklist = {\n node: 1,\n duration: 1,\n easing: 1,\n onFinish: 1,\n yoyo: 1,\n}, PAUSED = 1, PLAYING = 2, REVERSING = 3, idCounter = 0, colorAttrs = ['fill', 'stroke', 'shadowColor'];\nclass TweenEngine {\n constructor(prop, propFunc, func, begin, finish, duration, yoyo) {\n this.prop = prop;\n this.propFunc = propFunc;\n this.begin = begin;\n this._pos = begin;\n this.duration = duration;\n this._change = 0;\n this.prevPos = 0;\n this.yoyo = yoyo;\n this._time = 0;\n this._position = 0;\n this._startTime = 0;\n this._finish = 0;\n this.func = func;\n this._change = finish - this.begin;\n this.pause();\n }\n fire(str) {\n var handler = this[str];\n if (handler) {\n handler();\n }\n }\n setTime(t) {\n if (t > this.duration) {\n if (this.yoyo) {\n this._time = this.duration;\n this.reverse();\n }\n else {\n this.finish();\n }\n }\n else if (t < 0) {\n if (this.yoyo) {\n this._time = 0;\n this.play();\n }\n else {\n this.reset();\n }\n }\n else {\n this._time = t;\n this.update();\n }\n }\n getTime() {\n return this._time;\n }\n setPosition(p) {\n this.prevPos = this._pos;\n this.propFunc(p);\n this._pos = p;\n }\n getPosition(t) {\n if (t === undefined) {\n t = this._time;\n }\n return this.func(t, this.begin, this._change, this.duration);\n }\n play() {\n this.state = PLAYING;\n this._startTime = this.getTimer() - this._time;\n this.onEnterFrame();\n this.fire('onPlay');\n }\n reverse() {\n this.state = REVERSING;\n this._time = this.duration - this._time;\n this._startTime = this.getTimer() - this._time;\n this.onEnterFrame();\n this.fire('onReverse');\n }\n seek(t) {\n this.pause();\n this._time = t;\n this.update();\n this.fire('onSeek');\n }\n reset() {\n this.pause();\n this._time = 0;\n this.update();\n this.fire('onReset');\n }\n finish() {\n this.pause();\n this._time = this.duration;\n this.update();\n this.fire('onFinish');\n }\n update() {\n this.setPosition(this.getPosition(this._time));\n this.fire('onUpdate');\n }\n onEnterFrame() {\n var t = this.getTimer() - this._startTime;\n if (this.state === PLAYING) {\n this.setTime(t);\n }\n else if (this.state === REVERSING) {\n this.setTime(this.duration - t);\n }\n }\n pause() {\n this.state = PAUSED;\n this.fire('onPause');\n }\n getTimer() {\n return new Date().getTime();\n }\n}\nexport class Tween {\n constructor(config) {\n var that = this, node = config.node, nodeId = node._id, duration, easing = config.easing || Easings.Linear, yoyo = !!config.yoyo, key;\n if (typeof config.duration === 'undefined') {\n duration = 0.3;\n }\n else if (config.duration === 0) {\n duration = 0.001;\n }\n else {\n duration = config.duration;\n }\n this.node = node;\n this._id = idCounter++;\n var layers = node.getLayer() ||\n (node instanceof Konva['Stage'] ? node.getLayers() : null);\n if (!layers) {\n Util.error('Tween constructor have `node` that is not in a layer. Please add node into layer first.');\n }\n this.anim = new Animation(function () {\n that.tween.onEnterFrame();\n }, layers);\n this.tween = new TweenEngine(key, function (i) {\n that._tweenFunc(i);\n }, easing, 0, 1, duration * 1000, yoyo);\n this._addListeners();\n if (!Tween.attrs[nodeId]) {\n Tween.attrs[nodeId] = {};\n }\n if (!Tween.attrs[nodeId][this._id]) {\n Tween.attrs[nodeId][this._id] = {};\n }\n if (!Tween.tweens[nodeId]) {\n Tween.tweens[nodeId] = {};\n }\n for (key in config) {\n if (blacklist[key] === undefined) {\n this._addAttr(key, config[key]);\n }\n }\n this.reset();\n this.onFinish = config.onFinish;\n this.onReset = config.onReset;\n this.onUpdate = config.onUpdate;\n }\n _addAttr(key, end) {\n var node = this.node, nodeId = node._id, start, diff, tweenId, n, len, trueEnd, trueStart, endRGBA;\n tweenId = Tween.tweens[nodeId][key];\n if (tweenId) {\n delete Tween.attrs[nodeId][tweenId][key];\n }\n start = node.getAttr(key);\n if (Util._isArray(end)) {\n diff = [];\n len = Math.max(end.length, start.length);\n if (key === 'points' && end.length !== start.length) {\n if (end.length > start.length) {\n trueStart = start;\n start = Util._prepareArrayForTween(start, end, node.closed());\n }\n else {\n trueEnd = end;\n end = Util._prepareArrayForTween(end, start, node.closed());\n }\n }\n if (key.indexOf('fill') === 0) {\n for (n = 0; n < len; n++) {\n if (n % 2 === 0) {\n diff.push(end[n] - start[n]);\n }\n else {\n var startRGBA = Util.colorToRGBA(start[n]);\n endRGBA = Util.colorToRGBA(end[n]);\n start[n] = startRGBA;\n diff.push({\n r: endRGBA.r - startRGBA.r,\n g: endRGBA.g - startRGBA.g,\n b: endRGBA.b - startRGBA.b,\n a: endRGBA.a - startRGBA.a,\n });\n }\n }\n }\n else {\n for (n = 0; n < len; n++) {\n diff.push(end[n] - start[n]);\n }\n }\n }\n else if (colorAttrs.indexOf(key) !== -1) {\n start = Util.colorToRGBA(start);\n endRGBA = Util.colorToRGBA(end);\n diff = {\n r: endRGBA.r - start.r,\n g: endRGBA.g - start.g,\n b: endRGBA.b - start.b,\n a: endRGBA.a - start.a,\n };\n }\n else {\n diff = end - start;\n }\n Tween.attrs[nodeId][this._id][key] = {\n start: start,\n diff: diff,\n end: end,\n trueEnd: trueEnd,\n trueStart: trueStart,\n };\n Tween.tweens[nodeId][key] = this._id;\n }\n _tweenFunc(i) {\n var node = this.node, attrs = Tween.attrs[node._id][this._id], key, attr, start, diff, newVal, n, len, end;\n for (key in attrs) {\n attr = attrs[key];\n start = attr.start;\n diff = attr.diff;\n end = attr.end;\n if (Util._isArray(start)) {\n newVal = [];\n len = Math.max(start.length, end.length);\n if (key.indexOf('fill') === 0) {\n for (n = 0; n < len; n++) {\n if (n % 2 === 0) {\n newVal.push((start[n] || 0) + diff[n] * i);\n }\n else {\n newVal.push('rgba(' +\n Math.round(start[n].r + diff[n].r * i) +\n ',' +\n Math.round(start[n].g + diff[n].g * i) +\n ',' +\n Math.round(start[n].b + diff[n].b * i) +\n ',' +\n (start[n].a + diff[n].a * i) +\n ')');\n }\n }\n }\n else {\n for (n = 0; n < len; n++) {\n newVal.push((start[n] || 0) + diff[n] * i);\n }\n }\n }\n else if (colorAttrs.indexOf(key) !== -1) {\n newVal =\n 'rgba(' +\n Math.round(start.r + diff.r * i) +\n ',' +\n Math.round(start.g + diff.g * i) +\n ',' +\n Math.round(start.b + diff.b * i) +\n ',' +\n (start.a + diff.a * i) +\n ')';\n }\n else {\n newVal = start + diff * i;\n }\n node.setAttr(key, newVal);\n }\n }\n _addListeners() {\n this.tween.onPlay = () => {\n this.anim.start();\n };\n this.tween.onReverse = () => {\n this.anim.start();\n };\n this.tween.onPause = () => {\n this.anim.stop();\n };\n this.tween.onFinish = () => {\n var node = this.node;\n var attrs = Tween.attrs[node._id][this._id];\n if (attrs.points && attrs.points.trueEnd) {\n node.setAttr('points', attrs.points.trueEnd);\n }\n if (this.onFinish) {\n this.onFinish.call(this);\n }\n };\n this.tween.onReset = () => {\n var node = this.node;\n var attrs = Tween.attrs[node._id][this._id];\n if (attrs.points && attrs.points.trueStart) {\n node.points(attrs.points.trueStart);\n }\n if (this.onReset) {\n this.onReset();\n }\n };\n this.tween.onUpdate = () => {\n if (this.onUpdate) {\n this.onUpdate.call(this);\n }\n };\n }\n play() {\n this.tween.play();\n return this;\n }\n reverse() {\n this.tween.reverse();\n return this;\n }\n reset() {\n this.tween.reset();\n return this;\n }\n seek(t) {\n this.tween.seek(t * 1000);\n return this;\n }\n pause() {\n this.tween.pause();\n return this;\n }\n finish() {\n this.tween.finish();\n return this;\n }\n destroy() {\n var nodeId = this.node._id, thisId = this._id, attrs = Tween.tweens[nodeId], key;\n this.pause();\n for (key in attrs) {\n delete Tween.tweens[nodeId][key];\n }\n delete Tween.attrs[nodeId][thisId];\n }\n}\nTween.attrs = {};\nTween.tweens = {};\nNode.prototype.to = function (params) {\n var onFinish = params.onFinish;\n params.node = this;\n params.onFinish = function () {\n this.destroy();\n if (onFinish) {\n onFinish();\n }\n };\n var tween = new Tween(params);\n tween.play();\n};\nexport const Easings = {\n BackEaseIn(t, b, c, d) {\n var s = 1.70158;\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\n },\n BackEaseOut(t, b, c, d) {\n var s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n },\n BackEaseInOut(t, b, c, d) {\n var s = 1.70158;\n if ((t /= d / 2) < 1) {\n return (c / 2) * (t * t * (((s *= 1.525) + 1) * t - s)) + b;\n }\n return (c / 2) * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;\n },\n ElasticEaseIn(t, b, c, d, a, p) {\n var s = 0;\n if (t === 0) {\n return b;\n }\n if ((t /= d) === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n if (!a || a < Math.abs(c)) {\n a = c;\n s = p / 4;\n }\n else {\n s = (p / (2 * Math.PI)) * Math.asin(c / a);\n }\n return (-(a *\n Math.pow(2, 10 * (t -= 1)) *\n Math.sin(((t * d - s) * (2 * Math.PI)) / p)) + b);\n },\n ElasticEaseOut(t, b, c, d, a, p) {\n var s = 0;\n if (t === 0) {\n return b;\n }\n if ((t /= d) === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n if (!a || a < Math.abs(c)) {\n a = c;\n s = p / 4;\n }\n else {\n s = (p / (2 * Math.PI)) * Math.asin(c / a);\n }\n return (a * Math.pow(2, -10 * t) * Math.sin(((t * d - s) * (2 * Math.PI)) / p) +\n c +\n b);\n },\n ElasticEaseInOut(t, b, c, d, a, p) {\n var s = 0;\n if (t === 0) {\n return b;\n }\n if ((t /= d / 2) === 2) {\n return b + c;\n }\n if (!p) {\n p = d * (0.3 * 1.5);\n }\n if (!a || a < Math.abs(c)) {\n a = c;\n s = p / 4;\n }\n else {\n s = (p / (2 * Math.PI)) * Math.asin(c / a);\n }\n if (t < 1) {\n return (-0.5 *\n (a *\n Math.pow(2, 10 * (t -= 1)) *\n Math.sin(((t * d - s) * (2 * Math.PI)) / p)) +\n b);\n }\n return (a *\n Math.pow(2, -10 * (t -= 1)) *\n Math.sin(((t * d - s) * (2 * Math.PI)) / p) *\n 0.5 +\n c +\n b);\n },\n BounceEaseOut(t, b, c, d) {\n if ((t /= d) < 1 / 2.75) {\n return c * (7.5625 * t * t) + b;\n }\n else if (t < 2 / 2.75) {\n return c * (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) + b;\n }\n else if (t < 2.5 / 2.75) {\n return c * (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) + b;\n }\n else {\n return c * (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375) + b;\n }\n },\n BounceEaseIn(t, b, c, d) {\n return c - Easings.BounceEaseOut(d - t, 0, c, d) + b;\n },\n BounceEaseInOut(t, b, c, d) {\n if (t < d / 2) {\n return Easings.BounceEaseIn(t * 2, 0, c, d) * 0.5 + b;\n }\n else {\n return Easings.BounceEaseOut(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;\n }\n },\n EaseIn(t, b, c, d) {\n return c * (t /= d) * t + b;\n },\n EaseOut(t, b, c, d) {\n return -c * (t /= d) * (t - 2) + b;\n },\n EaseInOut(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return (c / 2) * t * t + b;\n }\n return (-c / 2) * (--t * (t - 2) - 1) + b;\n },\n StrongEaseIn(t, b, c, d) {\n return c * (t /= d) * t * t * t * t + b;\n },\n StrongEaseOut(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n },\n StrongEaseInOut(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return (c / 2) * t * t * t * t * t + b;\n }\n return (c / 2) * ((t -= 2) * t * t * t * t + 2) + b;\n },\n Linear(t, b, c, d) {\n return (c * t) / d + b;\n },\n};\n","import { Konva as Global } from './Global.js';\nimport { Util, Transform } from './Util.js';\nimport { Node } from './Node.js';\nimport { Container } from './Container.js';\nimport { Stage, stages } from './Stage.js';\nimport { Layer } from './Layer.js';\nimport { FastLayer } from './FastLayer.js';\nimport { Group } from './Group.js';\nimport { DD } from './DragAndDrop.js';\nimport { Shape, shapes } from './Shape.js';\nimport { Animation } from './Animation.js';\nimport { Tween, Easings } from './Tween.js';\nimport { Context } from './Context.js';\nimport { Canvas } from './Canvas.js';\nexport const Konva = Util._assign(Global, {\n Util,\n Transform,\n Node,\n Container,\n Stage,\n stages,\n Layer,\n FastLayer,\n Group,\n DD,\n Shape,\n shapes,\n Animation,\n Tween,\n Easings,\n Context,\n Canvas,\n});\nexport default Konva;\n","import { Factory } from '../Factory.js';\nimport { Shape } from '../Shape.js';\nimport { Konva } from '../Global.js';\nimport { getNumberValidator, getBooleanValidator } from '../Validators.js';\nimport { _registerNode } from '../Global.js';\nexport class Arc extends Shape {\n _sceneFunc(context) {\n var angle = Konva.getAngle(this.angle()), clockwise = this.clockwise();\n context.beginPath();\n context.arc(0, 0, this.outerRadius(), 0, angle, clockwise);\n context.arc(0, 0, this.innerRadius(), angle, 0, !clockwise);\n context.closePath();\n context.fillStrokeShape(this);\n }\n getWidth() {\n return this.outerRadius() * 2;\n }\n getHeight() {\n return this.outerRadius() * 2;\n }\n setWidth(width) {\n this.outerRadius(width / 2);\n }\n setHeight(height) {\n this.outerRadius(height / 2);\n }\n getSelfRect() {\n const innerRadius = this.innerRadius();\n const outerRadius = this.outerRadius();\n const clockwise = this.clockwise();\n const angle = Konva.getAngle(clockwise ? 360 - this.angle() : this.angle());\n const boundLeftRatio = Math.cos(Math.min(angle, Math.PI));\n const boundRightRatio = 1;\n const boundTopRatio = Math.sin(Math.min(Math.max(Math.PI, angle), (3 * Math.PI) / 2));\n const boundBottomRatio = Math.sin(Math.min(angle, Math.PI / 2));\n const boundLeft = boundLeftRatio * (boundLeftRatio > 0 ? innerRadius : outerRadius);\n const boundRight = boundRightRatio * (boundRightRatio > 0 ? outerRadius : innerRadius);\n const boundTop = boundTopRatio * (boundTopRatio > 0 ? innerRadius : outerRadius);\n const boundBottom = boundBottomRatio * (boundBottomRatio > 0 ? outerRadius : innerRadius);\n return {\n x: boundLeft,\n y: clockwise ? -1 * boundBottom : boundTop,\n width: boundRight - boundLeft,\n height: boundBottom - boundTop,\n };\n }\n}\nArc.prototype._centroid = true;\nArc.prototype.className = 'Arc';\nArc.prototype._attrsAffectingSize = ['innerRadius', 'outerRadius'];\n_registerNode(Arc);\nFactory.addGetterSetter(Arc, 'innerRadius', 0, getNumberValidator());\nFactory.addGetterSetter(Arc, 'outerRadius', 0, getNumberValidator());\nFactory.addGetterSetter(Arc, 'angle', 0, getNumberValidator());\nFactory.addGetterSetter(Arc, 'clockwise', false, getBooleanValidator());\n","import { Factory } from '../Factory.js';\nimport { Shape } from '../Shape.js';\nimport { getNumberValidator, getNumberArrayValidator } from '../Validators.js';\nimport { _registerNode } from '../Global.js';\nfunction getControlPoints(x0, y0, x1, y1, x2, y2, t) {\n var d01 = Math.sqrt(Math.pow(x1 - x0, 2) + Math.pow(y1 - y0, 2)), d12 = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)), fa = (t * d01) / (d01 + d12), fb = (t * d12) / (d01 + d12), p1x = x1 - fa * (x2 - x0), p1y = y1 - fa * (y2 - y0), p2x = x1 + fb * (x2 - x0), p2y = y1 + fb * (y2 - y0);\n return [p1x, p1y, p2x, p2y];\n}\nfunction expandPoints(p, tension) {\n var len = p.length, allPoints = [], n, cp;\n for (n = 2; n < len - 2; n += 2) {\n cp = getControlPoints(p[n - 2], p[n - 1], p[n], p[n + 1], p[n + 2], p[n + 3], tension);\n if (isNaN(cp[0])) {\n continue;\n }\n allPoints.push(cp[0]);\n allPoints.push(cp[1]);\n allPoints.push(p[n]);\n allPoints.push(p[n + 1]);\n allPoints.push(cp[2]);\n allPoints.push(cp[3]);\n }\n return allPoints;\n}\nexport class Line extends Shape {\n constructor(config) {\n super(config);\n this.on('pointsChange.konva tensionChange.konva closedChange.konva bezierChange.konva', function () {\n this._clearCache('tensionPoints');\n });\n }\n _sceneFunc(context) {\n var points = this.points(), length = points.length, tension = this.tension(), closed = this.closed(), bezier = this.bezier(), tp, len, n;\n if (!length) {\n return;\n }\n context.beginPath();\n context.moveTo(points[0], points[1]);\n if (tension !== 0 && length > 4) {\n tp = this.getTensionPoints();\n len = tp.length;\n n = closed ? 0 : 4;\n if (!closed) {\n context.quadraticCurveTo(tp[0], tp[1], tp[2], tp[3]);\n }\n while (n < len - 2) {\n context.bezierCurveTo(tp[n++], tp[n++], tp[n++], tp[n++], tp[n++], tp[n++]);\n }\n if (!closed) {\n context.quadraticCurveTo(tp[len - 2], tp[len - 1], points[length - 2], points[length - 1]);\n }\n }\n else if (bezier) {\n n = 2;\n while (n < length) {\n context.bezierCurveTo(points[n++], points[n++], points[n++], points[n++], points[n++], points[n++]);\n }\n }\n else {\n for (n = 2; n < length; n += 2) {\n context.lineTo(points[n], points[n + 1]);\n }\n }\n if (closed) {\n context.closePath();\n context.fillStrokeShape(this);\n }\n else {\n context.strokeShape(this);\n }\n }\n getTensionPoints() {\n return this._getCache('tensionPoints', this._getTensionPoints);\n }\n _getTensionPoints() {\n if (this.closed()) {\n return this._getTensionPointsClosed();\n }\n else {\n return expandPoints(this.points(), this.tension());\n }\n }\n _getTensionPointsClosed() {\n var p = this.points(), len = p.length, tension = this.tension(), firstControlPoints = getControlPoints(p[len - 2], p[len - 1], p[0], p[1], p[2], p[3], tension), lastControlPoints = getControlPoints(p[len - 4], p[len - 3], p[len - 2], p[len - 1], p[0], p[1], tension), middle = expandPoints(p, tension), tp = [firstControlPoints[2], firstControlPoints[3]]\n .concat(middle)\n .concat([\n lastControlPoints[0],\n lastControlPoints[1],\n p[len - 2],\n p[len - 1],\n lastControlPoints[2],\n lastControlPoints[3],\n firstControlPoints[0],\n firstControlPoints[1],\n p[0],\n p[1],\n ]);\n return tp;\n }\n getWidth() {\n return this.getSelfRect().width;\n }\n getHeight() {\n return this.getSelfRect().height;\n }\n getSelfRect() {\n var points = this.points();\n if (points.length < 4) {\n return {\n x: points[0] || 0,\n y: points[1] || 0,\n width: 0,\n height: 0,\n };\n }\n if (this.tension() !== 0) {\n points = [\n points[0],\n points[1],\n ...this._getTensionPoints(),\n points[points.length - 2],\n points[points.length - 1],\n ];\n }\n else {\n points = this.points();\n }\n var minX = points[0];\n var maxX = points[0];\n var minY = points[1];\n var maxY = points[1];\n var x, y;\n for (var i = 0; i < points.length / 2; i++) {\n x = points[i * 2];\n y = points[i * 2 + 1];\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, x);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y);\n }\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n }\n}\nLine.prototype.className = 'Line';\nLine.prototype._attrsAffectingSize = ['points', 'bezier', 'tension'];\n_registerNode(Line);\nFactory.addGetterSetter(Line, 'closed', false);\nFactory.addGetterSetter(Line, 'bezier', false);\nFactory.addGetterSetter(Line, 'tension', 0, getNumberValidator());\nFactory.addGetterSetter(Line, 'points', [], getNumberArrayValidator());\n","import { Factory } from '../Factory.js';\nimport { Shape } from '../Shape.js';\nimport { _registerNode } from '../Global.js';\nexport class Path extends Shape {\n constructor(config) {\n super(config);\n this.dataArray = [];\n this.pathLength = 0;\n this.dataArray = Path.parsePathData(this.data());\n this.pathLength = 0;\n for (var i = 0; i < this.dataArray.length; ++i) {\n this.pathLength += this.dataArray[i].pathLength;\n }\n this.on('dataChange.konva', function () {\n this.dataArray = Path.parsePathData(this.data());\n this.pathLength = 0;\n for (var i = 0; i < this.dataArray.length; ++i) {\n this.pathLength += this.dataArray[i].pathLength;\n }\n });\n }\n _sceneFunc(context) {\n var ca = this.dataArray;\n context.beginPath();\n var isClosed = false;\n for (var n = 0; n < ca.length; n++) {\n var c = ca[n].command;\n var p = ca[n].points;\n switch (c) {\n case 'L':\n context.lineTo(p[0], p[1]);\n break;\n case 'M':\n context.moveTo(p[0], p[1]);\n break;\n case 'C':\n context.bezierCurveTo(p[0], p[1], p[2], p[3], p[4], p[5]);\n break;\n case 'Q':\n context.quadraticCurveTo(p[0], p[1], p[2], p[3]);\n break;\n case 'A':\n var cx = p[0], cy = p[1], rx = p[2], ry = p[3], theta = p[4], dTheta = p[5], psi = p[6], fs = p[7];\n var r = rx > ry ? rx : ry;\n var scaleX = rx > ry ? 1 : rx / ry;\n var scaleY = rx > ry ? ry / rx : 1;\n context.translate(cx, cy);\n context.rotate(psi);\n context.scale(scaleX, scaleY);\n context.arc(0, 0, r, theta, theta + dTheta, 1 - fs);\n context.scale(1 / scaleX, 1 / scaleY);\n context.rotate(-psi);\n context.translate(-cx, -cy);\n break;\n case 'z':\n isClosed = true;\n context.closePath();\n break;\n }\n }\n if (!isClosed && !this.hasFill()) {\n context.strokeShape(this);\n }\n else {\n context.fillStrokeShape(this);\n }\n }\n getSelfRect() {\n var points = [];\n this.dataArray.forEach(function (data) {\n if (data.command === 'A') {\n var start = data.points[4];\n var dTheta = data.points[5];\n var end = data.points[4] + dTheta;\n var inc = Math.PI / 180.0;\n if (Math.abs(start - end) < inc) {\n inc = Math.abs(start - end);\n }\n if (dTheta < 0) {\n for (let t = start - inc; t > end; t -= inc) {\n const point = Path.getPointOnEllipticalArc(data.points[0], data.points[1], data.points[2], data.points[3], t, 0);\n points.push(point.x, point.y);\n }\n }\n else {\n for (let t = start + inc; t < end; t += inc) {\n const point = Path.getPointOnEllipticalArc(data.points[0], data.points[1], data.points[2], data.points[3], t, 0);\n points.push(point.x, point.y);\n }\n }\n }\n else if (data.command === 'C') {\n for (let t = 0.0; t <= 1; t += 0.01) {\n const point = Path.getPointOnCubicBezier(t, data.start.x, data.start.y, data.points[0], data.points[1], data.points[2], data.points[3], data.points[4], data.points[5]);\n points.push(point.x, point.y);\n }\n }\n else {\n points = points.concat(data.points);\n }\n });\n var minX = points[0];\n var maxX = points[0];\n var minY = points[1];\n var maxY = points[1];\n var x, y;\n for (var i = 0; i < points.length / 2; i++) {\n x = points[i * 2];\n y = points[i * 2 + 1];\n if (!isNaN(x)) {\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, x);\n }\n if (!isNaN(y)) {\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y);\n }\n }\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n }\n getLength() {\n return this.pathLength;\n }\n getPointAtLength(length) {\n var point, i = 0, ii = this.dataArray.length;\n if (!ii) {\n return null;\n }\n while (i < ii && length > this.dataArray[i].pathLength) {\n length -= this.dataArray[i].pathLength;\n ++i;\n }\n if (i === ii) {\n point = this.dataArray[i - 1].points.slice(-2);\n return {\n x: point[0],\n y: point[1],\n };\n }\n if (length < 0.01) {\n point = this.dataArray[i].points.slice(0, 2);\n return {\n x: point[0],\n y: point[1],\n };\n }\n var cp = this.dataArray[i];\n var p = cp.points;\n switch (cp.command) {\n case 'L':\n return Path.getPointOnLine(length, cp.start.x, cp.start.y, p[0], p[1]);\n case 'C':\n return Path.getPointOnCubicBezier(length / cp.pathLength, cp.start.x, cp.start.y, p[0], p[1], p[2], p[3], p[4], p[5]);\n case 'Q':\n return Path.getPointOnQuadraticBezier(length / cp.pathLength, cp.start.x, cp.start.y, p[0], p[1], p[2], p[3]);\n case 'A':\n var cx = p[0], cy = p[1], rx = p[2], ry = p[3], theta = p[4], dTheta = p[5], psi = p[6];\n theta += (dTheta * length) / cp.pathLength;\n return Path.getPointOnEllipticalArc(cx, cy, rx, ry, theta, psi);\n }\n return null;\n }\n static getLineLength(x1, y1, x2, y2) {\n return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n }\n static getPointOnLine(dist, P1x, P1y, P2x, P2y, fromX, fromY) {\n if (fromX === undefined) {\n fromX = P1x;\n }\n if (fromY === undefined) {\n fromY = P1y;\n }\n var m = (P2y - P1y) / (P2x - P1x + 0.00000001);\n var run = Math.sqrt((dist * dist) / (1 + m * m));\n if (P2x < P1x) {\n run *= -1;\n }\n var rise = m * run;\n var pt;\n if (P2x === P1x) {\n pt = {\n x: fromX,\n y: fromY + rise,\n };\n }\n else if ((fromY - P1y) / (fromX - P1x + 0.00000001) === m) {\n pt = {\n x: fromX + run,\n y: fromY + rise,\n };\n }\n else {\n var ix, iy;\n var len = this.getLineLength(P1x, P1y, P2x, P2y);\n var u = (fromX - P1x) * (P2x - P1x) + (fromY - P1y) * (P2y - P1y);\n u = u / (len * len);\n ix = P1x + u * (P2x - P1x);\n iy = P1y + u * (P2y - P1y);\n var pRise = this.getLineLength(fromX, fromY, ix, iy);\n var pRun = Math.sqrt(dist * dist - pRise * pRise);\n run = Math.sqrt((pRun * pRun) / (1 + m * m));\n if (P2x < P1x) {\n run *= -1;\n }\n rise = m * run;\n pt = {\n x: ix + run,\n y: iy + rise,\n };\n }\n return pt;\n }\n static getPointOnCubicBezier(pct, P1x, P1y, P2x, P2y, P3x, P3y, P4x, P4y) {\n function CB1(t) {\n return t * t * t;\n }\n function CB2(t) {\n return 3 * t * t * (1 - t);\n }\n function CB3(t) {\n return 3 * t * (1 - t) * (1 - t);\n }\n function CB4(t) {\n return (1 - t) * (1 - t) * (1 - t);\n }\n var x = P4x * CB1(pct) + P3x * CB2(pct) + P2x * CB3(pct) + P1x * CB4(pct);\n var y = P4y * CB1(pct) + P3y * CB2(pct) + P2y * CB3(pct) + P1y * CB4(pct);\n return {\n x: x,\n y: y,\n };\n }\n static getPointOnQuadraticBezier(pct, P1x, P1y, P2x, P2y, P3x, P3y) {\n function QB1(t) {\n return t * t;\n }\n function QB2(t) {\n return 2 * t * (1 - t);\n }\n function QB3(t) {\n return (1 - t) * (1 - t);\n }\n var x = P3x * QB1(pct) + P2x * QB2(pct) + P1x * QB3(pct);\n var y = P3y * QB1(pct) + P2y * QB2(pct) + P1y * QB3(pct);\n return {\n x: x,\n y: y,\n };\n }\n static getPointOnEllipticalArc(cx, cy, rx, ry, theta, psi) {\n var cosPsi = Math.cos(psi), sinPsi = Math.sin(psi);\n var pt = {\n x: rx * Math.cos(theta),\n y: ry * Math.sin(theta),\n };\n return {\n x: cx + (pt.x * cosPsi - pt.y * sinPsi),\n y: cy + (pt.x * sinPsi + pt.y * cosPsi),\n };\n }\n static parsePathData(data) {\n if (!data) {\n return [];\n }\n var cs = data;\n var cc = [\n 'm',\n 'M',\n 'l',\n 'L',\n 'v',\n 'V',\n 'h',\n 'H',\n 'z',\n 'Z',\n 'c',\n 'C',\n 'q',\n 'Q',\n 't',\n 'T',\n 's',\n 'S',\n 'a',\n 'A',\n ];\n cs = cs.replace(new RegExp(' ', 'g'), ',');\n for (var n = 0; n < cc.length; n++) {\n cs = cs.replace(new RegExp(cc[n], 'g'), '|' + cc[n]);\n }\n var arr = cs.split('|');\n var ca = [];\n var coords = [];\n var cpx = 0;\n var cpy = 0;\n var re = /([-+]?((\\d+\\.\\d+)|((\\d+)|(\\.\\d+)))(?:e[-+]?\\d+)?)/gi;\n var match;\n for (n = 1; n < arr.length; n++) {\n var str = arr[n];\n var c = str.charAt(0);\n str = str.slice(1);\n coords.length = 0;\n while ((match = re.exec(str))) {\n coords.push(match[0]);\n }\n var p = [];\n for (var j = 0, jlen = coords.length; j < jlen; j++) {\n if (coords[j] === '00') {\n p.push(0, 0);\n continue;\n }\n var parsed = parseFloat(coords[j]);\n if (!isNaN(parsed)) {\n p.push(parsed);\n }\n else {\n p.push(0);\n }\n }\n while (p.length > 0) {\n if (isNaN(p[0])) {\n break;\n }\n var cmd = null;\n var points = [];\n var startX = cpx, startY = cpy;\n var prevCmd, ctlPtx, ctlPty;\n var rx, ry, psi, fa, fs, x1, y1;\n switch (c) {\n case 'l':\n cpx += p.shift();\n cpy += p.shift();\n cmd = 'L';\n points.push(cpx, cpy);\n break;\n case 'L':\n cpx = p.shift();\n cpy = p.shift();\n points.push(cpx, cpy);\n break;\n case 'm':\n var dx = p.shift();\n var dy = p.shift();\n cpx += dx;\n cpy += dy;\n cmd = 'M';\n if (ca.length > 2 && ca[ca.length - 1].command === 'z') {\n for (var idx = ca.length - 2; idx >= 0; idx--) {\n if (ca[idx].command === 'M') {\n cpx = ca[idx].points[0] + dx;\n cpy = ca[idx].points[1] + dy;\n break;\n }\n }\n }\n points.push(cpx, cpy);\n c = 'l';\n break;\n case 'M':\n cpx = p.shift();\n cpy = p.shift();\n cmd = 'M';\n points.push(cpx, cpy);\n c = 'L';\n break;\n case 'h':\n cpx += p.shift();\n cmd = 'L';\n points.push(cpx, cpy);\n break;\n case 'H':\n cpx = p.shift();\n cmd = 'L';\n points.push(cpx, cpy);\n break;\n case 'v':\n cpy += p.shift();\n cmd = 'L';\n points.push(cpx, cpy);\n break;\n case 'V':\n cpy = p.shift();\n cmd = 'L';\n points.push(cpx, cpy);\n break;\n case 'C':\n points.push(p.shift(), p.shift(), p.shift(), p.shift());\n cpx = p.shift();\n cpy = p.shift();\n points.push(cpx, cpy);\n break;\n case 'c':\n points.push(cpx + p.shift(), cpy + p.shift(), cpx + p.shift(), cpy + p.shift());\n cpx += p.shift();\n cpy += p.shift();\n cmd = 'C';\n points.push(cpx, cpy);\n break;\n case 'S':\n ctlPtx = cpx;\n ctlPty = cpy;\n prevCmd = ca[ca.length - 1];\n if (prevCmd.command === 'C') {\n ctlPtx = cpx + (cpx - prevCmd.points[2]);\n ctlPty = cpy + (cpy - prevCmd.points[3]);\n }\n points.push(ctlPtx, ctlPty, p.shift(), p.shift());\n cpx = p.shift();\n cpy = p.shift();\n cmd = 'C';\n points.push(cpx, cpy);\n break;\n case 's':\n ctlPtx = cpx;\n ctlPty = cpy;\n prevCmd = ca[ca.length - 1];\n if (prevCmd.command === 'C') {\n ctlPtx = cpx + (cpx - prevCmd.points[2]);\n ctlPty = cpy + (cpy - prevCmd.points[3]);\n }\n points.push(ctlPtx, ctlPty, cpx + p.shift(), cpy + p.shift());\n cpx += p.shift();\n cpy += p.shift();\n cmd = 'C';\n points.push(cpx, cpy);\n break;\n case 'Q':\n points.push(p.shift(), p.shift());\n cpx = p.shift();\n cpy = p.shift();\n points.push(cpx, cpy);\n break;\n case 'q':\n points.push(cpx + p.shift(), cpy + p.shift());\n cpx += p.shift();\n cpy += p.shift();\n cmd = 'Q';\n points.push(cpx, cpy);\n break;\n case 'T':\n ctlPtx = cpx;\n ctlPty = cpy;\n prevCmd = ca[ca.length - 1];\n if (prevCmd.command === 'Q') {\n ctlPtx = cpx + (cpx - prevCmd.points[0]);\n ctlPty = cpy + (cpy - prevCmd.points[1]);\n }\n cpx = p.shift();\n cpy = p.shift();\n cmd = 'Q';\n points.push(ctlPtx, ctlPty, cpx, cpy);\n break;\n case 't':\n ctlPtx = cpx;\n ctlPty = cpy;\n prevCmd = ca[ca.length - 1];\n if (prevCmd.command === 'Q') {\n ctlPtx = cpx + (cpx - prevCmd.points[0]);\n ctlPty = cpy + (cpy - prevCmd.points[1]);\n }\n cpx += p.shift();\n cpy += p.shift();\n cmd = 'Q';\n points.push(ctlPtx, ctlPty, cpx, cpy);\n break;\n case 'A':\n rx = p.shift();\n ry = p.shift();\n psi = p.shift();\n fa = p.shift();\n fs = p.shift();\n x1 = cpx;\n y1 = cpy;\n cpx = p.shift();\n cpy = p.shift();\n cmd = 'A';\n points = this.convertEndpointToCenterParameterization(x1, y1, cpx, cpy, fa, fs, rx, ry, psi);\n break;\n case 'a':\n rx = p.shift();\n ry = p.shift();\n psi = p.shift();\n fa = p.shift();\n fs = p.shift();\n x1 = cpx;\n y1 = cpy;\n cpx += p.shift();\n cpy += p.shift();\n cmd = 'A';\n points = this.convertEndpointToCenterParameterization(x1, y1, cpx, cpy, fa, fs, rx, ry, psi);\n break;\n }\n ca.push({\n command: cmd || c,\n points: points,\n start: {\n x: startX,\n y: startY,\n },\n pathLength: this.calcLength(startX, startY, cmd || c, points),\n });\n }\n if (c === 'z' || c === 'Z') {\n ca.push({\n command: 'z',\n points: [],\n start: undefined,\n pathLength: 0,\n });\n }\n }\n return ca;\n }\n static calcLength(x, y, cmd, points) {\n var len, p1, p2, t;\n var path = Path;\n switch (cmd) {\n case 'L':\n return path.getLineLength(x, y, points[0], points[1]);\n case 'C':\n len = 0.0;\n p1 = path.getPointOnCubicBezier(0, x, y, points[0], points[1], points[2], points[3], points[4], points[5]);\n for (t = 0.01; t <= 1; t += 0.01) {\n p2 = path.getPointOnCubicBezier(t, x, y, points[0], points[1], points[2], points[3], points[4], points[5]);\n len += path.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n return len;\n case 'Q':\n len = 0.0;\n p1 = path.getPointOnQuadraticBezier(0, x, y, points[0], points[1], points[2], points[3]);\n for (t = 0.01; t <= 1; t += 0.01) {\n p2 = path.getPointOnQuadraticBezier(t, x, y, points[0], points[1], points[2], points[3]);\n len += path.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n return len;\n case 'A':\n len = 0.0;\n var start = points[4];\n var dTheta = points[5];\n var end = points[4] + dTheta;\n var inc = Math.PI / 180.0;\n if (Math.abs(start - end) < inc) {\n inc = Math.abs(start - end);\n }\n p1 = path.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], start, 0);\n if (dTheta < 0) {\n for (t = start - inc; t > end; t -= inc) {\n p2 = path.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], t, 0);\n len += path.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n }\n else {\n for (t = start + inc; t < end; t += inc) {\n p2 = path.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], t, 0);\n len += path.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n }\n p2 = path.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], end, 0);\n len += path.getLineLength(p1.x, p1.y, p2.x, p2.y);\n return len;\n }\n return 0;\n }\n static convertEndpointToCenterParameterization(x1, y1, x2, y2, fa, fs, rx, ry, psiDeg) {\n var psi = psiDeg * (Math.PI / 180.0);\n var xp = (Math.cos(psi) * (x1 - x2)) / 2.0 + (Math.sin(psi) * (y1 - y2)) / 2.0;\n var yp = (-1 * Math.sin(psi) * (x1 - x2)) / 2.0 +\n (Math.cos(psi) * (y1 - y2)) / 2.0;\n var lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n var f = Math.sqrt((rx * rx * (ry * ry) - rx * rx * (yp * yp) - ry * ry * (xp * xp)) /\n (rx * rx * (yp * yp) + ry * ry * (xp * xp)));\n if (fa === fs) {\n f *= -1;\n }\n if (isNaN(f)) {\n f = 0;\n }\n var cxp = (f * rx * yp) / ry;\n var cyp = (f * -ry * xp) / rx;\n var cx = (x1 + x2) / 2.0 + Math.cos(psi) * cxp - Math.sin(psi) * cyp;\n var cy = (y1 + y2) / 2.0 + Math.sin(psi) * cxp + Math.cos(psi) * cyp;\n var vMag = function (v) {\n return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n };\n var vRatio = function (u, v) {\n return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));\n };\n var vAngle = function (u, v) {\n return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v));\n };\n var theta = vAngle([1, 0], [(xp - cxp) / rx, (yp - cyp) / ry]);\n var u = [(xp - cxp) / rx, (yp - cyp) / ry];\n var v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];\n var dTheta = vAngle(u, v);\n if (vRatio(u, v) <= -1) {\n dTheta = Math.PI;\n }\n if (vRatio(u, v) >= 1) {\n dTheta = 0;\n }\n if (fs === 0 && dTheta > 0) {\n dTheta = dTheta - 2 * Math.PI;\n }\n if (fs === 1 && dTheta < 0) {\n dTheta = dTheta + 2 * Math.PI;\n }\n return [cx, cy, rx, ry, theta, dTheta, psi, fs];\n }\n}\nPath.prototype.className = 'Path';\nPath.prototype._attrsAffectingSize = ['data'];\n_registerNode(Path);\nFactory.addGetterSetter(Path, 'data');\n","import { Factory } from '../Factory.js';\nimport { Line } from './Line.js';\nimport { getNumberValidator } from '../Validators.js';\nimport { _registerNode } from '../Global.js';\nimport { Path } from './Path.js';\nexport class Arrow extends Line {\n _sceneFunc(ctx) {\n super._sceneFunc(ctx);\n var PI2 = Math.PI * 2;\n var points = this.points();\n var tp = points;\n var fromTension = this.tension() !== 0 && points.length > 4;\n if (fromTension) {\n tp = this.getTensionPoints();\n }\n var length = this.pointerLength();\n var n = points.length;\n var dx, dy;\n if (fromTension) {\n const lp = [\n tp[tp.length - 4],\n tp[tp.length - 3],\n tp[tp.length - 2],\n tp[tp.length - 1],\n points[n - 2],\n points[n - 1],\n ];\n const lastLength = Path.calcLength(tp[tp.length - 4], tp[tp.length - 3], 'C', lp);\n const previous = Path.getPointOnQuadraticBezier(Math.min(1, 1 - length / lastLength), lp[0], lp[1], lp[2], lp[3], lp[4], lp[5]);\n dx = points[n - 2] - previous.x;\n dy = points[n - 1] - previous.y;\n }\n else {\n dx = points[n - 2] - points[n - 4];\n dy = points[n - 1] - points[n - 3];\n }\n var radians = (Math.atan2(dy, dx) + PI2) % PI2;\n var width = this.pointerWidth();\n if (this.pointerAtEnding()) {\n ctx.save();\n ctx.beginPath();\n ctx.translate(points[n - 2], points[n - 1]);\n ctx.rotate(radians);\n ctx.moveTo(0, 0);\n ctx.lineTo(-length, width / 2);\n ctx.lineTo(-length, -width / 2);\n ctx.closePath();\n ctx.restore();\n this.__fillStroke(ctx);\n }\n if (this.pointerAtBeginning()) {\n ctx.save();\n ctx.beginPath();\n ctx.translate(points[0], points[1]);\n if (fromTension) {\n dx = (tp[0] + tp[2]) / 2 - points[0];\n dy = (tp[1] + tp[3]) / 2 - points[1];\n }\n else {\n dx = points[2] - points[0];\n dy = points[3] - points[1];\n }\n ctx.rotate((Math.atan2(-dy, -dx) + PI2) % PI2);\n ctx.moveTo(0, 0);\n ctx.lineTo(-length, width / 2);\n ctx.lineTo(-length, -width / 2);\n ctx.closePath();\n ctx.restore();\n this.__fillStroke(ctx);\n }\n }\n __fillStroke(ctx) {\n var isDashEnabled = this.dashEnabled();\n if (isDashEnabled) {\n this.attrs.dashEnabled = false;\n ctx.setLineDash([]);\n }\n ctx.fillStrokeShape(this);\n if (isDashEnabled) {\n this.attrs.dashEnabled = true;\n }\n }\n getSelfRect() {\n const lineRect = super.getSelfRect();\n const offset = this.pointerWidth() / 2;\n return {\n x: lineRect.x - offset,\n y: lineRect.y - offset,\n width: lineRect.width + offset * 2,\n height: lineRect.height + offset * 2,\n };\n }\n}\nArrow.prototype.className = 'Arrow';\n_registerNode(Arrow);\nFactory.addGetterSetter(Arrow, 'pointerLength', 10, getNumberValidator());\nFactory.addGetterSetter(Arrow, 'pointerWidth', 10, getNumberValidator());\nFactory.addGetterSetter(Arrow, 'pointerAtBeginning', false);\nFactory.addGetterSetter(Arrow, 'pointerAtEnding', true);\n","import { Factory } from '../Factory.js';\nimport { Shape } from '../Shape.js';\nimport { getNumberValidator } from '../Validators.js';\nimport { _registerNode } from '../Global.js';\nexport class Circle extends Shape {\n _sceneFunc(context) {\n context.beginPath();\n context.arc(0, 0, this.attrs.radius || 0, 0, Math.PI * 2, false);\n context.closePath();\n context.fillStrokeShape(this);\n }\n getWidth() {\n return this.radius() * 2;\n }\n getHeight() {\n return this.radius() * 2;\n }\n setWidth(width) {\n if (this.radius() !== width / 2) {\n this.radius(width / 2);\n }\n }\n setHeight(height) {\n if (this.radius() !== height / 2) {\n this.radius(height / 2);\n }\n }\n}\nCircle.prototype._centroid = true;\nCircle.prototype.className = 'Circle';\nCircle.prototype._attrsAffectingSize = ['radius'];\n_registerNode(Circle);\nFactory.addGetterSetter(Circle, 'radius', 0, getNumberValidator());\n","import { Factory } from '../Factory.js';\nimport { Shape } from '../Shape.js';\nimport { getNumberValidator } from '../Validators.js';\nimport { _registerNode } from '../Global.js';\nexport class Ellipse extends Shape {\n _sceneFunc(context) {\n var rx = this.radiusX(), ry = this.radiusY();\n context.beginPath();\n context.save();\n if (rx !== ry) {\n context.scale(1, ry / rx);\n }\n context.arc(0, 0, rx, 0, Math.PI * 2, false);\n context.restore();\n context.closePath();\n context.fillStrokeShape(this);\n }\n getWidth() {\n return this.radiusX() * 2;\n }\n getHeight() {\n return this.radiusY() * 2;\n }\n setWidth(width) {\n this.radiusX(width / 2);\n }\n setHeight(height) {\n this.radiusY(height / 2);\n }\n}\nEllipse.prototype.className = 'Ellipse';\nEllipse.prototype._centroid = true;\nEllipse.prototype._attrsAffectingSize = ['radiusX', 'radiusY'];\n_registerNode(Ellipse);\nFactory.addComponentsGetterSetter(Ellipse, 'radius', ['x', 'y']);\nFactory.addGetterSetter(Ellipse, 'radiusX', 0, getNumberValidator());\nFactory.addGetterSetter(Ellipse, 'radiusY', 0, getNumberValidator());\n","import { Util } from '../Util.js';\nimport { Factory } from '../Factory.js';\nimport { Shape } from '../Shape.js';\nimport { getNumberValidator } from '../Validators.js';\nimport { _registerNode } from '../Global.js';\nexport class Image extends Shape {\n constructor(attrs) {\n super(attrs);\n this.on('imageChange.konva', () => {\n this._setImageLoad();\n });\n this._setImageLoad();\n }\n _setImageLoad() {\n const image = this.image();\n if (image && image.complete) {\n return;\n }\n if (image && image.readyState === 4) {\n return;\n }\n if (image && image['addEventListener']) {\n image['addEventListener']('load', () => {\n this._requestDraw();\n });\n }\n }\n _useBufferCanvas() {\n return super._useBufferCanvas(true);\n }\n _sceneFunc(context) {\n const width = this.getWidth();\n const height = this.getHeight();\n const image = this.attrs.image;\n let params;\n if (image) {\n const cropWidth = this.attrs.cropWidth;\n const cropHeight = this.attrs.cropHeight;\n if (cropWidth && cropHeight) {\n params = [\n image,\n this.cropX(),\n this.cropY(),\n cropWidth,\n cropHeight,\n 0,\n 0,\n width,\n height,\n ];\n }\n else {\n params = [image, 0, 0, width, height];\n }\n }\n if (this.hasFill() || this.hasStroke()) {\n context.beginPath();\n context.rect(0, 0, width, height);\n context.closePath();\n context.fillStrokeShape(this);\n }\n if (image) {\n context.drawImage.apply(context, params);\n }\n }\n _hitFunc(context) {\n var width = this.width(), height = this.height();\n context.beginPath();\n context.rect(0, 0, width, height);\n context.closePath();\n context.fillStrokeShape(this);\n }\n getWidth() {\n var _a, _b;\n return (_a = this.attrs.width) !== null && _a !== void 0 ? _a : (_b = this.image()) === null || _b === void 0 ? void 0 : _b.width;\n }\n getHeight() {\n var _a, _b;\n return (_a = this.attrs.height) !== null && _a !== void 0 ? _a : (_b = this.image()) === null || _b === void 0 ? void 0 : _b.height;\n }\n static fromURL(url, callback, onError = null) {\n var img = Util.createImageElement();\n img.onload = function () {\n var image = new Image({\n image: img,\n });\n callback(image);\n };\n img.onerror = onError;\n img.crossOrigin = 'Anonymous';\n img.src = url;\n }\n}\nImage.prototype.className = 'Image';\n_registerNode(Image);\nFactory.addGetterSetter(Image, 'image');\nFactory.addComponentsGetterSetter(Image, 'crop', ['x', 'y', 'width', 'height']);\nFactory.addGetterSetter(Image, 'cropX', 0, getNumberValidator());\nFactory.addGetterSetter(Image, 'cropY', 0, getNumberValidator());\nFactory.addGetterSetter(Image, 'cropWidth', 0, getNumberValidator());\nFactory.addGetterSetter(Image, 'cropHeight', 0, getNumberValidator());\n","import { Factory } from '../Factory.js';\nimport { Shape } from '../Shape.js';\nimport { Group } from '../Group.js';\nimport { getNumberOrArrayOfNumbersValidator, getNumberValidator, } from '../Validators.js';\nimport { _registerNode } from '../Global.js';\nvar ATTR_CHANGE_LIST = [\n 'fontFamily',\n 'fontSize',\n 'fontStyle',\n 'padding',\n 'lineHeight',\n 'text',\n 'width',\n 'height',\n 'pointerDirection',\n 'pointerWidth',\n 'pointerHeight',\n], CHANGE_KONVA = 'Change.konva', NONE = 'none', UP = 'up', RIGHT = 'right', DOWN = 'down', LEFT = 'left', attrChangeListLen = ATTR_CHANGE_LIST.length;\nexport class Label extends Group {\n constructor(config) {\n super(config);\n this.on('add.konva', function (evt) {\n this._addListeners(evt.child);\n this._sync();\n });\n }\n getText() {\n return this.find('Text')[0];\n }\n getTag() {\n return this.find('Tag')[0];\n }\n _addListeners(text) {\n var that = this, n;\n var func = function () {\n that._sync();\n };\n for (n = 0; n < attrChangeListLen; n++) {\n text.on(ATTR_CHANGE_LIST[n] + CHANGE_KONVA, func);\n }\n }\n getWidth() {\n return this.getText().width();\n }\n getHeight() {\n return this.getText().height();\n }\n _sync() {\n var text = this.getText(), tag = this.getTag(), width, height, pointerDirection, pointerWidth, x, y, pointerHeight;\n if (text && tag) {\n width = text.width();\n height = text.height();\n pointerDirection = tag.pointerDirection();\n pointerWidth = tag.pointerWidth();\n pointerHeight = tag.pointerHeight();\n x = 0;\n y = 0;\n switch (pointerDirection) {\n case UP:\n x = width / 2;\n y = -1 * pointerHeight;\n break;\n case RIGHT:\n x = width + pointerWidth;\n y = height / 2;\n break;\n case DOWN:\n x = width / 2;\n y = height + pointerHeight;\n break;\n case LEFT:\n x = -1 * pointerWidth;\n y = height / 2;\n break;\n }\n tag.setAttrs({\n x: -1 * x,\n y: -1 * y,\n width: width,\n height: height,\n });\n text.setAttrs({\n x: -1 * x,\n y: -1 * y,\n });\n }\n }\n}\nLabel.prototype.className = 'Label';\n_registerNode(Label);\nexport class Tag extends Shape {\n _sceneFunc(context) {\n var width = this.width(), height = this.height(), pointerDirection = this.pointerDirection(), pointerWidth = this.pointerWidth(), pointerHeight = this.pointerHeight(), cornerRadius = this.cornerRadius();\n let topLeft = 0;\n let topRight = 0;\n let bottomLeft = 0;\n let bottomRight = 0;\n if (typeof cornerRadius === 'number') {\n topLeft =\n topRight =\n bottomLeft =\n bottomRight =\n Math.min(cornerRadius, width / 2, height / 2);\n }\n else {\n topLeft = Math.min(cornerRadius[0] || 0, width / 2, height / 2);\n topRight = Math.min(cornerRadius[1] || 0, width / 2, height / 2);\n bottomRight = Math.min(cornerRadius[2] || 0, width / 2, height / 2);\n bottomLeft = Math.min(cornerRadius[3] || 0, width / 2, height / 2);\n }\n context.beginPath();\n context.moveTo(topLeft, 0);\n if (pointerDirection === UP) {\n context.lineTo((width - pointerWidth) / 2, 0);\n context.lineTo(width / 2, -1 * pointerHeight);\n context.lineTo((width + pointerWidth) / 2, 0);\n }\n context.lineTo(width - topRight, 0);\n context.arc(width - topRight, topRight, topRight, (Math.PI * 3) / 2, 0, false);\n if (pointerDirection === RIGHT) {\n context.lineTo(width, (height - pointerHeight) / 2);\n context.lineTo(width + pointerWidth, height / 2);\n context.lineTo(width, (height + pointerHeight) / 2);\n }\n context.lineTo(width, height - bottomRight);\n context.arc(width - bottomRight, height - bottomRight, bottomRight, 0, Math.PI / 2, false);\n if (pointerDirection === DOWN) {\n context.lineTo((width + pointerWidth) / 2, height);\n context.lineTo(width / 2, height + pointerHeight);\n context.lineTo((width - pointerWidth) / 2, height);\n }\n context.lineTo(bottomLeft, height);\n context.arc(bottomLeft, height - bottomLeft, bottomLeft, Math.PI / 2, Math.PI, false);\n if (pointerDirection === LEFT) {\n context.lineTo(0, (height + pointerHeight) / 2);\n context.lineTo(-1 * pointerWidth, height / 2);\n context.lineTo(0, (height - pointerHeight) / 2);\n }\n context.lineTo(0, topLeft);\n context.arc(topLeft, topLeft, topLeft, Math.PI, (Math.PI * 3) / 2, false);\n context.closePath();\n context.fillStrokeShape(this);\n }\n getSelfRect() {\n var x = 0, y = 0, pointerWidth = this.pointerWidth(), pointerHeight = this.pointerHeight(), direction = this.pointerDirection(), width = this.width(), height = this.height();\n if (direction === UP) {\n y -= pointerHeight;\n height += pointerHeight;\n }\n else if (direction === DOWN) {\n height += pointerHeight;\n }\n else if (direction === LEFT) {\n x -= pointerWidth * 1.5;\n width += pointerWidth;\n }\n else if (direction === RIGHT) {\n width += pointerWidth * 1.5;\n }\n return {\n x: x,\n y: y,\n width: width,\n height: height,\n };\n }\n}\nTag.prototype.className = 'Tag';\n_registerNode(Tag);\nFactory.addGetterSetter(Tag, 'pointerDirection', NONE);\nFactory.addGetterSetter(Tag, 'pointerWidth', 0, getNumberValidator());\nFactory.addGetterSetter(Tag, 'pointerHeight', 0, getNumberValidator());\nFactory.addGetterSetter(Tag, 'cornerRadius', 0, getNumberOrArrayOfNumbersValidator(4));\n","import { Factory } from '../Factory.js';\nimport { Shape } from '../Shape.js';\nimport { _registerNode } from '../Global.js';\nimport { getNumberOrArrayOfNumbersValidator } from '../Validators.js';\nexport class Rect extends Shape {\n _sceneFunc(context) {\n var cornerRadius = this.cornerRadius(), width = this.width(), height = this.height();\n context.beginPath();\n if (!cornerRadius) {\n context.rect(0, 0, width, height);\n }\n else {\n let topLeft = 0;\n let topRight = 0;\n let bottomLeft = 0;\n let bottomRight = 0;\n if (typeof cornerRadius === 'number') {\n topLeft = topRight = bottomLeft = bottomRight = Math.min(cornerRadius, width / 2, height / 2);\n }\n else {\n topLeft = Math.min(cornerRadius[0] || 0, width / 2, height / 2);\n topRight = Math.min(cornerRadius[1] || 0, width / 2, height / 2);\n bottomRight = Math.min(cornerRadius[2] || 0, width / 2, height / 2);\n bottomLeft = Math.min(cornerRadius[3] || 0, width / 2, height / 2);\n }\n context.moveTo(topLeft, 0);\n context.lineTo(width - topRight, 0);\n context.arc(width - topRight, topRight, topRight, (Math.PI * 3) / 2, 0, false);\n context.lineTo(width, height - bottomRight);\n context.arc(width - bottomRight, height - bottomRight, bottomRight, 0, Math.PI / 2, false);\n context.lineTo(bottomLeft, height);\n context.arc(bottomLeft, height - bottomLeft, bottomLeft, Math.PI / 2, Math.PI, false);\n context.lineTo(0, topLeft);\n context.arc(topLeft, topLeft, topLeft, Math.PI, (Math.PI * 3) / 2, false);\n }\n context.closePath();\n context.fillStrokeShape(this);\n }\n}\nRect.prototype.className = 'Rect';\n_registerNode(Rect);\nFactory.addGetterSetter(Rect, 'cornerRadius', 0, getNumberOrArrayOfNumbersValidator(4));\n","import { Factory } from '../Factory.js';\nimport { Shape } from '../Shape.js';\nimport { getNumberValidator } from '../Validators.js';\nimport { _registerNode } from '../Global.js';\nexport class RegularPolygon extends Shape {\n _sceneFunc(context) {\n const points = this._getPoints();\n context.beginPath();\n context.moveTo(points[0].x, points[0].y);\n for (var n = 1; n < points.length; n++) {\n context.lineTo(points[n].x, points[n].y);\n }\n context.closePath();\n context.fillStrokeShape(this);\n }\n _getPoints() {\n const sides = this.attrs.sides;\n const radius = this.attrs.radius || 0;\n const points = [];\n for (var n = 0; n < sides; n++) {\n points.push({\n x: radius * Math.sin((n * 2 * Math.PI) / sides),\n y: -1 * radius * Math.cos((n * 2 * Math.PI) / sides),\n });\n }\n return points;\n }\n getSelfRect() {\n const points = this._getPoints();\n var minX = points[0].x;\n var maxX = points[0].y;\n var minY = points[0].x;\n var maxY = points[0].y;\n points.forEach((point) => {\n minX = Math.min(minX, point.x);\n maxX = Math.max(maxX, point.x);\n minY = Math.min(minY, point.y);\n maxY = Math.max(maxY, point.y);\n });\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n }\n getWidth() {\n return this.radius() * 2;\n }\n getHeight() {\n return this.radius() * 2;\n }\n setWidth(width) {\n this.radius(width / 2);\n }\n setHeight(height) {\n this.radius(height / 2);\n }\n}\nRegularPolygon.prototype.className = 'RegularPolygon';\nRegularPolygon.prototype._centroid = true;\nRegularPolygon.prototype._attrsAffectingSize = ['radius'];\n_registerNode(RegularPolygon);\nFactory.addGetterSetter(RegularPolygon, 'radius', 0, getNumberValidator());\nFactory.addGetterSetter(RegularPolygon, 'sides', 0, getNumberValidator());\n","import { Factory } from '../Factory.js';\nimport { Shape } from '../Shape.js';\nimport { getNumberValidator } from '../Validators.js';\nimport { _registerNode } from '../Global.js';\nvar PIx2 = Math.PI * 2;\nexport class Ring extends Shape {\n _sceneFunc(context) {\n context.beginPath();\n context.arc(0, 0, this.innerRadius(), 0, PIx2, false);\n context.moveTo(this.outerRadius(), 0);\n context.arc(0, 0, this.outerRadius(), PIx2, 0, true);\n context.closePath();\n context.fillStrokeShape(this);\n }\n getWidth() {\n return this.outerRadius() * 2;\n }\n getHeight() {\n return this.outerRadius() * 2;\n }\n setWidth(width) {\n this.outerRadius(width / 2);\n }\n setHeight(height) {\n this.outerRadius(height / 2);\n }\n}\nRing.prototype.className = 'Ring';\nRing.prototype._centroid = true;\nRing.prototype._attrsAffectingSize = ['innerRadius', 'outerRadius'];\n_registerNode(Ring);\nFactory.addGetterSetter(Ring, 'innerRadius', 0, getNumberValidator());\nFactory.addGetterSetter(Ring, 'outerRadius', 0, getNumberValidator());\n","import { Factory } from '../Factory.js';\nimport { Shape } from '../Shape.js';\nimport { Animation } from '../Animation.js';\nimport { getNumberValidator } from '../Validators.js';\nimport { _registerNode } from '../Global.js';\nexport class Sprite extends Shape {\n constructor(config) {\n super(config);\n this._updated = true;\n this.anim = new Animation(() => {\n var updated = this._updated;\n this._updated = false;\n return updated;\n });\n this.on('animationChange.konva', function () {\n this.frameIndex(0);\n });\n this.on('frameIndexChange.konva', function () {\n this._updated = true;\n });\n this.on('frameRateChange.konva', function () {\n if (!this.anim.isRunning()) {\n return;\n }\n clearInterval(this.interval);\n this._setInterval();\n });\n }\n _sceneFunc(context) {\n var anim = this.animation(), index = this.frameIndex(), ix4 = index * 4, set = this.animations()[anim], offsets = this.frameOffsets(), x = set[ix4 + 0], y = set[ix4 + 1], width = set[ix4 + 2], height = set[ix4 + 3], image = this.image();\n if (this.hasFill() || this.hasStroke()) {\n context.beginPath();\n context.rect(0, 0, width, height);\n context.closePath();\n context.fillStrokeShape(this);\n }\n if (image) {\n if (offsets) {\n var offset = offsets[anim], ix2 = index * 2;\n context.drawImage(image, x, y, width, height, offset[ix2 + 0], offset[ix2 + 1], width, height);\n }\n else {\n context.drawImage(image, x, y, width, height, 0, 0, width, height);\n }\n }\n }\n _hitFunc(context) {\n var anim = this.animation(), index = this.frameIndex(), ix4 = index * 4, set = this.animations()[anim], offsets = this.frameOffsets(), width = set[ix4 + 2], height = set[ix4 + 3];\n context.beginPath();\n if (offsets) {\n var offset = offsets[anim];\n var ix2 = index * 2;\n context.rect(offset[ix2 + 0], offset[ix2 + 1], width, height);\n }\n else {\n context.rect(0, 0, width, height);\n }\n context.closePath();\n context.fillShape(this);\n }\n _useBufferCanvas() {\n return super._useBufferCanvas(true);\n }\n _setInterval() {\n var that = this;\n this.interval = setInterval(function () {\n that._updateIndex();\n }, 1000 / this.frameRate());\n }\n start() {\n if (this.isRunning()) {\n return;\n }\n var layer = this.getLayer();\n this.anim.setLayers(layer);\n this._setInterval();\n this.anim.start();\n }\n stop() {\n this.anim.stop();\n clearInterval(this.interval);\n }\n isRunning() {\n return this.anim.isRunning();\n }\n _updateIndex() {\n var index = this.frameIndex(), animation = this.animation(), animations = this.animations(), anim = animations[animation], len = anim.length / 4;\n if (index < len - 1) {\n this.frameIndex(index + 1);\n }\n else {\n this.frameIndex(0);\n }\n }\n}\nSprite.prototype.className = 'Sprite';\n_registerNode(Sprite);\nFactory.addGetterSetter(Sprite, 'animation');\nFactory.addGetterSetter(Sprite, 'animations');\nFactory.addGetterSetter(Sprite, 'frameOffsets');\nFactory.addGetterSetter(Sprite, 'image');\nFactory.addGetterSetter(Sprite, 'frameIndex', 0, getNumberValidator());\nFactory.addGetterSetter(Sprite, 'frameRate', 17, getNumberValidator());\nFactory.backCompat(Sprite, {\n index: 'frameIndex',\n getIndex: 'getFrameIndex',\n setIndex: 'setFrameIndex',\n});\n","import { Factory } from '../Factory.js';\nimport { Shape } from '../Shape.js';\nimport { getNumberValidator } from '../Validators.js';\nimport { _registerNode } from '../Global.js';\nexport class Star extends Shape {\n _sceneFunc(context) {\n var innerRadius = this.innerRadius(), outerRadius = this.outerRadius(), numPoints = this.numPoints();\n context.beginPath();\n context.moveTo(0, 0 - outerRadius);\n for (var n = 1; n < numPoints * 2; n++) {\n var radius = n % 2 === 0 ? outerRadius : innerRadius;\n var x = radius * Math.sin((n * Math.PI) / numPoints);\n var y = -1 * radius * Math.cos((n * Math.PI) / numPoints);\n context.lineTo(x, y);\n }\n context.closePath();\n context.fillStrokeShape(this);\n }\n getWidth() {\n return this.outerRadius() * 2;\n }\n getHeight() {\n return this.outerRadius() * 2;\n }\n setWidth(width) {\n this.outerRadius(width / 2);\n }\n setHeight(height) {\n this.outerRadius(height / 2);\n }\n}\nStar.prototype.className = 'Star';\nStar.prototype._centroid = true;\nStar.prototype._attrsAffectingSize = ['innerRadius', 'outerRadius'];\n_registerNode(Star);\nFactory.addGetterSetter(Star, 'numPoints', 5, getNumberValidator());\nFactory.addGetterSetter(Star, 'innerRadius', 0, getNumberValidator());\nFactory.addGetterSetter(Star, 'outerRadius', 0, getNumberValidator());\n","import { Util } from '../Util.js';\nimport { Factory } from '../Factory.js';\nimport { Shape } from '../Shape.js';\nimport { getNumberValidator, getStringValidator, getNumberOrAutoValidator, getBooleanValidator, } from '../Validators.js';\nimport { _registerNode } from '../Global.js';\nexport function stringToArray(string) {\n return Array.from(string);\n}\nvar AUTO = 'auto', CENTER = 'center', JUSTIFY = 'justify', CHANGE_KONVA = 'Change.konva', CONTEXT_2D = '2d', DASH = '-', LEFT = 'left', TEXT = 'text', TEXT_UPPER = 'Text', TOP = 'top', BOTTOM = 'bottom', MIDDLE = 'middle', NORMAL = 'normal', PX_SPACE = 'px ', SPACE = ' ', RIGHT = 'right', WORD = 'word', CHAR = 'char', NONE = 'none', ELLIPSIS = '…', ATTR_CHANGE_LIST = [\n 'fontFamily',\n 'fontSize',\n 'fontStyle',\n 'fontVariant',\n 'padding',\n 'align',\n 'verticalAlign',\n 'lineHeight',\n 'text',\n 'width',\n 'height',\n 'wrap',\n 'ellipsis',\n 'letterSpacing',\n], attrChangeListLen = ATTR_CHANGE_LIST.length;\nfunction normalizeFontFamily(fontFamily) {\n return fontFamily\n .split(',')\n .map((family) => {\n family = family.trim();\n const hasSpace = family.indexOf(' ') >= 0;\n const hasQuotes = family.indexOf('\"') >= 0 || family.indexOf(\"'\") >= 0;\n if (hasSpace && !hasQuotes) {\n family = `\"${family}\"`;\n }\n return family;\n })\n .join(', ');\n}\nvar dummyContext;\nfunction getDummyContext() {\n if (dummyContext) {\n return dummyContext;\n }\n dummyContext = Util.createCanvasElement().getContext(CONTEXT_2D);\n return dummyContext;\n}\nfunction _fillFunc(context) {\n context.fillText(this._partialText, this._partialTextX, this._partialTextY);\n}\nfunction _strokeFunc(context) {\n context.strokeText(this._partialText, this._partialTextX, this._partialTextY);\n}\nfunction checkDefaultFill(config) {\n config = config || {};\n if (!config.fillLinearGradientColorStops &&\n !config.fillRadialGradientColorStops &&\n !config.fillPatternImage) {\n config.fill = config.fill || 'black';\n }\n return config;\n}\nexport class Text extends Shape {\n constructor(config) {\n super(checkDefaultFill(config));\n this._partialTextX = 0;\n this._partialTextY = 0;\n for (var n = 0; n < attrChangeListLen; n++) {\n this.on(ATTR_CHANGE_LIST[n] + CHANGE_KONVA, this._setTextData);\n }\n this._setTextData();\n }\n _sceneFunc(context) {\n var textArr = this.textArr, textArrLen = textArr.length;\n if (!this.text()) {\n return;\n }\n var padding = this.padding(), fontSize = this.fontSize(), lineHeightPx = this.lineHeight() * fontSize, verticalAlign = this.verticalAlign(), alignY = 0, align = this.align(), totalWidth = this.getWidth(), letterSpacing = this.letterSpacing(), fill = this.fill(), textDecoration = this.textDecoration(), shouldUnderline = textDecoration.indexOf('underline') !== -1, shouldLineThrough = textDecoration.indexOf('line-through') !== -1, n;\n var translateY = 0;\n var translateY = lineHeightPx / 2;\n var lineTranslateX = 0;\n var lineTranslateY = 0;\n context.setAttr('font', this._getContextFont());\n context.setAttr('textBaseline', MIDDLE);\n context.setAttr('textAlign', LEFT);\n if (verticalAlign === MIDDLE) {\n alignY = (this.getHeight() - textArrLen * lineHeightPx - padding * 2) / 2;\n }\n else if (verticalAlign === BOTTOM) {\n alignY = this.getHeight() - textArrLen * lineHeightPx - padding * 2;\n }\n context.translate(padding, alignY + padding);\n for (n = 0; n < textArrLen; n++) {\n var lineTranslateX = 0;\n var lineTranslateY = 0;\n var obj = textArr[n], text = obj.text, width = obj.width, lastLine = obj.lastInParagraph, spacesNumber, oneWord, lineWidth;\n context.save();\n if (align === RIGHT) {\n lineTranslateX += totalWidth - width - padding * 2;\n }\n else if (align === CENTER) {\n lineTranslateX += (totalWidth - width - padding * 2) / 2;\n }\n if (shouldUnderline) {\n context.save();\n context.beginPath();\n context.moveTo(lineTranslateX, translateY + lineTranslateY + Math.round(fontSize / 2));\n spacesNumber = text.split(' ').length - 1;\n oneWord = spacesNumber === 0;\n lineWidth =\n align === JUSTIFY && lastLine && !oneWord\n ? totalWidth - padding * 2\n : width;\n context.lineTo(lineTranslateX + Math.round(lineWidth), translateY + lineTranslateY + Math.round(fontSize / 2));\n context.lineWidth = fontSize / 15;\n context.strokeStyle = fill;\n context.stroke();\n context.restore();\n }\n if (shouldLineThrough) {\n context.save();\n context.beginPath();\n context.moveTo(lineTranslateX, translateY + lineTranslateY);\n spacesNumber = text.split(' ').length - 1;\n oneWord = spacesNumber === 0;\n lineWidth =\n align === JUSTIFY && lastLine && !oneWord\n ? totalWidth - padding * 2\n : width;\n context.lineTo(lineTranslateX + Math.round(lineWidth), translateY + lineTranslateY);\n context.lineWidth = fontSize / 15;\n context.strokeStyle = fill;\n context.stroke();\n context.restore();\n }\n if (letterSpacing !== 0 || align === JUSTIFY) {\n spacesNumber = text.split(' ').length - 1;\n var array = stringToArray(text);\n for (var li = 0; li < array.length; li++) {\n var letter = array[li];\n if (letter === ' ' && !lastLine && align === JUSTIFY) {\n lineTranslateX += (totalWidth - padding * 2 - width) / spacesNumber;\n }\n this._partialTextX = lineTranslateX;\n this._partialTextY = translateY + lineTranslateY;\n this._partialText = letter;\n context.fillStrokeShape(this);\n lineTranslateX += this.measureSize(letter).width + letterSpacing;\n }\n }\n else {\n this._partialTextX = lineTranslateX;\n this._partialTextY = translateY + lineTranslateY;\n this._partialText = text;\n context.fillStrokeShape(this);\n }\n context.restore();\n if (textArrLen > 1) {\n translateY += lineHeightPx;\n }\n }\n }\n _hitFunc(context) {\n var width = this.getWidth(), height = this.getHeight();\n context.beginPath();\n context.rect(0, 0, width, height);\n context.closePath();\n context.fillStrokeShape(this);\n }\n setText(text) {\n var str = Util._isString(text)\n ? text\n : text === null || text === undefined\n ? ''\n : text + '';\n this._setAttr(TEXT, str);\n return this;\n }\n getWidth() {\n var isAuto = this.attrs.width === AUTO || this.attrs.width === undefined;\n return isAuto ? this.getTextWidth() + this.padding() * 2 : this.attrs.width;\n }\n getHeight() {\n var isAuto = this.attrs.height === AUTO || this.attrs.height === undefined;\n return isAuto\n ? this.fontSize() * this.textArr.length * this.lineHeight() +\n this.padding() * 2\n : this.attrs.height;\n }\n getTextWidth() {\n return this.textWidth;\n }\n getTextHeight() {\n Util.warn('text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height.');\n return this.textHeight;\n }\n measureSize(text) {\n var _context = getDummyContext(), fontSize = this.fontSize(), metrics;\n _context.save();\n _context.font = this._getContextFont();\n metrics = _context.measureText(text);\n _context.restore();\n return {\n width: metrics.width,\n height: fontSize,\n };\n }\n _getContextFont() {\n return (this.fontStyle() +\n SPACE +\n this.fontVariant() +\n SPACE +\n (this.fontSize() + PX_SPACE) +\n normalizeFontFamily(this.fontFamily()));\n }\n _addTextLine(line) {\n if (this.align() === JUSTIFY) {\n line = line.trim();\n }\n var width = this._getTextWidth(line);\n return this.textArr.push({\n text: line,\n width: width,\n lastInParagraph: false,\n });\n }\n _getTextWidth(text) {\n var letterSpacing = this.letterSpacing();\n var length = text.length;\n return (getDummyContext().measureText(text).width +\n (length ? letterSpacing * (length - 1) : 0));\n }\n _setTextData() {\n var lines = this.text().split('\\n'), fontSize = +this.fontSize(), textWidth = 0, lineHeightPx = this.lineHeight() * fontSize, width = this.attrs.width, height = this.attrs.height, fixedWidth = width !== AUTO && width !== undefined, fixedHeight = height !== AUTO && height !== undefined, padding = this.padding(), maxWidth = width - padding * 2, maxHeightPx = height - padding * 2, currentHeightPx = 0, wrap = this.wrap(), shouldWrap = wrap !== NONE, wrapAtWord = wrap !== CHAR && shouldWrap, shouldAddEllipsis = this.ellipsis();\n this.textArr = [];\n getDummyContext().font = this._getContextFont();\n var additionalWidth = shouldAddEllipsis ? this._getTextWidth(ELLIPSIS) : 0;\n for (var i = 0, max = lines.length; i < max; ++i) {\n var line = lines[i];\n var lineWidth = this._getTextWidth(line);\n if (fixedWidth && lineWidth > maxWidth) {\n while (line.length > 0) {\n var low = 0, high = line.length, match = '', matchWidth = 0;\n while (low < high) {\n var mid = (low + high) >>> 1, substr = line.slice(0, mid + 1), substrWidth = this._getTextWidth(substr) + additionalWidth;\n if (substrWidth <= maxWidth) {\n low = mid + 1;\n match = substr;\n matchWidth = substrWidth;\n }\n else {\n high = mid;\n }\n }\n if (match) {\n if (wrapAtWord) {\n var wrapIndex;\n var nextChar = line[match.length];\n var nextIsSpaceOrDash = nextChar === SPACE || nextChar === DASH;\n if (nextIsSpaceOrDash && matchWidth <= maxWidth) {\n wrapIndex = match.length;\n }\n else {\n wrapIndex =\n Math.max(match.lastIndexOf(SPACE), match.lastIndexOf(DASH)) +\n 1;\n }\n if (wrapIndex > 0) {\n low = wrapIndex;\n match = match.slice(0, low);\n matchWidth = this._getTextWidth(match);\n }\n }\n match = match.trimRight();\n this._addTextLine(match);\n textWidth = Math.max(textWidth, matchWidth);\n currentHeightPx += lineHeightPx;\n var shouldHandleEllipsis = this._shouldHandleEllipsis(currentHeightPx);\n if (shouldHandleEllipsis) {\n this._tryToAddEllipsisToLastLine();\n break;\n }\n line = line.slice(low);\n line = line.trimLeft();\n if (line.length > 0) {\n lineWidth = this._getTextWidth(line);\n if (lineWidth <= maxWidth) {\n this._addTextLine(line);\n currentHeightPx += lineHeightPx;\n textWidth = Math.max(textWidth, lineWidth);\n break;\n }\n }\n }\n else {\n break;\n }\n }\n }\n else {\n this._addTextLine(line);\n currentHeightPx += lineHeightPx;\n textWidth = Math.max(textWidth, lineWidth);\n if (this._shouldHandleEllipsis(currentHeightPx) && i < max - 1) {\n this._tryToAddEllipsisToLastLine();\n }\n }\n if (fixedHeight && currentHeightPx + lineHeightPx > maxHeightPx) {\n break;\n }\n if (this.textArr[this.textArr.length - 1]) {\n this.textArr[this.textArr.length - 1].lastInParagraph = true;\n }\n }\n this.textHeight = fontSize;\n this.textWidth = textWidth;\n }\n _shouldHandleEllipsis(currentHeightPx) {\n var fontSize = +this.fontSize(), lineHeightPx = this.lineHeight() * fontSize, height = this.attrs.height, fixedHeight = height !== AUTO && height !== undefined, padding = this.padding(), maxHeightPx = height - padding * 2, wrap = this.wrap(), shouldWrap = wrap !== NONE;\n return (!shouldWrap ||\n (fixedHeight && currentHeightPx + lineHeightPx > maxHeightPx));\n }\n _tryToAddEllipsisToLastLine() {\n var width = this.attrs.width, fixedWidth = width !== AUTO && width !== undefined, padding = this.padding(), maxWidth = width - padding * 2, shouldAddEllipsis = this.ellipsis();\n var lastLine = this.textArr[this.textArr.length - 1];\n if (!lastLine || !shouldAddEllipsis) {\n return;\n }\n if (fixedWidth) {\n var haveSpace = this._getTextWidth(lastLine.text + ELLIPSIS) < maxWidth;\n if (!haveSpace) {\n lastLine.text = lastLine.text.slice(0, lastLine.text.length - 3);\n }\n }\n this.textArr.splice(this.textArr.length - 1, 1);\n this._addTextLine(lastLine.text + ELLIPSIS);\n }\n getStrokeScaleEnabled() {\n return true;\n }\n}\nText.prototype._fillFunc = _fillFunc;\nText.prototype._strokeFunc = _strokeFunc;\nText.prototype.className = TEXT_UPPER;\nText.prototype._attrsAffectingSize = [\n 'text',\n 'fontSize',\n 'padding',\n 'wrap',\n 'lineHeight',\n 'letterSpacing',\n];\n_registerNode(Text);\nFactory.overWriteSetter(Text, 'width', getNumberOrAutoValidator());\nFactory.overWriteSetter(Text, 'height', getNumberOrAutoValidator());\nFactory.addGetterSetter(Text, 'fontFamily', 'Arial');\nFactory.addGetterSetter(Text, 'fontSize', 12, getNumberValidator());\nFactory.addGetterSetter(Text, 'fontStyle', NORMAL);\nFactory.addGetterSetter(Text, 'fontVariant', NORMAL);\nFactory.addGetterSetter(Text, 'padding', 0, getNumberValidator());\nFactory.addGetterSetter(Text, 'align', LEFT);\nFactory.addGetterSetter(Text, 'verticalAlign', TOP);\nFactory.addGetterSetter(Text, 'lineHeight', 1, getNumberValidator());\nFactory.addGetterSetter(Text, 'wrap', WORD);\nFactory.addGetterSetter(Text, 'ellipsis', false, getBooleanValidator());\nFactory.addGetterSetter(Text, 'letterSpacing', 0, getNumberValidator());\nFactory.addGetterSetter(Text, 'text', '', getStringValidator());\nFactory.addGetterSetter(Text, 'textDecoration', '');\n","import { Util } from '../Util.js';\nimport { Factory } from '../Factory.js';\nimport { Shape } from '../Shape.js';\nimport { Path } from './Path.js';\nimport { Text, stringToArray } from './Text.js';\nimport { getNumberValidator } from '../Validators.js';\nimport { _registerNode } from '../Global.js';\nvar EMPTY_STRING = '', NORMAL = 'normal';\nfunction _fillFunc(context) {\n context.fillText(this.partialText, 0, 0);\n}\nfunction _strokeFunc(context) {\n context.strokeText(this.partialText, 0, 0);\n}\nexport class TextPath extends Shape {\n constructor(config) {\n super(config);\n this.dummyCanvas = Util.createCanvasElement();\n this.dataArray = [];\n this.dataArray = Path.parsePathData(this.attrs.data);\n this.on('dataChange.konva', function () {\n this.dataArray = Path.parsePathData(this.attrs.data);\n this._setTextData();\n });\n this.on('textChange.konva alignChange.konva letterSpacingChange.konva kerningFuncChange.konva fontSizeChange.konva fontFamilyChange.konva', this._setTextData);\n this._setTextData();\n }\n _sceneFunc(context) {\n context.setAttr('font', this._getContextFont());\n context.setAttr('textBaseline', this.textBaseline());\n context.setAttr('textAlign', 'left');\n context.save();\n var textDecoration = this.textDecoration();\n var fill = this.fill();\n var fontSize = this.fontSize();\n var glyphInfo = this.glyphInfo;\n if (textDecoration === 'underline') {\n context.beginPath();\n }\n for (var i = 0; i < glyphInfo.length; i++) {\n context.save();\n var p0 = glyphInfo[i].p0;\n context.translate(p0.x, p0.y);\n context.rotate(glyphInfo[i].rotation);\n this.partialText = glyphInfo[i].text;\n context.fillStrokeShape(this);\n if (textDecoration === 'underline') {\n if (i === 0) {\n context.moveTo(0, fontSize / 2 + 1);\n }\n context.lineTo(fontSize, fontSize / 2 + 1);\n }\n context.restore();\n }\n if (textDecoration === 'underline') {\n context.strokeStyle = fill;\n context.lineWidth = fontSize / 20;\n context.stroke();\n }\n context.restore();\n }\n _hitFunc(context) {\n context.beginPath();\n var glyphInfo = this.glyphInfo;\n if (glyphInfo.length >= 1) {\n var p0 = glyphInfo[0].p0;\n context.moveTo(p0.x, p0.y);\n }\n for (var i = 0; i < glyphInfo.length; i++) {\n var p1 = glyphInfo[i].p1;\n context.lineTo(p1.x, p1.y);\n }\n context.setAttr('lineWidth', this.fontSize());\n context.setAttr('strokeStyle', this.colorKey);\n context.stroke();\n }\n getTextWidth() {\n return this.textWidth;\n }\n getTextHeight() {\n Util.warn('text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height.');\n return this.textHeight;\n }\n setText(text) {\n return Text.prototype.setText.call(this, text);\n }\n _getContextFont() {\n return Text.prototype._getContextFont.call(this);\n }\n _getTextSize(text) {\n var dummyCanvas = this.dummyCanvas;\n var _context = dummyCanvas.getContext('2d');\n _context.save();\n _context.font = this._getContextFont();\n var metrics = _context.measureText(text);\n _context.restore();\n return {\n width: metrics.width,\n height: parseInt(this.attrs.fontSize, 10),\n };\n }\n _setTextData() {\n var that = this;\n var size = this._getTextSize(this.attrs.text);\n var letterSpacing = this.letterSpacing();\n var align = this.align();\n var kerningFunc = this.kerningFunc();\n this.textWidth = size.width;\n this.textHeight = size.height;\n var textFullWidth = Math.max(this.textWidth + ((this.attrs.text || '').length - 1) * letterSpacing, 0);\n this.glyphInfo = [];\n var fullPathWidth = 0;\n for (var l = 0; l < that.dataArray.length; l++) {\n if (that.dataArray[l].pathLength > 0) {\n fullPathWidth += that.dataArray[l].pathLength;\n }\n }\n var offset = 0;\n if (align === 'center') {\n offset = Math.max(0, fullPathWidth / 2 - textFullWidth / 2);\n }\n if (align === 'right') {\n offset = Math.max(0, fullPathWidth - textFullWidth);\n }\n var charArr = stringToArray(this.text());\n var spacesNumber = this.text().split(' ').length - 1;\n var p0, p1, pathCmd;\n var pIndex = -1;\n var currentT = 0;\n var getNextPathSegment = function () {\n currentT = 0;\n var pathData = that.dataArray;\n for (var j = pIndex + 1; j < pathData.length; j++) {\n if (pathData[j].pathLength > 0) {\n pIndex = j;\n return pathData[j];\n }\n else if (pathData[j].command === 'M') {\n p0 = {\n x: pathData[j].points[0],\n y: pathData[j].points[1],\n };\n }\n }\n return {};\n };\n var findSegmentToFitCharacter = function (c) {\n var glyphWidth = that._getTextSize(c).width + letterSpacing;\n if (c === ' ' && align === 'justify') {\n glyphWidth += (fullPathWidth - textFullWidth) / spacesNumber;\n }\n var currLen = 0;\n var attempts = 0;\n p1 = undefined;\n while (Math.abs(glyphWidth - currLen) / glyphWidth > 0.01 &&\n attempts < 20) {\n attempts++;\n var cumulativePathLength = currLen;\n while (pathCmd === undefined) {\n pathCmd = getNextPathSegment();\n if (pathCmd &&\n cumulativePathLength + pathCmd.pathLength < glyphWidth) {\n cumulativePathLength += pathCmd.pathLength;\n pathCmd = undefined;\n }\n }\n if (Object.keys(pathCmd).length === 0 || p0 === undefined) {\n return undefined;\n }\n var needNewSegment = false;\n switch (pathCmd.command) {\n case 'L':\n if (Path.getLineLength(p0.x, p0.y, pathCmd.points[0], pathCmd.points[1]) > glyphWidth) {\n p1 = Path.getPointOnLine(glyphWidth, p0.x, p0.y, pathCmd.points[0], pathCmd.points[1], p0.x, p0.y);\n }\n else {\n pathCmd = undefined;\n }\n break;\n case 'A':\n var start = pathCmd.points[4];\n var dTheta = pathCmd.points[5];\n var end = pathCmd.points[4] + dTheta;\n if (currentT === 0) {\n currentT = start + 0.00000001;\n }\n else if (glyphWidth > currLen) {\n currentT += ((Math.PI / 180.0) * dTheta) / Math.abs(dTheta);\n }\n else {\n currentT -= ((Math.PI / 360.0) * dTheta) / Math.abs(dTheta);\n }\n if ((dTheta < 0 && currentT < end) ||\n (dTheta >= 0 && currentT > end)) {\n currentT = end;\n needNewSegment = true;\n }\n p1 = Path.getPointOnEllipticalArc(pathCmd.points[0], pathCmd.points[1], pathCmd.points[2], pathCmd.points[3], currentT, pathCmd.points[6]);\n break;\n case 'C':\n if (currentT === 0) {\n if (glyphWidth > pathCmd.pathLength) {\n currentT = 0.00000001;\n }\n else {\n currentT = glyphWidth / pathCmd.pathLength;\n }\n }\n else if (glyphWidth > currLen) {\n currentT += (glyphWidth - currLen) / pathCmd.pathLength / 2;\n }\n else {\n currentT = Math.max(currentT - (currLen - glyphWidth) / pathCmd.pathLength / 2, 0);\n }\n if (currentT > 1.0) {\n currentT = 1.0;\n needNewSegment = true;\n }\n p1 = Path.getPointOnCubicBezier(currentT, pathCmd.start.x, pathCmd.start.y, pathCmd.points[0], pathCmd.points[1], pathCmd.points[2], pathCmd.points[3], pathCmd.points[4], pathCmd.points[5]);\n break;\n case 'Q':\n if (currentT === 0) {\n currentT = glyphWidth / pathCmd.pathLength;\n }\n else if (glyphWidth > currLen) {\n currentT += (glyphWidth - currLen) / pathCmd.pathLength;\n }\n else {\n currentT -= (currLen - glyphWidth) / pathCmd.pathLength;\n }\n if (currentT > 1.0) {\n currentT = 1.0;\n needNewSegment = true;\n }\n p1 = Path.getPointOnQuadraticBezier(currentT, pathCmd.start.x, pathCmd.start.y, pathCmd.points[0], pathCmd.points[1], pathCmd.points[2], pathCmd.points[3]);\n break;\n }\n if (p1 !== undefined) {\n currLen = Path.getLineLength(p0.x, p0.y, p1.x, p1.y);\n }\n if (needNewSegment) {\n needNewSegment = false;\n pathCmd = undefined;\n }\n }\n };\n var testChar = 'C';\n var glyphWidth = that._getTextSize(testChar).width + letterSpacing;\n var lettersInOffset = offset / glyphWidth - 1;\n for (var k = 0; k < lettersInOffset; k++) {\n findSegmentToFitCharacter(testChar);\n if (p0 === undefined || p1 === undefined) {\n break;\n }\n p0 = p1;\n }\n for (var i = 0; i < charArr.length; i++) {\n findSegmentToFitCharacter(charArr[i]);\n if (p0 === undefined || p1 === undefined) {\n break;\n }\n var width = Path.getLineLength(p0.x, p0.y, p1.x, p1.y);\n var kern = 0;\n if (kerningFunc) {\n try {\n kern = kerningFunc(charArr[i - 1], charArr[i]) * this.fontSize();\n }\n catch (e) {\n kern = 0;\n }\n }\n p0.x += kern;\n p1.x += kern;\n this.textWidth += kern;\n var midpoint = Path.getPointOnLine(kern + width / 2.0, p0.x, p0.y, p1.x, p1.y);\n var rotation = Math.atan2(p1.y - p0.y, p1.x - p0.x);\n this.glyphInfo.push({\n transposeX: midpoint.x,\n transposeY: midpoint.y,\n text: charArr[i],\n rotation: rotation,\n p0: p0,\n p1: p1,\n });\n p0 = p1;\n }\n }\n getSelfRect() {\n if (!this.glyphInfo.length) {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n };\n }\n var points = [];\n this.glyphInfo.forEach(function (info) {\n points.push(info.p0.x);\n points.push(info.p0.y);\n points.push(info.p1.x);\n points.push(info.p1.y);\n });\n var minX = points[0] || 0;\n var maxX = points[0] || 0;\n var minY = points[1] || 0;\n var maxY = points[1] || 0;\n var x, y;\n for (var i = 0; i < points.length / 2; i++) {\n x = points[i * 2];\n y = points[i * 2 + 1];\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, x);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y);\n }\n var fontSize = this.fontSize();\n return {\n x: minX - fontSize / 2,\n y: minY - fontSize / 2,\n width: maxX - minX + fontSize,\n height: maxY - minY + fontSize,\n };\n }\n destroy() {\n Util.releaseCanvas(this.dummyCanvas);\n return super.destroy();\n }\n}\nTextPath.prototype._fillFunc = _fillFunc;\nTextPath.prototype._strokeFunc = _strokeFunc;\nTextPath.prototype._fillFuncHit = _fillFunc;\nTextPath.prototype._strokeFuncHit = _strokeFunc;\nTextPath.prototype.className = 'TextPath';\nTextPath.prototype._attrsAffectingSize = ['text', 'fontSize', 'data'];\n_registerNode(TextPath);\nFactory.addGetterSetter(TextPath, 'data');\nFactory.addGetterSetter(TextPath, 'fontFamily', 'Arial');\nFactory.addGetterSetter(TextPath, 'fontSize', 12, getNumberValidator());\nFactory.addGetterSetter(TextPath, 'fontStyle', NORMAL);\nFactory.addGetterSetter(TextPath, 'align', 'left');\nFactory.addGetterSetter(TextPath, 'letterSpacing', 0, getNumberValidator());\nFactory.addGetterSetter(TextPath, 'textBaseline', 'middle');\nFactory.addGetterSetter(TextPath, 'fontVariant', NORMAL);\nFactory.addGetterSetter(TextPath, 'text', EMPTY_STRING);\nFactory.addGetterSetter(TextPath, 'textDecoration', null);\nFactory.addGetterSetter(TextPath, 'kerningFunc', null);\n","import { Util, Transform } from '../Util.js';\nimport { Factory } from '../Factory.js';\nimport { Node } from '../Node.js';\nimport { Shape } from '../Shape.js';\nimport { Rect } from './Rect.js';\nimport { Group } from '../Group.js';\nimport { Konva } from '../Global.js';\nimport { getBooleanValidator, getNumberValidator } from '../Validators.js';\nimport { _registerNode } from '../Global.js';\nvar EVENTS_NAME = 'tr-konva';\nvar ATTR_CHANGE_LIST = [\n 'resizeEnabledChange',\n 'rotateAnchorOffsetChange',\n 'rotateEnabledChange',\n 'enabledAnchorsChange',\n 'anchorSizeChange',\n 'borderEnabledChange',\n 'borderStrokeChange',\n 'borderStrokeWidthChange',\n 'borderDashChange',\n 'anchorStrokeChange',\n 'anchorStrokeWidthChange',\n 'anchorFillChange',\n 'anchorCornerRadiusChange',\n 'ignoreStrokeChange',\n]\n .map((e) => e + `.${EVENTS_NAME}`)\n .join(' ');\nvar NODES_RECT = 'nodesRect';\nvar TRANSFORM_CHANGE_STR = [\n 'widthChange',\n 'heightChange',\n 'scaleXChange',\n 'scaleYChange',\n 'skewXChange',\n 'skewYChange',\n 'rotationChange',\n 'offsetXChange',\n 'offsetYChange',\n 'transformsEnabledChange',\n 'strokeWidthChange',\n];\nvar ANGLES = {\n 'top-left': -45,\n 'top-center': 0,\n 'top-right': 45,\n 'middle-right': -90,\n 'middle-left': 90,\n 'bottom-left': -135,\n 'bottom-center': 180,\n 'bottom-right': 135,\n};\nconst TOUCH_DEVICE = 'ontouchstart' in Konva._global;\nfunction getCursor(anchorName, rad) {\n if (anchorName === 'rotater') {\n return 'crosshair';\n }\n rad += Util.degToRad(ANGLES[anchorName] || 0);\n var angle = ((Util.radToDeg(rad) % 360) + 360) % 360;\n if (Util._inRange(angle, 315 + 22.5, 360) || Util._inRange(angle, 0, 22.5)) {\n return 'ns-resize';\n }\n else if (Util._inRange(angle, 45 - 22.5, 45 + 22.5)) {\n return 'nesw-resize';\n }\n else if (Util._inRange(angle, 90 - 22.5, 90 + 22.5)) {\n return 'ew-resize';\n }\n else if (Util._inRange(angle, 135 - 22.5, 135 + 22.5)) {\n return 'nwse-resize';\n }\n else if (Util._inRange(angle, 180 - 22.5, 180 + 22.5)) {\n return 'ns-resize';\n }\n else if (Util._inRange(angle, 225 - 22.5, 225 + 22.5)) {\n return 'nesw-resize';\n }\n else if (Util._inRange(angle, 270 - 22.5, 270 + 22.5)) {\n return 'ew-resize';\n }\n else if (Util._inRange(angle, 315 - 22.5, 315 + 22.5)) {\n return 'nwse-resize';\n }\n else {\n Util.error('Transformer has unknown angle for cursor detection: ' + angle);\n return 'pointer';\n }\n}\nvar ANCHORS_NAMES = [\n 'top-left',\n 'top-center',\n 'top-right',\n 'middle-right',\n 'middle-left',\n 'bottom-left',\n 'bottom-center',\n 'bottom-right',\n];\nvar MAX_SAFE_INTEGER = 100000000;\nfunction getCenter(shape) {\n return {\n x: shape.x +\n (shape.width / 2) * Math.cos(shape.rotation) +\n (shape.height / 2) * Math.sin(-shape.rotation),\n y: shape.y +\n (shape.height / 2) * Math.cos(shape.rotation) +\n (shape.width / 2) * Math.sin(shape.rotation),\n };\n}\nfunction rotateAroundPoint(shape, angleRad, point) {\n const x = point.x +\n (shape.x - point.x) * Math.cos(angleRad) -\n (shape.y - point.y) * Math.sin(angleRad);\n const y = point.y +\n (shape.x - point.x) * Math.sin(angleRad) +\n (shape.y - point.y) * Math.cos(angleRad);\n return Object.assign(Object.assign({}, shape), { rotation: shape.rotation + angleRad, x,\n y });\n}\nfunction rotateAroundCenter(shape, deltaRad) {\n const center = getCenter(shape);\n return rotateAroundPoint(shape, deltaRad, center);\n}\nfunction getSnap(snaps, newRotationRad, tol) {\n let snapped = newRotationRad;\n for (let i = 0; i < snaps.length; i++) {\n const angle = Konva.getAngle(snaps[i]);\n const absDiff = Math.abs(angle - newRotationRad) % (Math.PI * 2);\n const dif = Math.min(absDiff, Math.PI * 2 - absDiff);\n if (dif < tol) {\n snapped = angle;\n }\n }\n return snapped;\n}\nexport class Transformer extends Group {\n constructor(config) {\n super(config);\n this._transforming = false;\n this._createElements();\n this._handleMouseMove = this._handleMouseMove.bind(this);\n this._handleMouseUp = this._handleMouseUp.bind(this);\n this.update = this.update.bind(this);\n this.on(ATTR_CHANGE_LIST, this.update);\n if (this.getNode()) {\n this.update();\n }\n }\n attachTo(node) {\n this.setNode(node);\n return this;\n }\n setNode(node) {\n Util.warn('tr.setNode(shape), tr.node(shape) and tr.attachTo(shape) methods are deprecated. Please use tr.nodes(nodesArray) instead.');\n return this.setNodes([node]);\n }\n getNode() {\n return this._nodes && this._nodes[0];\n }\n _getEventNamespace() {\n return EVENTS_NAME + this._id;\n }\n setNodes(nodes = []) {\n if (this._nodes && this._nodes.length) {\n this.detach();\n }\n this._nodes = nodes;\n if (nodes.length === 1 && this.useSingleNodeRotation()) {\n this.rotation(nodes[0].getAbsoluteRotation());\n }\n else {\n this.rotation(0);\n }\n this._nodes.forEach((node) => {\n const onChange = () => {\n if (this.nodes().length === 1 && this.useSingleNodeRotation()) {\n this.rotation(this.nodes()[0].getAbsoluteRotation());\n }\n this._resetTransformCache();\n if (!this._transforming && !this.isDragging()) {\n this.update();\n }\n };\n const additionalEvents = node._attrsAffectingSize\n .map((prop) => prop + 'Change.' + this._getEventNamespace())\n .join(' ');\n node.on(additionalEvents, onChange);\n node.on(TRANSFORM_CHANGE_STR.map((e) => e + `.${this._getEventNamespace()}`).join(' '), onChange);\n node.on(`absoluteTransformChange.${this._getEventNamespace()}`, onChange);\n this._proxyDrag(node);\n });\n this._resetTransformCache();\n var elementsCreated = !!this.findOne('.top-left');\n if (elementsCreated) {\n this.update();\n }\n return this;\n }\n _proxyDrag(node) {\n let lastPos;\n node.on(`dragstart.${this._getEventNamespace()}`, (e) => {\n lastPos = node.getAbsolutePosition();\n if (!this.isDragging() && node !== this.findOne('.back')) {\n this.startDrag(e, false);\n }\n });\n node.on(`dragmove.${this._getEventNamespace()}`, (e) => {\n if (!lastPos) {\n return;\n }\n const abs = node.getAbsolutePosition();\n const dx = abs.x - lastPos.x;\n const dy = abs.y - lastPos.y;\n this.nodes().forEach((otherNode) => {\n if (otherNode === node) {\n return;\n }\n if (otherNode.isDragging()) {\n return;\n }\n const otherAbs = otherNode.getAbsolutePosition();\n otherNode.setAbsolutePosition({\n x: otherAbs.x + dx,\n y: otherAbs.y + dy,\n });\n otherNode.startDrag(e);\n });\n lastPos = null;\n });\n }\n getNodes() {\n return this._nodes || [];\n }\n getActiveAnchor() {\n return this._movingAnchorName;\n }\n detach() {\n if (this._nodes) {\n this._nodes.forEach((node) => {\n node.off('.' + this._getEventNamespace());\n });\n }\n this._nodes = [];\n this._resetTransformCache();\n }\n _resetTransformCache() {\n this._clearCache(NODES_RECT);\n this._clearCache('transform');\n this._clearSelfAndDescendantCache('absoluteTransform');\n }\n _getNodeRect() {\n return this._getCache(NODES_RECT, this.__getNodeRect);\n }\n __getNodeShape(node, rot = this.rotation(), relative) {\n var rect = node.getClientRect({\n skipTransform: true,\n skipShadow: true,\n skipStroke: this.ignoreStroke(),\n });\n var absScale = node.getAbsoluteScale(relative);\n var absPos = node.getAbsolutePosition(relative);\n var dx = rect.x * absScale.x - node.offsetX() * absScale.x;\n var dy = rect.y * absScale.y - node.offsetY() * absScale.y;\n const rotation = (Konva.getAngle(node.getAbsoluteRotation()) + Math.PI * 2) %\n (Math.PI * 2);\n const box = {\n x: absPos.x + dx * Math.cos(rotation) + dy * Math.sin(-rotation),\n y: absPos.y + dy * Math.cos(rotation) + dx * Math.sin(rotation),\n width: rect.width * absScale.x,\n height: rect.height * absScale.y,\n rotation: rotation,\n };\n return rotateAroundPoint(box, -Konva.getAngle(rot), {\n x: 0,\n y: 0,\n });\n }\n __getNodeRect() {\n var node = this.getNode();\n if (!node) {\n return {\n x: -MAX_SAFE_INTEGER,\n y: -MAX_SAFE_INTEGER,\n width: 0,\n height: 0,\n rotation: 0,\n };\n }\n const totalPoints = [];\n this.nodes().map((node) => {\n const box = node.getClientRect({\n skipTransform: true,\n skipShadow: true,\n skipStroke: this.ignoreStroke(),\n });\n var points = [\n { x: box.x, y: box.y },\n { x: box.x + box.width, y: box.y },\n { x: box.x + box.width, y: box.y + box.height },\n { x: box.x, y: box.y + box.height },\n ];\n var trans = node.getAbsoluteTransform();\n points.forEach(function (point) {\n var transformed = trans.point(point);\n totalPoints.push(transformed);\n });\n });\n const tr = new Transform();\n tr.rotate(-Konva.getAngle(this.rotation()));\n var minX, minY, maxX, maxY;\n totalPoints.forEach(function (point) {\n var transformed = tr.point(point);\n if (minX === undefined) {\n minX = maxX = transformed.x;\n minY = maxY = transformed.y;\n }\n minX = Math.min(minX, transformed.x);\n minY = Math.min(minY, transformed.y);\n maxX = Math.max(maxX, transformed.x);\n maxY = Math.max(maxY, transformed.y);\n });\n tr.invert();\n const p = tr.point({ x: minX, y: minY });\n return {\n x: p.x,\n y: p.y,\n width: maxX - minX,\n height: maxY - minY,\n rotation: Konva.getAngle(this.rotation()),\n };\n }\n getX() {\n return this._getNodeRect().x;\n }\n getY() {\n return this._getNodeRect().y;\n }\n getWidth() {\n return this._getNodeRect().width;\n }\n getHeight() {\n return this._getNodeRect().height;\n }\n _createElements() {\n this._createBack();\n ANCHORS_NAMES.forEach(function (name) {\n this._createAnchor(name);\n }.bind(this));\n this._createAnchor('rotater');\n }\n _createAnchor(name) {\n var anchor = new Rect({\n stroke: 'rgb(0, 161, 255)',\n fill: 'white',\n strokeWidth: 1,\n name: name + ' _anchor',\n dragDistance: 0,\n draggable: true,\n hitStrokeWidth: TOUCH_DEVICE ? 10 : 'auto',\n });\n var self = this;\n anchor.on('mousedown touchstart', function (e) {\n self._handleMouseDown(e);\n });\n anchor.on('dragstart', (e) => {\n anchor.stopDrag();\n e.cancelBubble = true;\n });\n anchor.on('dragend', (e) => {\n e.cancelBubble = true;\n });\n anchor.on('mouseenter', () => {\n var rad = Konva.getAngle(this.rotation());\n var cursor = getCursor(name, rad);\n anchor.getStage().content &&\n (anchor.getStage().content.style.cursor = cursor);\n this._cursorChange = true;\n });\n anchor.on('mouseout', () => {\n anchor.getStage().content &&\n (anchor.getStage().content.style.cursor = '');\n this._cursorChange = false;\n });\n this.add(anchor);\n }\n _createBack() {\n var back = new Shape({\n name: 'back',\n width: 0,\n height: 0,\n draggable: true,\n sceneFunc(ctx) {\n var tr = this.getParent();\n var padding = tr.padding();\n ctx.beginPath();\n ctx.rect(-padding, -padding, this.width() + padding * 2, this.height() + padding * 2);\n ctx.moveTo(this.width() / 2, -padding);\n if (tr.rotateEnabled()) {\n ctx.lineTo(this.width() / 2, -tr.rotateAnchorOffset() * Util._sign(this.height()) - padding);\n }\n ctx.fillStrokeShape(this);\n },\n hitFunc: (ctx, shape) => {\n if (!this.shouldOverdrawWholeArea()) {\n return;\n }\n var padding = this.padding();\n ctx.beginPath();\n ctx.rect(-padding, -padding, shape.width() + padding * 2, shape.height() + padding * 2);\n ctx.fillStrokeShape(shape);\n },\n });\n this.add(back);\n this._proxyDrag(back);\n back.on('dragstart', (e) => {\n e.cancelBubble = true;\n });\n back.on('dragmove', (e) => {\n e.cancelBubble = true;\n });\n back.on('dragend', (e) => {\n e.cancelBubble = true;\n });\n this.on('dragmove', (e) => {\n this.update();\n });\n }\n _handleMouseDown(e) {\n this._movingAnchorName = e.target.name().split(' ')[0];\n var attrs = this._getNodeRect();\n var width = attrs.width;\n var height = attrs.height;\n var hypotenuse = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2));\n this.sin = Math.abs(height / hypotenuse);\n this.cos = Math.abs(width / hypotenuse);\n if (typeof window !== 'undefined') {\n window.addEventListener('mousemove', this._handleMouseMove);\n window.addEventListener('touchmove', this._handleMouseMove);\n window.addEventListener('mouseup', this._handleMouseUp, true);\n window.addEventListener('touchend', this._handleMouseUp, true);\n }\n this._transforming = true;\n var ap = e.target.getAbsolutePosition();\n var pos = e.target.getStage().getPointerPosition();\n this._anchorDragOffset = {\n x: pos.x - ap.x,\n y: pos.y - ap.y,\n };\n this._fire('transformstart', { evt: e.evt, target: this.getNode() });\n this._nodes.forEach((target) => {\n target._fire('transformstart', { evt: e.evt, target });\n });\n }\n _handleMouseMove(e) {\n var x, y, newHypotenuse;\n var anchorNode = this.findOne('.' + this._movingAnchorName);\n var stage = anchorNode.getStage();\n stage.setPointersPositions(e);\n const pp = stage.getPointerPosition();\n let newNodePos = {\n x: pp.x - this._anchorDragOffset.x,\n y: pp.y - this._anchorDragOffset.y,\n };\n const oldAbs = anchorNode.getAbsolutePosition();\n if (this.anchorDragBoundFunc()) {\n newNodePos = this.anchorDragBoundFunc()(oldAbs, newNodePos, e);\n }\n anchorNode.setAbsolutePosition(newNodePos);\n const newAbs = anchorNode.getAbsolutePosition();\n if (oldAbs.x === newAbs.x && oldAbs.y === newAbs.y) {\n return;\n }\n if (this._movingAnchorName === 'rotater') {\n var attrs = this._getNodeRect();\n x = anchorNode.x() - attrs.width / 2;\n y = -anchorNode.y() + attrs.height / 2;\n let delta = Math.atan2(-y, x) + Math.PI / 2;\n if (attrs.height < 0) {\n delta -= Math.PI;\n }\n var oldRotation = Konva.getAngle(this.rotation());\n const newRotation = oldRotation + delta;\n const tol = Konva.getAngle(this.rotationSnapTolerance());\n const snappedRot = getSnap(this.rotationSnaps(), newRotation, tol);\n const diff = snappedRot - attrs.rotation;\n const shape = rotateAroundCenter(attrs, diff);\n this._fitNodesInto(shape, e);\n return;\n }\n var keepProportion = this.keepRatio() || e.shiftKey;\n var centeredScaling = this.centeredScaling() || e.altKey;\n if (this._movingAnchorName === 'top-left') {\n if (keepProportion) {\n var comparePoint = centeredScaling\n ? {\n x: this.width() / 2,\n y: this.height() / 2,\n }\n : {\n x: this.findOne('.bottom-right').x(),\n y: this.findOne('.bottom-right').y(),\n };\n newHypotenuse = Math.sqrt(Math.pow(comparePoint.x - anchorNode.x(), 2) +\n Math.pow(comparePoint.y - anchorNode.y(), 2));\n var reverseX = this.findOne('.top-left').x() > comparePoint.x ? -1 : 1;\n var reverseY = this.findOne('.top-left').y() > comparePoint.y ? -1 : 1;\n x = newHypotenuse * this.cos * reverseX;\n y = newHypotenuse * this.sin * reverseY;\n this.findOne('.top-left').x(comparePoint.x - x);\n this.findOne('.top-left').y(comparePoint.y - y);\n }\n }\n else if (this._movingAnchorName === 'top-center') {\n this.findOne('.top-left').y(anchorNode.y());\n }\n else if (this._movingAnchorName === 'top-right') {\n if (keepProportion) {\n var comparePoint = centeredScaling\n ? {\n x: this.width() / 2,\n y: this.height() / 2,\n }\n : {\n x: this.findOne('.bottom-left').x(),\n y: this.findOne('.bottom-left').y(),\n };\n newHypotenuse = Math.sqrt(Math.pow(anchorNode.x() - comparePoint.x, 2) +\n Math.pow(comparePoint.y - anchorNode.y(), 2));\n var reverseX = this.findOne('.top-right').x() < comparePoint.x ? -1 : 1;\n var reverseY = this.findOne('.top-right').y() > comparePoint.y ? -1 : 1;\n x = newHypotenuse * this.cos * reverseX;\n y = newHypotenuse * this.sin * reverseY;\n this.findOne('.top-right').x(comparePoint.x + x);\n this.findOne('.top-right').y(comparePoint.y - y);\n }\n var pos = anchorNode.position();\n this.findOne('.top-left').y(pos.y);\n this.findOne('.bottom-right').x(pos.x);\n }\n else if (this._movingAnchorName === 'middle-left') {\n this.findOne('.top-left').x(anchorNode.x());\n }\n else if (this._movingAnchorName === 'middle-right') {\n this.findOne('.bottom-right').x(anchorNode.x());\n }\n else if (this._movingAnchorName === 'bottom-left') {\n if (keepProportion) {\n var comparePoint = centeredScaling\n ? {\n x: this.width() / 2,\n y: this.height() / 2,\n }\n : {\n x: this.findOne('.top-right').x(),\n y: this.findOne('.top-right').y(),\n };\n newHypotenuse = Math.sqrt(Math.pow(comparePoint.x - anchorNode.x(), 2) +\n Math.pow(anchorNode.y() - comparePoint.y, 2));\n var reverseX = comparePoint.x < anchorNode.x() ? -1 : 1;\n var reverseY = anchorNode.y() < comparePoint.y ? -1 : 1;\n x = newHypotenuse * this.cos * reverseX;\n y = newHypotenuse * this.sin * reverseY;\n anchorNode.x(comparePoint.x - x);\n anchorNode.y(comparePoint.y + y);\n }\n pos = anchorNode.position();\n this.findOne('.top-left').x(pos.x);\n this.findOne('.bottom-right').y(pos.y);\n }\n else if (this._movingAnchorName === 'bottom-center') {\n this.findOne('.bottom-right').y(anchorNode.y());\n }\n else if (this._movingAnchorName === 'bottom-right') {\n if (keepProportion) {\n var comparePoint = centeredScaling\n ? {\n x: this.width() / 2,\n y: this.height() / 2,\n }\n : {\n x: this.findOne('.top-left').x(),\n y: this.findOne('.top-left').y(),\n };\n newHypotenuse = Math.sqrt(Math.pow(anchorNode.x() - comparePoint.x, 2) +\n Math.pow(anchorNode.y() - comparePoint.y, 2));\n var reverseX = this.findOne('.bottom-right').x() < comparePoint.x ? -1 : 1;\n var reverseY = this.findOne('.bottom-right').y() < comparePoint.y ? -1 : 1;\n x = newHypotenuse * this.cos * reverseX;\n y = newHypotenuse * this.sin * reverseY;\n this.findOne('.bottom-right').x(comparePoint.x + x);\n this.findOne('.bottom-right').y(comparePoint.y + y);\n }\n }\n else {\n console.error(new Error('Wrong position argument of selection resizer: ' +\n this._movingAnchorName));\n }\n var centeredScaling = this.centeredScaling() || e.altKey;\n if (centeredScaling) {\n var topLeft = this.findOne('.top-left');\n var bottomRight = this.findOne('.bottom-right');\n var topOffsetX = topLeft.x();\n var topOffsetY = topLeft.y();\n var bottomOffsetX = this.getWidth() - bottomRight.x();\n var bottomOffsetY = this.getHeight() - bottomRight.y();\n bottomRight.move({\n x: -topOffsetX,\n y: -topOffsetY,\n });\n topLeft.move({\n x: bottomOffsetX,\n y: bottomOffsetY,\n });\n }\n var absPos = this.findOne('.top-left').getAbsolutePosition();\n x = absPos.x;\n y = absPos.y;\n var width = this.findOne('.bottom-right').x() - this.findOne('.top-left').x();\n var height = this.findOne('.bottom-right').y() - this.findOne('.top-left').y();\n this._fitNodesInto({\n x: x,\n y: y,\n width: width,\n height: height,\n rotation: Konva.getAngle(this.rotation()),\n }, e);\n }\n _handleMouseUp(e) {\n this._removeEvents(e);\n }\n getAbsoluteTransform() {\n return this.getTransform();\n }\n _removeEvents(e) {\n if (this._transforming) {\n this._transforming = false;\n if (typeof window !== 'undefined') {\n window.removeEventListener('mousemove', this._handleMouseMove);\n window.removeEventListener('touchmove', this._handleMouseMove);\n window.removeEventListener('mouseup', this._handleMouseUp, true);\n window.removeEventListener('touchend', this._handleMouseUp, true);\n }\n var node = this.getNode();\n this._fire('transformend', { evt: e, target: node });\n if (node) {\n this._nodes.forEach((target) => {\n target._fire('transformend', { evt: e, target });\n });\n }\n this._movingAnchorName = null;\n }\n }\n _fitNodesInto(newAttrs, evt) {\n var oldAttrs = this._getNodeRect();\n const minSize = 1;\n if (Util._inRange(newAttrs.width, -this.padding() * 2 - minSize, minSize)) {\n this.update();\n return;\n }\n if (Util._inRange(newAttrs.height, -this.padding() * 2 - minSize, minSize)) {\n this.update();\n return;\n }\n const allowNegativeScale = this.flipEnabled();\n var t = new Transform();\n t.rotate(Konva.getAngle(this.rotation()));\n if (this._movingAnchorName &&\n newAttrs.width < 0 &&\n this._movingAnchorName.indexOf('left') >= 0) {\n const offset = t.point({\n x: -this.padding() * 2,\n y: 0,\n });\n newAttrs.x += offset.x;\n newAttrs.y += offset.y;\n newAttrs.width += this.padding() * 2;\n this._movingAnchorName = this._movingAnchorName.replace('left', 'right');\n this._anchorDragOffset.x -= offset.x;\n this._anchorDragOffset.y -= offset.y;\n if (!allowNegativeScale) {\n this.update();\n return;\n }\n }\n else if (this._movingAnchorName &&\n newAttrs.width < 0 &&\n this._movingAnchorName.indexOf('right') >= 0) {\n const offset = t.point({\n x: this.padding() * 2,\n y: 0,\n });\n this._movingAnchorName = this._movingAnchorName.replace('right', 'left');\n this._anchorDragOffset.x -= offset.x;\n this._anchorDragOffset.y -= offset.y;\n newAttrs.width += this.padding() * 2;\n if (!allowNegativeScale) {\n this.update();\n return;\n }\n }\n if (this._movingAnchorName &&\n newAttrs.height < 0 &&\n this._movingAnchorName.indexOf('top') >= 0) {\n const offset = t.point({\n x: 0,\n y: -this.padding() * 2,\n });\n newAttrs.x += offset.x;\n newAttrs.y += offset.y;\n this._movingAnchorName = this._movingAnchorName.replace('top', 'bottom');\n this._anchorDragOffset.x -= offset.x;\n this._anchorDragOffset.y -= offset.y;\n newAttrs.height += this.padding() * 2;\n if (!allowNegativeScale) {\n this.update();\n return;\n }\n }\n else if (this._movingAnchorName &&\n newAttrs.height < 0 &&\n this._movingAnchorName.indexOf('bottom') >= 0) {\n const offset = t.point({\n x: 0,\n y: this.padding() * 2,\n });\n this._movingAnchorName = this._movingAnchorName.replace('bottom', 'top');\n this._anchorDragOffset.x -= offset.x;\n this._anchorDragOffset.y -= offset.y;\n newAttrs.height += this.padding() * 2;\n if (!allowNegativeScale) {\n this.update();\n return;\n }\n }\n if (this.boundBoxFunc()) {\n const bounded = this.boundBoxFunc()(oldAttrs, newAttrs);\n if (bounded) {\n newAttrs = bounded;\n }\n else {\n Util.warn('boundBoxFunc returned falsy. You should return new bound rect from it!');\n }\n }\n const baseSize = 10000000;\n const oldTr = new Transform();\n oldTr.translate(oldAttrs.x, oldAttrs.y);\n oldTr.rotate(oldAttrs.rotation);\n oldTr.scale(oldAttrs.width / baseSize, oldAttrs.height / baseSize);\n const newTr = new Transform();\n newTr.translate(newAttrs.x, newAttrs.y);\n newTr.rotate(newAttrs.rotation);\n newTr.scale(newAttrs.width / baseSize, newAttrs.height / baseSize);\n const delta = newTr.multiply(oldTr.invert());\n this._nodes.forEach((node) => {\n var _a;\n const parentTransform = node.getParent().getAbsoluteTransform();\n const localTransform = node.getTransform().copy();\n localTransform.translate(node.offsetX(), node.offsetY());\n const newLocalTransform = new Transform();\n newLocalTransform\n .multiply(parentTransform.copy().invert())\n .multiply(delta)\n .multiply(parentTransform)\n .multiply(localTransform);\n const attrs = newLocalTransform.decompose();\n node.setAttrs(attrs);\n this._fire('transform', { evt: evt, target: node });\n node._fire('transform', { evt: evt, target: node });\n (_a = node.getLayer()) === null || _a === void 0 ? void 0 : _a.batchDraw();\n });\n this.rotation(Util._getRotation(newAttrs.rotation));\n this._resetTransformCache();\n this.update();\n this.getLayer().batchDraw();\n }\n forceUpdate() {\n this._resetTransformCache();\n this.update();\n }\n _batchChangeChild(selector, attrs) {\n const anchor = this.findOne(selector);\n anchor.setAttrs(attrs);\n }\n update() {\n var _a;\n var attrs = this._getNodeRect();\n this.rotation(Util._getRotation(attrs.rotation));\n var width = attrs.width;\n var height = attrs.height;\n var enabledAnchors = this.enabledAnchors();\n var resizeEnabled = this.resizeEnabled();\n var padding = this.padding();\n var anchorSize = this.anchorSize();\n this.find('._anchor').forEach((node) => {\n node.setAttrs({\n width: anchorSize,\n height: anchorSize,\n offsetX: anchorSize / 2,\n offsetY: anchorSize / 2,\n stroke: this.anchorStroke(),\n strokeWidth: this.anchorStrokeWidth(),\n fill: this.anchorFill(),\n cornerRadius: this.anchorCornerRadius(),\n });\n });\n this._batchChangeChild('.top-left', {\n x: 0,\n y: 0,\n offsetX: anchorSize / 2 + padding,\n offsetY: anchorSize / 2 + padding,\n visible: resizeEnabled && enabledAnchors.indexOf('top-left') >= 0,\n });\n this._batchChangeChild('.top-center', {\n x: width / 2,\n y: 0,\n offsetY: anchorSize / 2 + padding,\n visible: resizeEnabled && enabledAnchors.indexOf('top-center') >= 0,\n });\n this._batchChangeChild('.top-right', {\n x: width,\n y: 0,\n offsetX: anchorSize / 2 - padding,\n offsetY: anchorSize / 2 + padding,\n visible: resizeEnabled && enabledAnchors.indexOf('top-right') >= 0,\n });\n this._batchChangeChild('.middle-left', {\n x: 0,\n y: height / 2,\n offsetX: anchorSize / 2 + padding,\n visible: resizeEnabled && enabledAnchors.indexOf('middle-left') >= 0,\n });\n this._batchChangeChild('.middle-right', {\n x: width,\n y: height / 2,\n offsetX: anchorSize / 2 - padding,\n visible: resizeEnabled && enabledAnchors.indexOf('middle-right') >= 0,\n });\n this._batchChangeChild('.bottom-left', {\n x: 0,\n y: height,\n offsetX: anchorSize / 2 + padding,\n offsetY: anchorSize / 2 - padding,\n visible: resizeEnabled && enabledAnchors.indexOf('bottom-left') >= 0,\n });\n this._batchChangeChild('.bottom-center', {\n x: width / 2,\n y: height,\n offsetY: anchorSize / 2 - padding,\n visible: resizeEnabled && enabledAnchors.indexOf('bottom-center') >= 0,\n });\n this._batchChangeChild('.bottom-right', {\n x: width,\n y: height,\n offsetX: anchorSize / 2 - padding,\n offsetY: anchorSize / 2 - padding,\n visible: resizeEnabled && enabledAnchors.indexOf('bottom-right') >= 0,\n });\n this._batchChangeChild('.rotater', {\n x: width / 2,\n y: -this.rotateAnchorOffset() * Util._sign(height) - padding,\n visible: this.rotateEnabled(),\n });\n this._batchChangeChild('.back', {\n width: width,\n height: height,\n visible: this.borderEnabled(),\n stroke: this.borderStroke(),\n strokeWidth: this.borderStrokeWidth(),\n dash: this.borderDash(),\n x: 0,\n y: 0,\n });\n (_a = this.getLayer()) === null || _a === void 0 ? void 0 : _a.batchDraw();\n }\n isTransforming() {\n return this._transforming;\n }\n stopTransform() {\n if (this._transforming) {\n this._removeEvents();\n var anchorNode = this.findOne('.' + this._movingAnchorName);\n if (anchorNode) {\n anchorNode.stopDrag();\n }\n }\n }\n destroy() {\n if (this.getStage() && this._cursorChange) {\n this.getStage().content && (this.getStage().content.style.cursor = '');\n }\n Group.prototype.destroy.call(this);\n this.detach();\n this._removeEvents();\n return this;\n }\n toObject() {\n return Node.prototype.toObject.call(this);\n }\n getClientRect() {\n if (this.nodes().length > 0) {\n return super.getClientRect();\n }\n else {\n return { x: 0, y: 0, width: 0, height: 0 };\n }\n }\n}\nfunction validateAnchors(val) {\n if (!(val instanceof Array)) {\n Util.warn('enabledAnchors value should be an array');\n }\n if (val instanceof Array) {\n val.forEach(function (name) {\n if (ANCHORS_NAMES.indexOf(name) === -1) {\n Util.warn('Unknown anchor name: ' +\n name +\n '. Available names are: ' +\n ANCHORS_NAMES.join(', '));\n }\n });\n }\n return val || [];\n}\nTransformer.prototype.className = 'Transformer';\n_registerNode(Transformer);\nFactory.addGetterSetter(Transformer, 'enabledAnchors', ANCHORS_NAMES, validateAnchors);\nFactory.addGetterSetter(Transformer, 'flipEnabled', true, getBooleanValidator());\nFactory.addGetterSetter(Transformer, 'resizeEnabled', true);\nFactory.addGetterSetter(Transformer, 'anchorSize', 10, getNumberValidator());\nFactory.addGetterSetter(Transformer, 'rotateEnabled', true);\nFactory.addGetterSetter(Transformer, 'rotationSnaps', []);\nFactory.addGetterSetter(Transformer, 'rotateAnchorOffset', 50, getNumberValidator());\nFactory.addGetterSetter(Transformer, 'rotationSnapTolerance', 5, getNumberValidator());\nFactory.addGetterSetter(Transformer, 'borderEnabled', true);\nFactory.addGetterSetter(Transformer, 'anchorStroke', 'rgb(0, 161, 255)');\nFactory.addGetterSetter(Transformer, 'anchorStrokeWidth', 1, getNumberValidator());\nFactory.addGetterSetter(Transformer, 'anchorFill', 'white');\nFactory.addGetterSetter(Transformer, 'anchorCornerRadius', 0, getNumberValidator());\nFactory.addGetterSetter(Transformer, 'borderStroke', 'rgb(0, 161, 255)');\nFactory.addGetterSetter(Transformer, 'borderStrokeWidth', 1, getNumberValidator());\nFactory.addGetterSetter(Transformer, 'borderDash');\nFactory.addGetterSetter(Transformer, 'keepRatio', true);\nFactory.addGetterSetter(Transformer, 'centeredScaling', false);\nFactory.addGetterSetter(Transformer, 'ignoreStroke', false);\nFactory.addGetterSetter(Transformer, 'padding', 0, getNumberValidator());\nFactory.addGetterSetter(Transformer, 'node');\nFactory.addGetterSetter(Transformer, 'nodes');\nFactory.addGetterSetter(Transformer, 'boundBoxFunc');\nFactory.addGetterSetter(Transformer, 'anchorDragBoundFunc');\nFactory.addGetterSetter(Transformer, 'shouldOverdrawWholeArea', false);\nFactory.addGetterSetter(Transformer, 'useSingleNodeRotation', true);\nFactory.backCompat(Transformer, {\n lineEnabled: 'borderEnabled',\n rotateHandlerOffset: 'rotateAnchorOffset',\n enabledHandlers: 'enabledAnchors',\n});\n","import { Factory } from '../Factory.js';\nimport { Shape } from '../Shape.js';\nimport { Konva } from '../Global.js';\nimport { getNumberValidator } from '../Validators.js';\nimport { _registerNode } from '../Global.js';\nexport class Wedge extends Shape {\n _sceneFunc(context) {\n context.beginPath();\n context.arc(0, 0, this.radius(), 0, Konva.getAngle(this.angle()), this.clockwise());\n context.lineTo(0, 0);\n context.closePath();\n context.fillStrokeShape(this);\n }\n getWidth() {\n return this.radius() * 2;\n }\n getHeight() {\n return this.radius() * 2;\n }\n setWidth(width) {\n this.radius(width / 2);\n }\n setHeight(height) {\n this.radius(height / 2);\n }\n}\nWedge.prototype.className = 'Wedge';\nWedge.prototype._centroid = true;\nWedge.prototype._attrsAffectingSize = ['radius'];\n_registerNode(Wedge);\nFactory.addGetterSetter(Wedge, 'radius', 0, getNumberValidator());\nFactory.addGetterSetter(Wedge, 'angle', 0, getNumberValidator());\nFactory.addGetterSetter(Wedge, 'clockwise', false);\nFactory.backCompat(Wedge, {\n angleDeg: 'angle',\n getAngleDeg: 'getAngle',\n setAngleDeg: 'setAngle',\n});\n","import { Factory } from '../Factory.js';\nimport { Node } from '../Node.js';\nimport { getNumberValidator } from '../Validators.js';\nfunction BlurStack() {\n this.r = 0;\n this.g = 0;\n this.b = 0;\n this.a = 0;\n this.next = null;\n}\nvar mul_table = [\n 512,\n 512,\n 456,\n 512,\n 328,\n 456,\n 335,\n 512,\n 405,\n 328,\n 271,\n 456,\n 388,\n 335,\n 292,\n 512,\n 454,\n 405,\n 364,\n 328,\n 298,\n 271,\n 496,\n 456,\n 420,\n 388,\n 360,\n 335,\n 312,\n 292,\n 273,\n 512,\n 482,\n 454,\n 428,\n 405,\n 383,\n 364,\n 345,\n 328,\n 312,\n 298,\n 284,\n 271,\n 259,\n 496,\n 475,\n 456,\n 437,\n 420,\n 404,\n 388,\n 374,\n 360,\n 347,\n 335,\n 323,\n 312,\n 302,\n 292,\n 282,\n 273,\n 265,\n 512,\n 497,\n 482,\n 468,\n 454,\n 441,\n 428,\n 417,\n 405,\n 394,\n 383,\n 373,\n 364,\n 354,\n 345,\n 337,\n 328,\n 320,\n 312,\n 305,\n 298,\n 291,\n 284,\n 278,\n 271,\n 265,\n 259,\n 507,\n 496,\n 485,\n 475,\n 465,\n 456,\n 446,\n 437,\n 428,\n 420,\n 412,\n 404,\n 396,\n 388,\n 381,\n 374,\n 367,\n 360,\n 354,\n 347,\n 341,\n 335,\n 329,\n 323,\n 318,\n 312,\n 307,\n 302,\n 297,\n 292,\n 287,\n 282,\n 278,\n 273,\n 269,\n 265,\n 261,\n 512,\n 505,\n 497,\n 489,\n 482,\n 475,\n 468,\n 461,\n 454,\n 447,\n 441,\n 435,\n 428,\n 422,\n 417,\n 411,\n 405,\n 399,\n 394,\n 389,\n 383,\n 378,\n 373,\n 368,\n 364,\n 359,\n 354,\n 350,\n 345,\n 341,\n 337,\n 332,\n 328,\n 324,\n 320,\n 316,\n 312,\n 309,\n 305,\n 301,\n 298,\n 294,\n 291,\n 287,\n 284,\n 281,\n 278,\n 274,\n 271,\n 268,\n 265,\n 262,\n 259,\n 257,\n 507,\n 501,\n 496,\n 491,\n 485,\n 480,\n 475,\n 470,\n 465,\n 460,\n 456,\n 451,\n 446,\n 442,\n 437,\n 433,\n 428,\n 424,\n 420,\n 416,\n 412,\n 408,\n 404,\n 400,\n 396,\n 392,\n 388,\n 385,\n 381,\n 377,\n 374,\n 370,\n 367,\n 363,\n 360,\n 357,\n 354,\n 350,\n 347,\n 344,\n 341,\n 338,\n 335,\n 332,\n 329,\n 326,\n 323,\n 320,\n 318,\n 315,\n 312,\n 310,\n 307,\n 304,\n 302,\n 299,\n 297,\n 294,\n 292,\n 289,\n 287,\n 285,\n 282,\n 280,\n 278,\n 275,\n 273,\n 271,\n 269,\n 267,\n 265,\n 263,\n 261,\n 259,\n];\nvar shg_table = [\n 9,\n 11,\n 12,\n 13,\n 13,\n 14,\n 14,\n 15,\n 15,\n 15,\n 15,\n 16,\n 16,\n 16,\n 16,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 18,\n 18,\n 18,\n 18,\n 18,\n 18,\n 18,\n 18,\n 18,\n 19,\n 19,\n 19,\n 19,\n 19,\n 19,\n 19,\n 19,\n 19,\n 19,\n 19,\n 19,\n 19,\n 19,\n 20,\n 20,\n 20,\n 20,\n 20,\n 20,\n 20,\n 20,\n 20,\n 20,\n 20,\n 20,\n 20,\n 20,\n 20,\n 20,\n 20,\n 20,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 21,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 22,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n];\nfunction filterGaussBlurRGBA(imageData, radius) {\n var pixels = imageData.data, width = imageData.width, height = imageData.height;\n var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, a_sum, r_out_sum, g_out_sum, b_out_sum, a_out_sum, r_in_sum, g_in_sum, b_in_sum, a_in_sum, pr, pg, pb, pa, rbs;\n var div = radius + radius + 1, widthMinus1 = width - 1, heightMinus1 = height - 1, radiusPlus1 = radius + 1, sumFactor = (radiusPlus1 * (radiusPlus1 + 1)) / 2, stackStart = new BlurStack(), stackEnd = null, stack = stackStart, stackIn = null, stackOut = null, mul_sum = mul_table[radius], shg_sum = shg_table[radius];\n for (i = 1; i < div; i++) {\n stack = stack.next = new BlurStack();\n if (i === radiusPlus1) {\n stackEnd = stack;\n }\n }\n stack.next = stackStart;\n yw = yi = 0;\n for (y = 0; y < height; y++) {\n r_in_sum = g_in_sum = b_in_sum = a_in_sum = r_sum = g_sum = b_sum = a_sum = 0;\n r_out_sum = radiusPlus1 * (pr = pixels[yi]);\n g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);\n b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);\n a_out_sum = radiusPlus1 * (pa = pixels[yi + 3]);\n r_sum += sumFactor * pr;\n g_sum += sumFactor * pg;\n b_sum += sumFactor * pb;\n a_sum += sumFactor * pa;\n stack = stackStart;\n for (i = 0; i < radiusPlus1; i++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack.a = pa;\n stack = stack.next;\n }\n for (i = 1; i < radiusPlus1; i++) {\n p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);\n r_sum += (stack.r = pr = pixels[p]) * (rbs = radiusPlus1 - i);\n g_sum += (stack.g = pg = pixels[p + 1]) * rbs;\n b_sum += (stack.b = pb = pixels[p + 2]) * rbs;\n a_sum += (stack.a = pa = pixels[p + 3]) * rbs;\n r_in_sum += pr;\n g_in_sum += pg;\n b_in_sum += pb;\n a_in_sum += pa;\n stack = stack.next;\n }\n stackIn = stackStart;\n stackOut = stackEnd;\n for (x = 0; x < width; x++) {\n pixels[yi + 3] = pa = (a_sum * mul_sum) >> shg_sum;\n if (pa !== 0) {\n pa = 255 / pa;\n pixels[yi] = ((r_sum * mul_sum) >> shg_sum) * pa;\n pixels[yi + 1] = ((g_sum * mul_sum) >> shg_sum) * pa;\n pixels[yi + 2] = ((b_sum * mul_sum) >> shg_sum) * pa;\n }\n else {\n pixels[yi] = pixels[yi + 1] = pixels[yi + 2] = 0;\n }\n r_sum -= r_out_sum;\n g_sum -= g_out_sum;\n b_sum -= b_out_sum;\n a_sum -= a_out_sum;\n r_out_sum -= stackIn.r;\n g_out_sum -= stackIn.g;\n b_out_sum -= stackIn.b;\n a_out_sum -= stackIn.a;\n p = (yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1)) << 2;\n r_in_sum += stackIn.r = pixels[p];\n g_in_sum += stackIn.g = pixels[p + 1];\n b_in_sum += stackIn.b = pixels[p + 2];\n a_in_sum += stackIn.a = pixels[p + 3];\n r_sum += r_in_sum;\n g_sum += g_in_sum;\n b_sum += b_in_sum;\n a_sum += a_in_sum;\n stackIn = stackIn.next;\n r_out_sum += pr = stackOut.r;\n g_out_sum += pg = stackOut.g;\n b_out_sum += pb = stackOut.b;\n a_out_sum += pa = stackOut.a;\n r_in_sum -= pr;\n g_in_sum -= pg;\n b_in_sum -= pb;\n a_in_sum -= pa;\n stackOut = stackOut.next;\n yi += 4;\n }\n yw += width;\n }\n for (x = 0; x < width; x++) {\n g_in_sum = b_in_sum = a_in_sum = r_in_sum = g_sum = b_sum = a_sum = r_sum = 0;\n yi = x << 2;\n r_out_sum = radiusPlus1 * (pr = pixels[yi]);\n g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);\n b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);\n a_out_sum = radiusPlus1 * (pa = pixels[yi + 3]);\n r_sum += sumFactor * pr;\n g_sum += sumFactor * pg;\n b_sum += sumFactor * pb;\n a_sum += sumFactor * pa;\n stack = stackStart;\n for (i = 0; i < radiusPlus1; i++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack.a = pa;\n stack = stack.next;\n }\n yp = width;\n for (i = 1; i <= radius; i++) {\n yi = (yp + x) << 2;\n r_sum += (stack.r = pr = pixels[yi]) * (rbs = radiusPlus1 - i);\n g_sum += (stack.g = pg = pixels[yi + 1]) * rbs;\n b_sum += (stack.b = pb = pixels[yi + 2]) * rbs;\n a_sum += (stack.a = pa = pixels[yi + 3]) * rbs;\n r_in_sum += pr;\n g_in_sum += pg;\n b_in_sum += pb;\n a_in_sum += pa;\n stack = stack.next;\n if (i < heightMinus1) {\n yp += width;\n }\n }\n yi = x;\n stackIn = stackStart;\n stackOut = stackEnd;\n for (y = 0; y < height; y++) {\n p = yi << 2;\n pixels[p + 3] = pa = (a_sum * mul_sum) >> shg_sum;\n if (pa > 0) {\n pa = 255 / pa;\n pixels[p] = ((r_sum * mul_sum) >> shg_sum) * pa;\n pixels[p + 1] = ((g_sum * mul_sum) >> shg_sum) * pa;\n pixels[p + 2] = ((b_sum * mul_sum) >> shg_sum) * pa;\n }\n else {\n pixels[p] = pixels[p + 1] = pixels[p + 2] = 0;\n }\n r_sum -= r_out_sum;\n g_sum -= g_out_sum;\n b_sum -= b_out_sum;\n a_sum -= a_out_sum;\n r_out_sum -= stackIn.r;\n g_out_sum -= stackIn.g;\n b_out_sum -= stackIn.b;\n a_out_sum -= stackIn.a;\n p =\n (x +\n ((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width) <<\n 2;\n r_sum += r_in_sum += stackIn.r = pixels[p];\n g_sum += g_in_sum += stackIn.g = pixels[p + 1];\n b_sum += b_in_sum += stackIn.b = pixels[p + 2];\n a_sum += a_in_sum += stackIn.a = pixels[p + 3];\n stackIn = stackIn.next;\n r_out_sum += pr = stackOut.r;\n g_out_sum += pg = stackOut.g;\n b_out_sum += pb = stackOut.b;\n a_out_sum += pa = stackOut.a;\n r_in_sum -= pr;\n g_in_sum -= pg;\n b_in_sum -= pb;\n a_in_sum -= pa;\n stackOut = stackOut.next;\n yi += width;\n }\n }\n}\nexport const Blur = function Blur(imageData) {\n var radius = Math.round(this.blurRadius());\n if (radius > 0) {\n filterGaussBlurRGBA(imageData, radius);\n }\n};\nFactory.addGetterSetter(Node, 'blurRadius', 0, getNumberValidator(), Factory.afterSetFilter);\n","import { Factory } from '../Factory.js';\nimport { Node } from '../Node.js';\nimport { getNumberValidator } from '../Validators.js';\nexport const Brighten = function (imageData) {\n var brightness = this.brightness() * 255, data = imageData.data, len = data.length, i;\n for (i = 0; i < len; i += 4) {\n data[i] += brightness;\n data[i + 1] += brightness;\n data[i + 2] += brightness;\n }\n};\nFactory.addGetterSetter(Node, 'brightness', 0, getNumberValidator(), Factory.afterSetFilter);\n","import { Factory } from '../Factory.js';\nimport { Node } from '../Node.js';\nimport { getNumberValidator } from '../Validators.js';\nexport const Contrast = function (imageData) {\n var adjust = Math.pow((this.contrast() + 100) / 100, 2);\n var data = imageData.data, nPixels = data.length, red = 150, green = 150, blue = 150, i;\n for (i = 0; i < nPixels; i += 4) {\n red = data[i];\n green = data[i + 1];\n blue = data[i + 2];\n red /= 255;\n red -= 0.5;\n red *= adjust;\n red += 0.5;\n red *= 255;\n green /= 255;\n green -= 0.5;\n green *= adjust;\n green += 0.5;\n green *= 255;\n blue /= 255;\n blue -= 0.5;\n blue *= adjust;\n blue += 0.5;\n blue *= 255;\n red = red < 0 ? 0 : red > 255 ? 255 : red;\n green = green < 0 ? 0 : green > 255 ? 255 : green;\n blue = blue < 0 ? 0 : blue > 255 ? 255 : blue;\n data[i] = red;\n data[i + 1] = green;\n data[i + 2] = blue;\n }\n};\nFactory.addGetterSetter(Node, 'contrast', 0, getNumberValidator(), Factory.afterSetFilter);\n","import { Factory } from '../Factory.js';\nimport { Node } from '../Node.js';\nimport { Util } from '../Util.js';\nimport { getNumberValidator } from '../Validators.js';\nexport const Emboss = function (imageData) {\n var strength = this.embossStrength() * 10, greyLevel = this.embossWhiteLevel() * 255, direction = this.embossDirection(), blend = this.embossBlend(), dirY = 0, dirX = 0, data = imageData.data, w = imageData.width, h = imageData.height, w4 = w * 4, y = h;\n switch (direction) {\n case 'top-left':\n dirY = -1;\n dirX = -1;\n break;\n case 'top':\n dirY = -1;\n dirX = 0;\n break;\n case 'top-right':\n dirY = -1;\n dirX = 1;\n break;\n case 'right':\n dirY = 0;\n dirX = 1;\n break;\n case 'bottom-right':\n dirY = 1;\n dirX = 1;\n break;\n case 'bottom':\n dirY = 1;\n dirX = 0;\n break;\n case 'bottom-left':\n dirY = 1;\n dirX = -1;\n break;\n case 'left':\n dirY = 0;\n dirX = -1;\n break;\n default:\n Util.error('Unknown emboss direction: ' + direction);\n }\n do {\n var offsetY = (y - 1) * w4;\n var otherY = dirY;\n if (y + otherY < 1) {\n otherY = 0;\n }\n if (y + otherY > h) {\n otherY = 0;\n }\n var offsetYOther = (y - 1 + otherY) * w * 4;\n var x = w;\n do {\n var offset = offsetY + (x - 1) * 4;\n var otherX = dirX;\n if (x + otherX < 1) {\n otherX = 0;\n }\n if (x + otherX > w) {\n otherX = 0;\n }\n var offsetOther = offsetYOther + (x - 1 + otherX) * 4;\n var dR = data[offset] - data[offsetOther];\n var dG = data[offset + 1] - data[offsetOther + 1];\n var dB = data[offset + 2] - data[offsetOther + 2];\n var dif = dR;\n var absDif = dif > 0 ? dif : -dif;\n var absG = dG > 0 ? dG : -dG;\n var absB = dB > 0 ? dB : -dB;\n if (absG > absDif) {\n dif = dG;\n }\n if (absB > absDif) {\n dif = dB;\n }\n dif *= strength;\n if (blend) {\n var r = data[offset] + dif;\n var g = data[offset + 1] + dif;\n var b = data[offset + 2] + dif;\n data[offset] = r > 255 ? 255 : r < 0 ? 0 : r;\n data[offset + 1] = g > 255 ? 255 : g < 0 ? 0 : g;\n data[offset + 2] = b > 255 ? 255 : b < 0 ? 0 : b;\n }\n else {\n var grey = greyLevel - dif;\n if (grey < 0) {\n grey = 0;\n }\n else if (grey > 255) {\n grey = 255;\n }\n data[offset] = data[offset + 1] = data[offset + 2] = grey;\n }\n } while (--x);\n } while (--y);\n};\nFactory.addGetterSetter(Node, 'embossStrength', 0.5, getNumberValidator(), Factory.afterSetFilter);\nFactory.addGetterSetter(Node, 'embossWhiteLevel', 0.5, getNumberValidator(), Factory.afterSetFilter);\nFactory.addGetterSetter(Node, 'embossDirection', 'top-left', null, Factory.afterSetFilter);\nFactory.addGetterSetter(Node, 'embossBlend', false, null, Factory.afterSetFilter);\n","import { Factory } from '../Factory.js';\nimport { Node } from '../Node.js';\nimport { getNumberValidator } from '../Validators.js';\nfunction remap(fromValue, fromMin, fromMax, toMin, toMax) {\n var fromRange = fromMax - fromMin, toRange = toMax - toMin, toValue;\n if (fromRange === 0) {\n return toMin + toRange / 2;\n }\n if (toRange === 0) {\n return toMin;\n }\n toValue = (fromValue - fromMin) / fromRange;\n toValue = toRange * toValue + toMin;\n return toValue;\n}\nexport const Enhance = function (imageData) {\n var data = imageData.data, nSubPixels = data.length, rMin = data[0], rMax = rMin, r, gMin = data[1], gMax = gMin, g, bMin = data[2], bMax = bMin, b, i;\n var enhanceAmount = this.enhance();\n if (enhanceAmount === 0) {\n return;\n }\n for (i = 0; i < nSubPixels; i += 4) {\n r = data[i + 0];\n if (r < rMin) {\n rMin = r;\n }\n else if (r > rMax) {\n rMax = r;\n }\n g = data[i + 1];\n if (g < gMin) {\n gMin = g;\n }\n else if (g > gMax) {\n gMax = g;\n }\n b = data[i + 2];\n if (b < bMin) {\n bMin = b;\n }\n else if (b > bMax) {\n bMax = b;\n }\n }\n if (rMax === rMin) {\n rMax = 255;\n rMin = 0;\n }\n if (gMax === gMin) {\n gMax = 255;\n gMin = 0;\n }\n if (bMax === bMin) {\n bMax = 255;\n bMin = 0;\n }\n var rMid, rGoalMax, rGoalMin, gMid, gGoalMax, gGoalMin, bMid, bGoalMax, bGoalMin;\n if (enhanceAmount > 0) {\n rGoalMax = rMax + enhanceAmount * (255 - rMax);\n rGoalMin = rMin - enhanceAmount * (rMin - 0);\n gGoalMax = gMax + enhanceAmount * (255 - gMax);\n gGoalMin = gMin - enhanceAmount * (gMin - 0);\n bGoalMax = bMax + enhanceAmount * (255 - bMax);\n bGoalMin = bMin - enhanceAmount * (bMin - 0);\n }\n else {\n rMid = (rMax + rMin) * 0.5;\n rGoalMax = rMax + enhanceAmount * (rMax - rMid);\n rGoalMin = rMin + enhanceAmount * (rMin - rMid);\n gMid = (gMax + gMin) * 0.5;\n gGoalMax = gMax + enhanceAmount * (gMax - gMid);\n gGoalMin = gMin + enhanceAmount * (gMin - gMid);\n bMid = (bMax + bMin) * 0.5;\n bGoalMax = bMax + enhanceAmount * (bMax - bMid);\n bGoalMin = bMin + enhanceAmount * (bMin - bMid);\n }\n for (i = 0; i < nSubPixels; i += 4) {\n data[i + 0] = remap(data[i + 0], rMin, rMax, rGoalMin, rGoalMax);\n data[i + 1] = remap(data[i + 1], gMin, gMax, gGoalMin, gGoalMax);\n data[i + 2] = remap(data[i + 2], bMin, bMax, bGoalMin, bGoalMax);\n }\n};\nFactory.addGetterSetter(Node, 'enhance', 0, getNumberValidator(), Factory.afterSetFilter);\n","export const Grayscale = function (imageData) {\n var data = imageData.data, len = data.length, i, brightness;\n for (i = 0; i < len; i += 4) {\n brightness = 0.34 * data[i] + 0.5 * data[i + 1] + 0.16 * data[i + 2];\n data[i] = brightness;\n data[i + 1] = brightness;\n data[i + 2] = brightness;\n }\n};\n","import { Factory } from '../Factory.js';\nimport { Node } from '../Node.js';\nimport { getNumberValidator } from '../Validators.js';\nFactory.addGetterSetter(Node, 'hue', 0, getNumberValidator(), Factory.afterSetFilter);\nFactory.addGetterSetter(Node, 'saturation', 0, getNumberValidator(), Factory.afterSetFilter);\nFactory.addGetterSetter(Node, 'luminance', 0, getNumberValidator(), Factory.afterSetFilter);\nexport const HSL = function (imageData) {\n var data = imageData.data, nPixels = data.length, v = 1, s = Math.pow(2, this.saturation()), h = Math.abs(this.hue() + 360) % 360, l = this.luminance() * 127, i;\n var vsu = v * s * Math.cos((h * Math.PI) / 180), vsw = v * s * Math.sin((h * Math.PI) / 180);\n var rr = 0.299 * v + 0.701 * vsu + 0.167 * vsw, rg = 0.587 * v - 0.587 * vsu + 0.33 * vsw, rb = 0.114 * v - 0.114 * vsu - 0.497 * vsw;\n var gr = 0.299 * v - 0.299 * vsu - 0.328 * vsw, gg = 0.587 * v + 0.413 * vsu + 0.035 * vsw, gb = 0.114 * v - 0.114 * vsu + 0.293 * vsw;\n var br = 0.299 * v - 0.3 * vsu + 1.25 * vsw, bg = 0.587 * v - 0.586 * vsu - 1.05 * vsw, bb = 0.114 * v + 0.886 * vsu - 0.2 * vsw;\n var r, g, b, a;\n for (i = 0; i < nPixels; i += 4) {\n r = data[i + 0];\n g = data[i + 1];\n b = data[i + 2];\n a = data[i + 3];\n data[i + 0] = rr * r + rg * g + rb * b + l;\n data[i + 1] = gr * r + gg * g + gb * b + l;\n data[i + 2] = br * r + bg * g + bb * b + l;\n data[i + 3] = a;\n }\n};\n","import { Factory } from '../Factory.js';\nimport { Node } from '../Node.js';\nimport { getNumberValidator } from '../Validators.js';\nexport const HSV = function (imageData) {\n var data = imageData.data, nPixels = data.length, v = Math.pow(2, this.value()), s = Math.pow(2, this.saturation()), h = Math.abs(this.hue() + 360) % 360, i;\n var vsu = v * s * Math.cos((h * Math.PI) / 180), vsw = v * s * Math.sin((h * Math.PI) / 180);\n var rr = 0.299 * v + 0.701 * vsu + 0.167 * vsw, rg = 0.587 * v - 0.587 * vsu + 0.33 * vsw, rb = 0.114 * v - 0.114 * vsu - 0.497 * vsw;\n var gr = 0.299 * v - 0.299 * vsu - 0.328 * vsw, gg = 0.587 * v + 0.413 * vsu + 0.035 * vsw, gb = 0.114 * v - 0.114 * vsu + 0.293 * vsw;\n var br = 0.299 * v - 0.3 * vsu + 1.25 * vsw, bg = 0.587 * v - 0.586 * vsu - 1.05 * vsw, bb = 0.114 * v + 0.886 * vsu - 0.2 * vsw;\n var r, g, b, a;\n for (i = 0; i < nPixels; i += 4) {\n r = data[i + 0];\n g = data[i + 1];\n b = data[i + 2];\n a = data[i + 3];\n data[i + 0] = rr * r + rg * g + rb * b;\n data[i + 1] = gr * r + gg * g + gb * b;\n data[i + 2] = br * r + bg * g + bb * b;\n data[i + 3] = a;\n }\n};\nFactory.addGetterSetter(Node, 'hue', 0, getNumberValidator(), Factory.afterSetFilter);\nFactory.addGetterSetter(Node, 'saturation', 0, getNumberValidator(), Factory.afterSetFilter);\nFactory.addGetterSetter(Node, 'value', 0, getNumberValidator(), Factory.afterSetFilter);\n","export const Invert = function (imageData) {\n var data = imageData.data, len = data.length, i;\n for (i = 0; i < len; i += 4) {\n data[i] = 255 - data[i];\n data[i + 1] = 255 - data[i + 1];\n data[i + 2] = 255 - data[i + 2];\n }\n};\n","import { Factory } from '../Factory.js';\nimport { Node } from '../Node.js';\nimport { Util } from '../Util.js';\nimport { getNumberValidator } from '../Validators.js';\nvar ToPolar = function (src, dst, opt) {\n var srcPixels = src.data, dstPixels = dst.data, xSize = src.width, ySize = src.height, xMid = opt.polarCenterX || xSize / 2, yMid = opt.polarCenterY || ySize / 2, i, x, y, r = 0, g = 0, b = 0, a = 0;\n var rad, rMax = Math.sqrt(xMid * xMid + yMid * yMid);\n x = xSize - xMid;\n y = ySize - yMid;\n rad = Math.sqrt(x * x + y * y);\n rMax = rad > rMax ? rad : rMax;\n var rSize = ySize, tSize = xSize, radius, theta;\n var conversion = ((360 / tSize) * Math.PI) / 180, sin, cos;\n for (theta = 0; theta < tSize; theta += 1) {\n sin = Math.sin(theta * conversion);\n cos = Math.cos(theta * conversion);\n for (radius = 0; radius < rSize; radius += 1) {\n x = Math.floor(xMid + ((rMax * radius) / rSize) * cos);\n y = Math.floor(yMid + ((rMax * radius) / rSize) * sin);\n i = (y * xSize + x) * 4;\n r = srcPixels[i + 0];\n g = srcPixels[i + 1];\n b = srcPixels[i + 2];\n a = srcPixels[i + 3];\n i = (theta + radius * xSize) * 4;\n dstPixels[i + 0] = r;\n dstPixels[i + 1] = g;\n dstPixels[i + 2] = b;\n dstPixels[i + 3] = a;\n }\n }\n};\nvar FromPolar = function (src, dst, opt) {\n var srcPixels = src.data, dstPixels = dst.data, xSize = src.width, ySize = src.height, xMid = opt.polarCenterX || xSize / 2, yMid = opt.polarCenterY || ySize / 2, i, x, y, dx, dy, r = 0, g = 0, b = 0, a = 0;\n var rad, rMax = Math.sqrt(xMid * xMid + yMid * yMid);\n x = xSize - xMid;\n y = ySize - yMid;\n rad = Math.sqrt(x * x + y * y);\n rMax = rad > rMax ? rad : rMax;\n var rSize = ySize, tSize = xSize, radius, theta, phaseShift = opt.polarRotation || 0;\n var x1, y1;\n for (x = 0; x < xSize; x += 1) {\n for (y = 0; y < ySize; y += 1) {\n dx = x - xMid;\n dy = y - yMid;\n radius = (Math.sqrt(dx * dx + dy * dy) * rSize) / rMax;\n theta = ((Math.atan2(dy, dx) * 180) / Math.PI + 360 + phaseShift) % 360;\n theta = (theta * tSize) / 360;\n x1 = Math.floor(theta);\n y1 = Math.floor(radius);\n i = (y1 * xSize + x1) * 4;\n r = srcPixels[i + 0];\n g = srcPixels[i + 1];\n b = srcPixels[i + 2];\n a = srcPixels[i + 3];\n i = (y * xSize + x) * 4;\n dstPixels[i + 0] = r;\n dstPixels[i + 1] = g;\n dstPixels[i + 2] = b;\n dstPixels[i + 3] = a;\n }\n }\n};\nexport const Kaleidoscope = function (imageData) {\n var xSize = imageData.width, ySize = imageData.height;\n var x, y, xoff, i, r, g, b, a, srcPos, dstPos;\n var power = Math.round(this.kaleidoscopePower());\n var angle = Math.round(this.kaleidoscopeAngle());\n var offset = Math.floor((xSize * (angle % 360)) / 360);\n if (power < 1) {\n return;\n }\n var tempCanvas = Util.createCanvasElement();\n tempCanvas.width = xSize;\n tempCanvas.height = ySize;\n var scratchData = tempCanvas\n .getContext('2d')\n .getImageData(0, 0, xSize, ySize);\n Util.releaseCanvas(tempCanvas);\n ToPolar(imageData, scratchData, {\n polarCenterX: xSize / 2,\n polarCenterY: ySize / 2,\n });\n var minSectionSize = xSize / Math.pow(2, power);\n while (minSectionSize <= 8) {\n minSectionSize = minSectionSize * 2;\n power -= 1;\n }\n minSectionSize = Math.ceil(minSectionSize);\n var sectionSize = minSectionSize;\n var xStart = 0, xEnd = sectionSize, xDelta = 1;\n if (offset + minSectionSize > xSize) {\n xStart = sectionSize;\n xEnd = 0;\n xDelta = -1;\n }\n for (y = 0; y < ySize; y += 1) {\n for (x = xStart; x !== xEnd; x += xDelta) {\n xoff = Math.round(x + offset) % xSize;\n srcPos = (xSize * y + xoff) * 4;\n r = scratchData.data[srcPos + 0];\n g = scratchData.data[srcPos + 1];\n b = scratchData.data[srcPos + 2];\n a = scratchData.data[srcPos + 3];\n dstPos = (xSize * y + x) * 4;\n scratchData.data[dstPos + 0] = r;\n scratchData.data[dstPos + 1] = g;\n scratchData.data[dstPos + 2] = b;\n scratchData.data[dstPos + 3] = a;\n }\n }\n for (y = 0; y < ySize; y += 1) {\n sectionSize = Math.floor(minSectionSize);\n for (i = 0; i < power; i += 1) {\n for (x = 0; x < sectionSize + 1; x += 1) {\n srcPos = (xSize * y + x) * 4;\n r = scratchData.data[srcPos + 0];\n g = scratchData.data[srcPos + 1];\n b = scratchData.data[srcPos + 2];\n a = scratchData.data[srcPos + 3];\n dstPos = (xSize * y + sectionSize * 2 - x - 1) * 4;\n scratchData.data[dstPos + 0] = r;\n scratchData.data[dstPos + 1] = g;\n scratchData.data[dstPos + 2] = b;\n scratchData.data[dstPos + 3] = a;\n }\n sectionSize *= 2;\n }\n }\n FromPolar(scratchData, imageData, { polarRotation: 0 });\n};\nFactory.addGetterSetter(Node, 'kaleidoscopePower', 2, getNumberValidator(), Factory.afterSetFilter);\nFactory.addGetterSetter(Node, 'kaleidoscopeAngle', 0, getNumberValidator(), Factory.afterSetFilter);\n","import { Factory } from '../Factory.js';\nimport { Node } from '../Node.js';\nimport { getNumberValidator } from '../Validators.js';\nfunction pixelAt(idata, x, y) {\n var idx = (y * idata.width + x) * 4;\n var d = [];\n d.push(idata.data[idx++], idata.data[idx++], idata.data[idx++], idata.data[idx++]);\n return d;\n}\nfunction rgbDistance(p1, p2) {\n return Math.sqrt(Math.pow(p1[0] - p2[0], 2) +\n Math.pow(p1[1] - p2[1], 2) +\n Math.pow(p1[2] - p2[2], 2));\n}\nfunction rgbMean(pTab) {\n var m = [0, 0, 0];\n for (var i = 0; i < pTab.length; i++) {\n m[0] += pTab[i][0];\n m[1] += pTab[i][1];\n m[2] += pTab[i][2];\n }\n m[0] /= pTab.length;\n m[1] /= pTab.length;\n m[2] /= pTab.length;\n return m;\n}\nfunction backgroundMask(idata, threshold) {\n var rgbv_no = pixelAt(idata, 0, 0);\n var rgbv_ne = pixelAt(idata, idata.width - 1, 0);\n var rgbv_so = pixelAt(idata, 0, idata.height - 1);\n var rgbv_se = pixelAt(idata, idata.width - 1, idata.height - 1);\n var thres = threshold || 10;\n if (rgbDistance(rgbv_no, rgbv_ne) < thres &&\n rgbDistance(rgbv_ne, rgbv_se) < thres &&\n rgbDistance(rgbv_se, rgbv_so) < thres &&\n rgbDistance(rgbv_so, rgbv_no) < thres) {\n var mean = rgbMean([rgbv_ne, rgbv_no, rgbv_se, rgbv_so]);\n var mask = [];\n for (var i = 0; i < idata.width * idata.height; i++) {\n var d = rgbDistance(mean, [\n idata.data[i * 4],\n idata.data[i * 4 + 1],\n idata.data[i * 4 + 2],\n ]);\n mask[i] = d < thres ? 0 : 255;\n }\n return mask;\n }\n}\nfunction applyMask(idata, mask) {\n for (var i = 0; i < idata.width * idata.height; i++) {\n idata.data[4 * i + 3] = mask[i];\n }\n}\nfunction erodeMask(mask, sw, sh) {\n var weights = [1, 1, 1, 1, 0, 1, 1, 1, 1];\n var side = Math.round(Math.sqrt(weights.length));\n var halfSide = Math.floor(side / 2);\n var maskResult = [];\n for (var y = 0; y < sh; y++) {\n for (var x = 0; x < sw; x++) {\n var so = y * sw + x;\n var a = 0;\n for (var cy = 0; cy < side; cy++) {\n for (var cx = 0; cx < side; cx++) {\n var scy = y + cy - halfSide;\n var scx = x + cx - halfSide;\n if (scy >= 0 && scy < sh && scx >= 0 && scx < sw) {\n var srcOff = scy * sw + scx;\n var wt = weights[cy * side + cx];\n a += mask[srcOff] * wt;\n }\n }\n }\n maskResult[so] = a === 255 * 8 ? 255 : 0;\n }\n }\n return maskResult;\n}\nfunction dilateMask(mask, sw, sh) {\n var weights = [1, 1, 1, 1, 1, 1, 1, 1, 1];\n var side = Math.round(Math.sqrt(weights.length));\n var halfSide = Math.floor(side / 2);\n var maskResult = [];\n for (var y = 0; y < sh; y++) {\n for (var x = 0; x < sw; x++) {\n var so = y * sw + x;\n var a = 0;\n for (var cy = 0; cy < side; cy++) {\n for (var cx = 0; cx < side; cx++) {\n var scy = y + cy - halfSide;\n var scx = x + cx - halfSide;\n if (scy >= 0 && scy < sh && scx >= 0 && scx < sw) {\n var srcOff = scy * sw + scx;\n var wt = weights[cy * side + cx];\n a += mask[srcOff] * wt;\n }\n }\n }\n maskResult[so] = a >= 255 * 4 ? 255 : 0;\n }\n }\n return maskResult;\n}\nfunction smoothEdgeMask(mask, sw, sh) {\n var weights = [1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9];\n var side = Math.round(Math.sqrt(weights.length));\n var halfSide = Math.floor(side / 2);\n var maskResult = [];\n for (var y = 0; y < sh; y++) {\n for (var x = 0; x < sw; x++) {\n var so = y * sw + x;\n var a = 0;\n for (var cy = 0; cy < side; cy++) {\n for (var cx = 0; cx < side; cx++) {\n var scy = y + cy - halfSide;\n var scx = x + cx - halfSide;\n if (scy >= 0 && scy < sh && scx >= 0 && scx < sw) {\n var srcOff = scy * sw + scx;\n var wt = weights[cy * side + cx];\n a += mask[srcOff] * wt;\n }\n }\n }\n maskResult[so] = a;\n }\n }\n return maskResult;\n}\nexport const Mask = function (imageData) {\n var threshold = this.threshold(), mask = backgroundMask(imageData, threshold);\n if (mask) {\n mask = erodeMask(mask, imageData.width, imageData.height);\n mask = dilateMask(mask, imageData.width, imageData.height);\n mask = smoothEdgeMask(mask, imageData.width, imageData.height);\n applyMask(imageData, mask);\n }\n return imageData;\n};\nFactory.addGetterSetter(Node, 'threshold', 0, getNumberValidator(), Factory.afterSetFilter);\n","import { Factory } from '../Factory.js';\nimport { Node } from '../Node.js';\nimport { getNumberValidator } from '../Validators.js';\nexport const Noise = function (imageData) {\n var amount = this.noise() * 255, data = imageData.data, nPixels = data.length, half = amount / 2, i;\n for (i = 0; i < nPixels; i += 4) {\n data[i + 0] += half - 2 * half * Math.random();\n data[i + 1] += half - 2 * half * Math.random();\n data[i + 2] += half - 2 * half * Math.random();\n }\n};\nFactory.addGetterSetter(Node, 'noise', 0.2, getNumberValidator(), Factory.afterSetFilter);\n","import { Factory } from '../Factory.js';\nimport { Util } from '../Util.js';\nimport { Node } from '../Node.js';\nimport { getNumberValidator } from '../Validators.js';\nexport const Pixelate = function (imageData) {\n var pixelSize = Math.ceil(this.pixelSize()), width = imageData.width, height = imageData.height, x, y, i, red, green, blue, alpha, nBinsX = Math.ceil(width / pixelSize), nBinsY = Math.ceil(height / pixelSize), xBinStart, xBinEnd, yBinStart, yBinEnd, xBin, yBin, pixelsInBin, data = imageData.data;\n if (pixelSize <= 0) {\n Util.error('pixelSize value can not be <= 0');\n return;\n }\n for (xBin = 0; xBin < nBinsX; xBin += 1) {\n for (yBin = 0; yBin < nBinsY; yBin += 1) {\n red = 0;\n green = 0;\n blue = 0;\n alpha = 0;\n xBinStart = xBin * pixelSize;\n xBinEnd = xBinStart + pixelSize;\n yBinStart = yBin * pixelSize;\n yBinEnd = yBinStart + pixelSize;\n pixelsInBin = 0;\n for (x = xBinStart; x < xBinEnd; x += 1) {\n if (x >= width) {\n continue;\n }\n for (y = yBinStart; y < yBinEnd; y += 1) {\n if (y >= height) {\n continue;\n }\n i = (width * y + x) * 4;\n red += data[i + 0];\n green += data[i + 1];\n blue += data[i + 2];\n alpha += data[i + 3];\n pixelsInBin += 1;\n }\n }\n red = red / pixelsInBin;\n green = green / pixelsInBin;\n blue = blue / pixelsInBin;\n alpha = alpha / pixelsInBin;\n for (x = xBinStart; x < xBinEnd; x += 1) {\n if (x >= width) {\n continue;\n }\n for (y = yBinStart; y < yBinEnd; y += 1) {\n if (y >= height) {\n continue;\n }\n i = (width * y + x) * 4;\n data[i + 0] = red;\n data[i + 1] = green;\n data[i + 2] = blue;\n data[i + 3] = alpha;\n }\n }\n }\n }\n};\nFactory.addGetterSetter(Node, 'pixelSize', 8, getNumberValidator(), Factory.afterSetFilter);\n","import { Factory } from '../Factory.js';\nimport { Node } from '../Node.js';\nimport { getNumberValidator } from '../Validators.js';\nexport const Posterize = function (imageData) {\n var levels = Math.round(this.levels() * 254) + 1, data = imageData.data, len = data.length, scale = 255 / levels, i;\n for (i = 0; i < len; i += 1) {\n data[i] = Math.floor(data[i] / scale) * scale;\n }\n};\nFactory.addGetterSetter(Node, 'levels', 0.5, getNumberValidator(), Factory.afterSetFilter);\n","import { Factory } from '../Factory.js';\nimport { Node } from '../Node.js';\nimport { RGBComponent } from '../Validators.js';\nexport const RGB = function (imageData) {\n var data = imageData.data, nPixels = data.length, red = this.red(), green = this.green(), blue = this.blue(), i, brightness;\n for (i = 0; i < nPixels; i += 4) {\n brightness =\n (0.34 * data[i] + 0.5 * data[i + 1] + 0.16 * data[i + 2]) / 255;\n data[i] = brightness * red;\n data[i + 1] = brightness * green;\n data[i + 2] = brightness * blue;\n data[i + 3] = data[i + 3];\n }\n};\nFactory.addGetterSetter(Node, 'red', 0, function (val) {\n this._filterUpToDate = false;\n if (val > 255) {\n return 255;\n }\n else if (val < 0) {\n return 0;\n }\n else {\n return Math.round(val);\n }\n});\nFactory.addGetterSetter(Node, 'green', 0, function (val) {\n this._filterUpToDate = false;\n if (val > 255) {\n return 255;\n }\n else if (val < 0) {\n return 0;\n }\n else {\n return Math.round(val);\n }\n});\nFactory.addGetterSetter(Node, 'blue', 0, RGBComponent, Factory.afterSetFilter);\n","import { Factory } from '../Factory.js';\nimport { Node } from '../Node.js';\nimport { RGBComponent } from '../Validators.js';\nexport const RGBA = function (imageData) {\n var data = imageData.data, nPixels = data.length, red = this.red(), green = this.green(), blue = this.blue(), alpha = this.alpha(), i, ia;\n for (i = 0; i < nPixels; i += 4) {\n ia = 1 - alpha;\n data[i] = red * alpha + data[i] * ia;\n data[i + 1] = green * alpha + data[i + 1] * ia;\n data[i + 2] = blue * alpha + data[i + 2] * ia;\n }\n};\nFactory.addGetterSetter(Node, 'red', 0, function (val) {\n this._filterUpToDate = false;\n if (val > 255) {\n return 255;\n }\n else if (val < 0) {\n return 0;\n }\n else {\n return Math.round(val);\n }\n});\nFactory.addGetterSetter(Node, 'green', 0, function (val) {\n this._filterUpToDate = false;\n if (val > 255) {\n return 255;\n }\n else if (val < 0) {\n return 0;\n }\n else {\n return Math.round(val);\n }\n});\nFactory.addGetterSetter(Node, 'blue', 0, RGBComponent, Factory.afterSetFilter);\nFactory.addGetterSetter(Node, 'alpha', 1, function (val) {\n this._filterUpToDate = false;\n if (val > 1) {\n return 1;\n }\n else if (val < 0) {\n return 0;\n }\n else {\n return val;\n }\n});\n","export const Sepia = function (imageData) {\n var data = imageData.data, nPixels = data.length, i, r, g, b;\n for (i = 0; i < nPixels; i += 4) {\n r = data[i + 0];\n g = data[i + 1];\n b = data[i + 2];\n data[i + 0] = Math.min(255, r * 0.393 + g * 0.769 + b * 0.189);\n data[i + 1] = Math.min(255, r * 0.349 + g * 0.686 + b * 0.168);\n data[i + 2] = Math.min(255, r * 0.272 + g * 0.534 + b * 0.131);\n }\n};\n","export const Solarize = function (imageData) {\n var data = imageData.data, w = imageData.width, h = imageData.height, w4 = w * 4, y = h;\n do {\n var offsetY = (y - 1) * w4;\n var x = w;\n do {\n var offset = offsetY + (x - 1) * 4;\n var r = data[offset];\n var g = data[offset + 1];\n var b = data[offset + 2];\n if (r > 127) {\n r = 255 - r;\n }\n if (g > 127) {\n g = 255 - g;\n }\n if (b > 127) {\n b = 255 - b;\n }\n data[offset] = r;\n data[offset + 1] = g;\n data[offset + 2] = b;\n } while (--x);\n } while (--y);\n};\n","import { Factory } from '../Factory.js';\nimport { Node } from '../Node.js';\nimport { getNumberValidator } from '../Validators.js';\nexport const Threshold = function (imageData) {\n var level = this.threshold() * 255, data = imageData.data, len = data.length, i;\n for (i = 0; i < len; i += 1) {\n data[i] = data[i] < level ? 0 : 255;\n }\n};\nFactory.addGetterSetter(Node, 'threshold', 0.5, getNumberValidator(), Factory.afterSetFilter);\n","import { Konva as Core } from './_CoreInternals.js';\nimport { Arc } from './shapes/Arc.js';\nimport { Arrow } from './shapes/Arrow.js';\nimport { Circle } from './shapes/Circle.js';\nimport { Ellipse } from './shapes/Ellipse.js';\nimport { Image } from './shapes/Image.js';\nimport { Label, Tag } from './shapes/Label.js';\nimport { Line } from './shapes/Line.js';\nimport { Path } from './shapes/Path.js';\nimport { Rect } from './shapes/Rect.js';\nimport { RegularPolygon } from './shapes/RegularPolygon.js';\nimport { Ring } from './shapes/Ring.js';\nimport { Sprite } from './shapes/Sprite.js';\nimport { Star } from './shapes/Star.js';\nimport { Text } from './shapes/Text.js';\nimport { TextPath } from './shapes/TextPath.js';\nimport { Transformer } from './shapes/Transformer.js';\nimport { Wedge } from './shapes/Wedge.js';\nimport { Blur } from './filters/Blur.js';\nimport { Brighten } from './filters/Brighten.js';\nimport { Contrast } from './filters/Contrast.js';\nimport { Emboss } from './filters/Emboss.js';\nimport { Enhance } from './filters/Enhance.js';\nimport { Grayscale } from './filters/Grayscale.js';\nimport { HSL } from './filters/HSL.js';\nimport { HSV } from './filters/HSV.js';\nimport { Invert } from './filters/Invert.js';\nimport { Kaleidoscope } from './filters/Kaleidoscope.js';\nimport { Mask } from './filters/Mask.js';\nimport { Noise } from './filters/Noise.js';\nimport { Pixelate } from './filters/Pixelate.js';\nimport { Posterize } from './filters/Posterize.js';\nimport { RGB } from './filters/RGB.js';\nimport { RGBA } from './filters/RGBA.js';\nimport { Sepia } from './filters/Sepia.js';\nimport { Solarize } from './filters/Solarize.js';\nimport { Threshold } from './filters/Threshold.js';\nexport const Konva = Core.Util._assign(Core, {\n Arc,\n Arrow,\n Circle,\n Ellipse,\n Image,\n Label,\n Tag,\n Line,\n Path,\n Rect,\n RegularPolygon,\n Ring,\n Sprite,\n Star,\n Text,\n TextPath,\n Transformer,\n Wedge,\n Filters: {\n Blur,\n Brighten,\n Contrast,\n Emboss,\n Enhance,\n Grayscale,\n HSL,\n HSV,\n Invert,\n Kaleidoscope,\n Mask,\n Noise,\n Pixelate,\n Posterize,\n RGB,\n RGBA,\n Sepia,\n Solarize,\n Threshold,\n },\n});\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","export function isFunction(value) {\n return typeof value === 'function';\n}\n//# sourceMappingURL=isFunction.js.map","export function createErrorClass(createImpl) {\n var _super = function (instance) {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n var ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n//# sourceMappingURL=createErrorClass.js.map","import { createErrorClass } from './createErrorClass';\nexport var UnsubscriptionError = createErrorClass(function (_super) {\n return function UnsubscriptionErrorImpl(errors) {\n _super(this);\n this.message = errors\n ? errors.length + \" errors occurred during unsubscription:\\n\" + errors.map(function (err, i) { return i + 1 + \") \" + err.toString(); }).join('\\n ')\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n };\n});\n//# sourceMappingURL=UnsubscriptionError.js.map","export function arrRemove(arr, item) {\n if (arr) {\n var index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n//# sourceMappingURL=arrRemove.js.map","import { __read, __spreadArray, __values } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { arrRemove } from './util/arrRemove';\nvar Subscription = (function () {\n function Subscription(initialTeardown) {\n this.initialTeardown = initialTeardown;\n this.closed = false;\n this._parentage = null;\n this._finalizers = null;\n }\n Subscription.prototype.unsubscribe = function () {\n var e_1, _a, e_2, _b;\n var errors;\n if (!this.closed) {\n this.closed = true;\n var _parentage = this._parentage;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n try {\n for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {\n var parent_1 = _parentage_1_1.value;\n parent_1.remove(this);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n else {\n _parentage.remove(this);\n }\n }\n var initialFinalizer = this.initialTeardown;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n }\n catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n var _finalizers = this._finalizers;\n if (_finalizers) {\n this._finalizers = null;\n try {\n for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {\n var finalizer = _finalizers_1_1.value;\n try {\n execFinalizer(finalizer);\n }\n catch (err) {\n errors = errors !== null && errors !== void 0 ? errors : [];\n if (err instanceof UnsubscriptionError) {\n errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));\n }\n else {\n errors.push(err);\n }\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n };\n Subscription.prototype.add = function (teardown) {\n var _a;\n if (teardown && teardown !== this) {\n if (this.closed) {\n execFinalizer(teardown);\n }\n else {\n if (teardown instanceof Subscription) {\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);\n }\n }\n };\n Subscription.prototype._hasParent = function (parent) {\n var _parentage = this._parentage;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n };\n Subscription.prototype._addParent = function (parent) {\n var _parentage = this._parentage;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n };\n Subscription.prototype._removeParent = function (parent) {\n var _parentage = this._parentage;\n if (_parentage === parent) {\n this._parentage = null;\n }\n else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n };\n Subscription.prototype.remove = function (teardown) {\n var _finalizers = this._finalizers;\n _finalizers && arrRemove(_finalizers, teardown);\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n };\n Subscription.EMPTY = (function () {\n var empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n return Subscription;\n}());\nexport { Subscription };\nexport var EMPTY_SUBSCRIPTION = Subscription.EMPTY;\nexport function isSubscription(value) {\n return (value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe)));\n}\nfunction execFinalizer(finalizer) {\n if (isFunction(finalizer)) {\n finalizer();\n }\n else {\n finalizer.unsubscribe();\n }\n}\n//# sourceMappingURL=Subscription.js.map","export var config = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n//# sourceMappingURL=config.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var timeoutProvider = {\n setTimeout: function (handler, timeout) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var delegate = timeoutProvider.delegate;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {\n return delegate.setTimeout.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n }\n return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n },\n clearTimeout: function (handle) {\n var delegate = timeoutProvider.delegate;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);\n },\n delegate: undefined,\n};\n//# sourceMappingURL=timeoutProvider.js.map","import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\nexport function reportUnhandledError(err) {\n timeoutProvider.setTimeout(function () {\n var onUnhandledError = config.onUnhandledError;\n if (onUnhandledError) {\n onUnhandledError(err);\n }\n else {\n throw err;\n }\n });\n}\n//# sourceMappingURL=reportUnhandledError.js.map","export function noop() { }\n//# sourceMappingURL=noop.js.map","import { config } from '../config';\nvar context = null;\nexport function errorContext(cb) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n var isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n var _a = context, errorThrown = _a.errorThrown, error = _a.error;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n }\n else {\n cb();\n }\n}\nexport function captureError(err) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n//# sourceMappingURL=errorContext.js.map","import { __extends } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\nvar Subscriber = (function (_super) {\n __extends(Subscriber, _super);\n function Subscriber(destination) {\n var _this = _super.call(this) || this;\n _this.isStopped = false;\n if (destination) {\n _this.destination = destination;\n if (isSubscription(destination)) {\n destination.add(_this);\n }\n }\n else {\n _this.destination = EMPTY_OBSERVER;\n }\n return _this;\n }\n Subscriber.create = function (next, error, complete) {\n return new SafeSubscriber(next, error, complete);\n };\n Subscriber.prototype.next = function (value) {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n }\n else {\n this._next(value);\n }\n };\n Subscriber.prototype.error = function (err) {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n }\n else {\n this.isStopped = true;\n this._error(err);\n }\n };\n Subscriber.prototype.complete = function () {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n }\n else {\n this.isStopped = true;\n this._complete();\n }\n };\n Subscriber.prototype.unsubscribe = function () {\n if (!this.closed) {\n this.isStopped = true;\n _super.prototype.unsubscribe.call(this);\n this.destination = null;\n }\n };\n Subscriber.prototype._next = function (value) {\n this.destination.next(value);\n };\n Subscriber.prototype._error = function (err) {\n try {\n this.destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n };\n Subscriber.prototype._complete = function () {\n try {\n this.destination.complete();\n }\n finally {\n this.unsubscribe();\n }\n };\n return Subscriber;\n}(Subscription));\nexport { Subscriber };\nvar _bind = Function.prototype.bind;\nfunction bind(fn, thisArg) {\n return _bind.call(fn, thisArg);\n}\nvar ConsumerObserver = (function () {\n function ConsumerObserver(partialObserver) {\n this.partialObserver = partialObserver;\n }\n ConsumerObserver.prototype.next = function (value) {\n var partialObserver = this.partialObserver;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n ConsumerObserver.prototype.error = function (err) {\n var partialObserver = this.partialObserver;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n else {\n handleUnhandledError(err);\n }\n };\n ConsumerObserver.prototype.complete = function () {\n var partialObserver = this.partialObserver;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n return ConsumerObserver;\n}());\nvar SafeSubscriber = (function (_super) {\n __extends(SafeSubscriber, _super);\n function SafeSubscriber(observerOrNext, error, complete) {\n var _this = _super.call(this) || this;\n var partialObserver;\n if (isFunction(observerOrNext) || !observerOrNext) {\n partialObserver = {\n next: (observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined),\n error: error !== null && error !== void 0 ? error : undefined,\n complete: complete !== null && complete !== void 0 ? complete : undefined,\n };\n }\n else {\n var context_1;\n if (_this && config.useDeprecatedNextContext) {\n context_1 = Object.create(observerOrNext);\n context_1.unsubscribe = function () { return _this.unsubscribe(); };\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context_1),\n error: observerOrNext.error && bind(observerOrNext.error, context_1),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context_1),\n };\n }\n else {\n partialObserver = observerOrNext;\n }\n }\n _this.destination = new ConsumerObserver(partialObserver);\n return _this;\n }\n return SafeSubscriber;\n}(Subscriber));\nexport { SafeSubscriber };\nfunction handleUnhandledError(error) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n }\n else {\n reportUnhandledError(error);\n }\n}\nfunction defaultErrorHandler(err) {\n throw err;\n}\nfunction handleStoppedNotification(notification, subscriber) {\n var onStoppedNotification = config.onStoppedNotification;\n onStoppedNotification && timeoutProvider.setTimeout(function () { return onStoppedNotification(notification, subscriber); });\n}\nexport var EMPTY_OBSERVER = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n//# sourceMappingURL=Subscriber.js.map","export var observable = (function () { return (typeof Symbol === 'function' && Symbol.observable) || '@@observable'; })();\n//# sourceMappingURL=observable.js.map","export function identity(x) {\n return x;\n}\n//# sourceMappingURL=identity.js.map","import { identity } from './identity';\nexport function pipe() {\n var fns = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fns[_i] = arguments[_i];\n }\n return pipeFromArray(fns);\n}\nexport function pipeFromArray(fns) {\n if (fns.length === 0) {\n return identity;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return function piped(input) {\n return fns.reduce(function (prev, fn) { return fn(prev); }, input);\n };\n}\n//# sourceMappingURL=pipe.js.map","import { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription } from './Subscription';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\nvar Observable = (function () {\n function Observable(subscribe) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n Observable.prototype.lift = function (operator) {\n var observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n };\n Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n var _this = this;\n var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n errorContext(function () {\n var _a = _this, operator = _a.operator, source = _a.source;\n subscriber.add(operator\n ?\n operator.call(subscriber, source)\n : source\n ?\n _this._subscribe(subscriber)\n :\n _this._trySubscribe(subscriber));\n });\n return subscriber;\n };\n Observable.prototype._trySubscribe = function (sink) {\n try {\n return this._subscribe(sink);\n }\n catch (err) {\n sink.error(err);\n }\n };\n Observable.prototype.forEach = function (next, promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var subscriber = new SafeSubscriber({\n next: function (value) {\n try {\n next(value);\n }\n catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n _this.subscribe(subscriber);\n });\n };\n Observable.prototype._subscribe = function (subscriber) {\n var _a;\n return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);\n };\n Observable.prototype[Symbol_observable] = function () {\n return this;\n };\n Observable.prototype.pipe = function () {\n var operations = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n operations[_i] = arguments[_i];\n }\n return pipeFromArray(operations)(this);\n };\n Observable.prototype.toPromise = function (promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var value;\n _this.subscribe(function (x) { return (value = x); }, function (err) { return reject(err); }, function () { return resolve(value); });\n });\n };\n Observable.create = function (subscribe) {\n return new Observable(subscribe);\n };\n return Observable;\n}());\nexport { Observable };\nfunction getPromiseCtor(promiseCtor) {\n var _a;\n return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;\n}\nfunction isObserver(value) {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\nfunction isSubscriber(value) {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n//# sourceMappingURL=Observable.js.map","import { isFunction } from './isFunction';\nexport function hasLift(source) {\n return isFunction(source === null || source === void 0 ? void 0 : source.lift);\n}\nexport function operate(init) {\n return function (source) {\n if (hasLift(source)) {\n return source.lift(function (liftedSource) {\n try {\n return init(liftedSource, this);\n }\n catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n//# sourceMappingURL=lift.js.map","import { __extends } from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\nvar OperatorSubscriber = (function (_super) {\n __extends(OperatorSubscriber, _super);\n function OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {\n var _this = _super.call(this, destination) || this;\n _this.onFinalize = onFinalize;\n _this.shouldUnsubscribe = shouldUnsubscribe;\n _this._next = onNext\n ? function (value) {\n try {\n onNext(value);\n }\n catch (err) {\n destination.error(err);\n }\n }\n : _super.prototype._next;\n _this._error = onError\n ? function (err) {\n try {\n onError(err);\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : _super.prototype._error;\n _this._complete = onComplete\n ? function () {\n try {\n onComplete();\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : _super.prototype._complete;\n return _this;\n }\n OperatorSubscriber.prototype.unsubscribe = function () {\n var _a;\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n var closed_1 = this.closed;\n _super.prototype.unsubscribe.call(this);\n !closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));\n }\n };\n return OperatorSubscriber;\n}(Subscriber));\nexport { OperatorSubscriber };\n//# sourceMappingURL=OperatorSubscriber.js.map","import { createErrorClass } from './createErrorClass';\nexport var ObjectUnsubscribedError = createErrorClass(function (_super) {\n return function ObjectUnsubscribedErrorImpl() {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n };\n});\n//# sourceMappingURL=ObjectUnsubscribedError.js.map","import { __extends, __values } from \"tslib\";\nimport { Observable } from './Observable';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\nvar Subject = (function (_super) {\n __extends(Subject, _super);\n function Subject() {\n var _this = _super.call(this) || this;\n _this.closed = false;\n _this.currentObservers = null;\n _this.observers = [];\n _this.isStopped = false;\n _this.hasError = false;\n _this.thrownError = null;\n return _this;\n }\n Subject.prototype.lift = function (operator) {\n var subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n };\n Subject.prototype._throwIfClosed = function () {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n };\n Subject.prototype.next = function (value) {\n var _this = this;\n errorContext(function () {\n var e_1, _a;\n _this._throwIfClosed();\n if (!_this.isStopped) {\n if (!_this.currentObservers) {\n _this.currentObservers = Array.from(_this.observers);\n }\n try {\n for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) {\n var observer = _c.value;\n observer.next(value);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n });\n };\n Subject.prototype.error = function (err) {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.hasError = _this.isStopped = true;\n _this.thrownError = err;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().error(err);\n }\n }\n });\n };\n Subject.prototype.complete = function () {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.isStopped = true;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().complete();\n }\n }\n });\n };\n Subject.prototype.unsubscribe = function () {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null;\n };\n Object.defineProperty(Subject.prototype, \"observed\", {\n get: function () {\n var _a;\n return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;\n },\n enumerable: false,\n configurable: true\n });\n Subject.prototype._trySubscribe = function (subscriber) {\n this._throwIfClosed();\n return _super.prototype._trySubscribe.call(this, subscriber);\n };\n Subject.prototype._subscribe = function (subscriber) {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n };\n Subject.prototype._innerSubscribe = function (subscriber) {\n var _this = this;\n var _a = this, hasError = _a.hasError, isStopped = _a.isStopped, observers = _a.observers;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(function () {\n _this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n };\n Subject.prototype._checkFinalizedStatuses = function (subscriber) {\n var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, isStopped = _a.isStopped;\n if (hasError) {\n subscriber.error(thrownError);\n }\n else if (isStopped) {\n subscriber.complete();\n }\n };\n Subject.prototype.asObservable = function () {\n var observable = new Observable();\n observable.source = this;\n return observable;\n };\n Subject.create = function (destination, source) {\n return new AnonymousSubject(destination, source);\n };\n return Subject;\n}(Observable));\nexport { Subject };\nvar AnonymousSubject = (function (_super) {\n __extends(AnonymousSubject, _super);\n function AnonymousSubject(destination, source) {\n var _this = _super.call(this) || this;\n _this.destination = destination;\n _this.source = source;\n return _this;\n }\n AnonymousSubject.prototype.next = function (value) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);\n };\n AnonymousSubject.prototype.error = function (err) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);\n };\n AnonymousSubject.prototype.complete = function () {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n AnonymousSubject.prototype._subscribe = function (subscriber) {\n var _a, _b;\n return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;\n };\n return AnonymousSubject;\n}(Subject));\nexport { AnonymousSubject };\n//# sourceMappingURL=Subject.js.map","import { __extends } from \"tslib\";\nimport { Subject } from './Subject';\nvar BehaviorSubject = (function (_super) {\n __extends(BehaviorSubject, _super);\n function BehaviorSubject(_value) {\n var _this = _super.call(this) || this;\n _this._value = _value;\n return _this;\n }\n Object.defineProperty(BehaviorSubject.prototype, \"value\", {\n get: function () {\n return this.getValue();\n },\n enumerable: false,\n configurable: true\n });\n BehaviorSubject.prototype._subscribe = function (subscriber) {\n var subscription = _super.prototype._subscribe.call(this, subscriber);\n !subscription.closed && subscriber.next(this._value);\n return subscription;\n };\n BehaviorSubject.prototype.getValue = function () {\n var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, _value = _a._value;\n if (hasError) {\n throw thrownError;\n }\n this._throwIfClosed();\n return _value;\n };\n BehaviorSubject.prototype.next = function (value) {\n _super.prototype.next.call(this, (this._value = value));\n };\n return BehaviorSubject;\n}(Subject));\nexport { BehaviorSubject };\n//# sourceMappingURL=BehaviorSubject.js.map","export var dateTimestampProvider = {\n now: function () {\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined,\n};\n//# sourceMappingURL=dateTimestampProvider.js.map","import { __extends } from \"tslib\";\nimport { Subscription } from '../Subscription';\nvar Action = (function (_super) {\n __extends(Action, _super);\n function Action(scheduler, work) {\n return _super.call(this) || this;\n }\n Action.prototype.schedule = function (state, delay) {\n if (delay === void 0) { delay = 0; }\n return this;\n };\n return Action;\n}(Subscription));\nexport { Action };\n//# sourceMappingURL=Action.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var intervalProvider = {\n setInterval: function (handler, timeout) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var delegate = intervalProvider.delegate;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setInterval) {\n return delegate.setInterval.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n }\n return setInterval.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n },\n clearInterval: function (handle) {\n var delegate = intervalProvider.delegate;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearInterval) || clearInterval)(handle);\n },\n delegate: undefined,\n};\n//# sourceMappingURL=intervalProvider.js.map","import { __extends } from \"tslib\";\nimport { Action } from './Action';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\nvar AsyncAction = (function (_super) {\n __extends(AsyncAction, _super);\n function AsyncAction(scheduler, work) {\n var _this = _super.call(this, scheduler, work) || this;\n _this.scheduler = scheduler;\n _this.work = work;\n _this.pending = false;\n return _this;\n }\n AsyncAction.prototype.schedule = function (state, delay) {\n var _a;\n if (delay === void 0) { delay = 0; }\n if (this.closed) {\n return this;\n }\n this.state = state;\n var id = this.id;\n var scheduler = this.scheduler;\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n this.pending = true;\n this.delay = delay;\n this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay);\n return this;\n };\n AsyncAction.prototype.requestAsyncId = function (scheduler, _id, delay) {\n if (delay === void 0) { delay = 0; }\n return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n };\n AsyncAction.prototype.recycleAsyncId = function (_scheduler, id, delay) {\n if (delay === void 0) { delay = 0; }\n if (delay != null && this.delay === delay && this.pending === false) {\n return id;\n }\n if (id != null) {\n intervalProvider.clearInterval(id);\n }\n return undefined;\n };\n AsyncAction.prototype.execute = function (state, delay) {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n this.pending = false;\n var error = this._execute(state, delay);\n if (error) {\n return error;\n }\n else if (this.pending === false && this.id != null) {\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n };\n AsyncAction.prototype._execute = function (state, _delay) {\n var errored = false;\n var errorValue;\n try {\n this.work(state);\n }\n catch (e) {\n errored = true;\n errorValue = e ? e : new Error('Scheduled action threw falsy error');\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n };\n AsyncAction.prototype.unsubscribe = function () {\n if (!this.closed) {\n var _a = this, id = _a.id, scheduler = _a.scheduler;\n var actions = scheduler.actions;\n this.work = this.state = this.scheduler = null;\n this.pending = false;\n arrRemove(actions, this);\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n this.delay = null;\n _super.prototype.unsubscribe.call(this);\n }\n };\n return AsyncAction;\n}(Action));\nexport { AsyncAction };\n//# sourceMappingURL=AsyncAction.js.map","import { dateTimestampProvider } from './scheduler/dateTimestampProvider';\nvar Scheduler = (function () {\n function Scheduler(schedulerActionCtor, now) {\n if (now === void 0) { now = Scheduler.now; }\n this.schedulerActionCtor = schedulerActionCtor;\n this.now = now;\n }\n Scheduler.prototype.schedule = function (work, delay, state) {\n if (delay === void 0) { delay = 0; }\n return new this.schedulerActionCtor(this, work).schedule(state, delay);\n };\n Scheduler.now = dateTimestampProvider.now;\n return Scheduler;\n}());\nexport { Scheduler };\n//# sourceMappingURL=Scheduler.js.map","import { __extends } from \"tslib\";\nimport { Scheduler } from '../Scheduler';\nvar AsyncScheduler = (function (_super) {\n __extends(AsyncScheduler, _super);\n function AsyncScheduler(SchedulerAction, now) {\n if (now === void 0) { now = Scheduler.now; }\n var _this = _super.call(this, SchedulerAction, now) || this;\n _this.actions = [];\n _this._active = false;\n return _this;\n }\n AsyncScheduler.prototype.flush = function (action) {\n var actions = this.actions;\n if (this._active) {\n actions.push(action);\n return;\n }\n var error;\n this._active = true;\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions.shift()));\n this._active = false;\n if (error) {\n while ((action = actions.shift())) {\n action.unsubscribe();\n }\n throw error;\n }\n };\n return AsyncScheduler;\n}(Scheduler));\nexport { AsyncScheduler };\n//# sourceMappingURL=AsyncScheduler.js.map","import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\nexport var asyncScheduler = new AsyncScheduler(AsyncAction);\nexport var async = asyncScheduler;\n//# sourceMappingURL=async.js.map","import { Observable } from '../Observable';\nexport var EMPTY = new Observable(function (subscriber) { return subscriber.complete(); });\nexport function empty(scheduler) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\nfunction emptyScheduled(scheduler) {\n return new Observable(function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); });\n}\n//# sourceMappingURL=empty.js.map","import { isFunction } from './isFunction';\nexport function isScheduler(value) {\n return value && isFunction(value.schedule);\n}\n//# sourceMappingURL=isScheduler.js.map","import { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\nfunction last(arr) {\n return arr[arr.length - 1];\n}\nexport function popResultSelector(args) {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\nexport function popScheduler(args) {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\nexport function popNumber(args, defaultValue) {\n return typeof last(args) === 'number' ? args.pop() : defaultValue;\n}\n//# sourceMappingURL=args.js.map","export var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });\n//# sourceMappingURL=isArrayLike.js.map","import { isFunction } from \"./isFunction\";\nexport function isPromise(value) {\n return isFunction(value === null || value === void 0 ? void 0 : value.then);\n}\n//# sourceMappingURL=isPromise.js.map","import { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\nexport function isInteropObservable(input) {\n return isFunction(input[Symbol_observable]);\n}\n//# sourceMappingURL=isInteropObservable.js.map","import { isFunction } from './isFunction';\nexport function isAsyncIterable(obj) {\n return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);\n}\n//# sourceMappingURL=isAsyncIterable.js.map","export function createInvalidObservableTypeError(input) {\n return new TypeError(\"You provided \" + (input !== null && typeof input === 'object' ? 'an invalid object' : \"'\" + input + \"'\") + \" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.\");\n}\n//# sourceMappingURL=throwUnobservableError.js.map","export function getSymbolIterator() {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator';\n }\n return Symbol.iterator;\n}\nexport var iterator = getSymbolIterator();\n//# sourceMappingURL=iterator.js.map","import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\nexport function isIterable(input) {\n return isFunction(input === null || input === void 0 ? void 0 : input[Symbol_iterator]);\n}\n//# sourceMappingURL=isIterable.js.map","import { __asyncGenerator, __await, __generator } from \"tslib\";\nimport { isFunction } from './isFunction';\nexport function readableStreamLikeToAsyncGenerator(readableStream) {\n return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() {\n var reader, _a, value, done;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n reader = readableStream.getReader();\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 9, 10]);\n _b.label = 2;\n case 2:\n if (!true) return [3, 8];\n return [4, __await(reader.read())];\n case 3:\n _a = _b.sent(), value = _a.value, done = _a.done;\n if (!done) return [3, 5];\n return [4, __await(void 0)];\n case 4: return [2, _b.sent()];\n case 5: return [4, __await(value)];\n case 6: return [4, _b.sent()];\n case 7:\n _b.sent();\n return [3, 2];\n case 8: return [3, 10];\n case 9:\n reader.releaseLock();\n return [7];\n case 10: return [2];\n }\n });\n });\n}\nexport function isReadableStreamLike(obj) {\n return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);\n}\n//# sourceMappingURL=isReadableStreamLike.js.map","import { __asyncValues, __awaiter, __generator, __values } from \"tslib\";\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isPromise } from '../util/isPromise';\nimport { Observable } from '../Observable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isIterable } from '../util/isIterable';\nimport { isReadableStreamLike, readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nimport { isFunction } from '../util/isFunction';\nimport { reportUnhandledError } from '../util/reportUnhandledError';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport function innerFrom(input) {\n if (input instanceof Observable) {\n return input;\n }\n if (input != null) {\n if (isInteropObservable(input)) {\n return fromInteropObservable(input);\n }\n if (isArrayLike(input)) {\n return fromArrayLike(input);\n }\n if (isPromise(input)) {\n return fromPromise(input);\n }\n if (isAsyncIterable(input)) {\n return fromAsyncIterable(input);\n }\n if (isIterable(input)) {\n return fromIterable(input);\n }\n if (isReadableStreamLike(input)) {\n return fromReadableStreamLike(input);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\nexport function fromInteropObservable(obj) {\n return new Observable(function (subscriber) {\n var obs = obj[Symbol_observable]();\n if (isFunction(obs.subscribe)) {\n return obs.subscribe(subscriber);\n }\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n });\n}\nexport function fromArrayLike(array) {\n return new Observable(function (subscriber) {\n for (var i = 0; i < array.length && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n });\n}\nexport function fromPromise(promise) {\n return new Observable(function (subscriber) {\n promise\n .then(function (value) {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n }, function (err) { return subscriber.error(err); })\n .then(null, reportUnhandledError);\n });\n}\nexport function fromIterable(iterable) {\n return new Observable(function (subscriber) {\n var e_1, _a;\n try {\n for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) {\n var value = iterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n subscriber.complete();\n });\n}\nexport function fromAsyncIterable(asyncIterable) {\n return new Observable(function (subscriber) {\n process(asyncIterable, subscriber).catch(function (err) { return subscriber.error(err); });\n });\n}\nexport function fromReadableStreamLike(readableStream) {\n return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));\n}\nfunction process(asyncIterable, subscriber) {\n var asyncIterable_1, asyncIterable_1_1;\n var e_2, _a;\n return __awaiter(this, void 0, void 0, function () {\n var value, e_2_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 11]);\n asyncIterable_1 = __asyncValues(asyncIterable);\n _b.label = 1;\n case 1: return [4, asyncIterable_1.next()];\n case 2:\n if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4];\n value = asyncIterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return [2];\n }\n _b.label = 3;\n case 3: return [3, 1];\n case 4: return [3, 11];\n case 5:\n e_2_1 = _b.sent();\n e_2 = { error: e_2_1 };\n return [3, 11];\n case 6:\n _b.trys.push([6, , 9, 10]);\n if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8];\n return [4, _a.call(asyncIterable_1)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8: return [3, 10];\n case 9:\n if (e_2) throw e_2.error;\n return [7];\n case 10: return [7];\n case 11:\n subscriber.complete();\n return [2];\n }\n });\n });\n}\n//# sourceMappingURL=innerFrom.js.map","export function executeSchedule(parentSubscription, scheduler, work, delay, repeat) {\n if (delay === void 0) { delay = 0; }\n if (repeat === void 0) { repeat = false; }\n var scheduleSubscription = scheduler.schedule(function () {\n work();\n if (repeat) {\n parentSubscription.add(this.schedule(null, delay));\n }\n else {\n this.unsubscribe();\n }\n }, delay);\n parentSubscription.add(scheduleSubscription);\n if (!repeat) {\n return scheduleSubscription;\n }\n}\n//# sourceMappingURL=executeSchedule.js.map","import { executeSchedule } from '../util/executeSchedule';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function observeOn(scheduler, delay) {\n if (delay === void 0) { delay = 0; }\n return operate(function (source, subscriber) {\n source.subscribe(createOperatorSubscriber(subscriber, function (value) { return executeSchedule(subscriber, scheduler, function () { return subscriber.next(value); }, delay); }, function () { return executeSchedule(subscriber, scheduler, function () { return subscriber.complete(); }, delay); }, function (err) { return executeSchedule(subscriber, scheduler, function () { return subscriber.error(err); }, delay); }));\n });\n}\n//# sourceMappingURL=observeOn.js.map","import { operate } from '../util/lift';\nexport function subscribeOn(scheduler, delay) {\n if (delay === void 0) { delay = 0; }\n return operate(function (source, subscriber) {\n subscriber.add(scheduler.schedule(function () { return source.subscribe(subscriber); }, delay));\n });\n}\n//# sourceMappingURL=subscribeOn.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function scheduleObservable(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=scheduleObservable.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function schedulePromise(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=schedulePromise.js.map","import { Observable } from '../Observable';\nexport function scheduleArray(input, scheduler) {\n return new Observable(function (subscriber) {\n var i = 0;\n return scheduler.schedule(function () {\n if (i === input.length) {\n subscriber.complete();\n }\n else {\n subscriber.next(input[i++]);\n if (!subscriber.closed) {\n this.schedule();\n }\n }\n });\n });\n}\n//# sourceMappingURL=scheduleArray.js.map","import { Observable } from '../Observable';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from '../util/isFunction';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleIterable(input, scheduler) {\n return new Observable(function (subscriber) {\n var iterator;\n executeSchedule(subscriber, scheduler, function () {\n iterator = input[Symbol_iterator]();\n executeSchedule(subscriber, scheduler, function () {\n var _a;\n var value;\n var done;\n try {\n (_a = iterator.next(), value = _a.value, done = _a.done);\n }\n catch (err) {\n subscriber.error(err);\n return;\n }\n if (done) {\n subscriber.complete();\n }\n else {\n subscriber.next(value);\n }\n }, 0, true);\n });\n return function () { return isFunction(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return(); };\n });\n}\n//# sourceMappingURL=scheduleIterable.js.map","import { Observable } from '../Observable';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleAsyncIterable(input, scheduler) {\n if (!input) {\n throw new Error('Iterable cannot be null');\n }\n return new Observable(function (subscriber) {\n executeSchedule(subscriber, scheduler, function () {\n var iterator = input[Symbol.asyncIterator]();\n executeSchedule(subscriber, scheduler, function () {\n iterator.next().then(function (result) {\n if (result.done) {\n subscriber.complete();\n }\n else {\n subscriber.next(result.value);\n }\n });\n }, 0, true);\n });\n });\n}\n//# sourceMappingURL=scheduleAsyncIterable.js.map","import { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nexport function scheduleReadableStreamLike(input, scheduler) {\n return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);\n}\n//# sourceMappingURL=scheduleReadableStreamLike.js.map","import { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isReadableStreamLike } from '../util/isReadableStreamLike';\nimport { scheduleReadableStreamLike } from './scheduleReadableStreamLike';\nexport function scheduled(input, scheduler) {\n if (input != null) {\n if (isInteropObservable(input)) {\n return scheduleObservable(input, scheduler);\n }\n if (isArrayLike(input)) {\n return scheduleArray(input, scheduler);\n }\n if (isPromise(input)) {\n return schedulePromise(input, scheduler);\n }\n if (isAsyncIterable(input)) {\n return scheduleAsyncIterable(input, scheduler);\n }\n if (isIterable(input)) {\n return scheduleIterable(input, scheduler);\n }\n if (isReadableStreamLike(input)) {\n return scheduleReadableStreamLike(input, scheduler);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\n//# sourceMappingURL=scheduled.js.map","import { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\nexport function from(input, scheduler) {\n return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n//# sourceMappingURL=from.js.map","import { popScheduler } from '../util/args';\nimport { from } from './from';\nexport function of() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = popScheduler(args);\n return from(args, scheduler);\n}\n//# sourceMappingURL=of.js.map","import { createErrorClass } from './createErrorClass';\nexport var EmptyError = createErrorClass(function (_super) { return function EmptyErrorImpl() {\n _super(this);\n this.name = 'EmptyError';\n this.message = 'no elements in sequence';\n}; });\n//# sourceMappingURL=EmptyError.js.map","export function isValidDate(value) {\n return value instanceof Date && !isNaN(value);\n}\n//# sourceMappingURL=isDate.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function map(project, thisArg) {\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n subscriber.next(project.call(thisArg, value, index++));\n }));\n });\n}\n//# sourceMappingURL=map.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { map } from \"../operators/map\";\nvar isArray = Array.isArray;\nfunction callOrApply(fn, args) {\n return isArray(args) ? fn.apply(void 0, __spreadArray([], __read(args))) : fn(args);\n}\nexport function mapOneOrManyArgs(fn) {\n return map(function (args) { return callOrApply(fn, args); });\n}\n//# sourceMappingURL=mapOneOrManyArgs.js.map","var isArray = Array.isArray;\nvar getPrototypeOf = Object.getPrototypeOf, objectProto = Object.prototype, getKeys = Object.keys;\nexport function argsArgArrayOrObject(args) {\n if (args.length === 1) {\n var first_1 = args[0];\n if (isArray(first_1)) {\n return { args: first_1, keys: null };\n }\n if (isPOJO(first_1)) {\n var keys = getKeys(first_1);\n return {\n args: keys.map(function (key) { return first_1[key]; }),\n keys: keys,\n };\n }\n }\n return { args: args, keys: null };\n}\nfunction isPOJO(obj) {\n return obj && typeof obj === 'object' && getPrototypeOf(obj) === objectProto;\n}\n//# sourceMappingURL=argsArgArrayOrObject.js.map","export function createObject(keys, values) {\n return keys.reduce(function (result, key, i) { return ((result[key] = values[i]), result); }, {});\n}\n//# sourceMappingURL=createObject.js.map","import { Observable } from '../Observable';\nimport { argsArgArrayOrObject } from '../util/argsArgArrayOrObject';\nimport { from } from './from';\nimport { identity } from '../util/identity';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { popResultSelector, popScheduler } from '../util/args';\nimport { createObject } from '../util/createObject';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function combineLatest() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = popScheduler(args);\n var resultSelector = popResultSelector(args);\n var _a = argsArgArrayOrObject(args), observables = _a.args, keys = _a.keys;\n if (observables.length === 0) {\n return from([], scheduler);\n }\n var result = new Observable(combineLatestInit(observables, scheduler, keys\n ?\n function (values) { return createObject(keys, values); }\n :\n identity));\n return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result;\n}\nexport function combineLatestInit(observables, scheduler, valueTransform) {\n if (valueTransform === void 0) { valueTransform = identity; }\n return function (subscriber) {\n maybeSchedule(scheduler, function () {\n var length = observables.length;\n var values = new Array(length);\n var active = length;\n var remainingFirstValues = length;\n var _loop_1 = function (i) {\n maybeSchedule(scheduler, function () {\n var source = from(observables[i], scheduler);\n var hasFirstValue = false;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n values[i] = value;\n if (!hasFirstValue) {\n hasFirstValue = true;\n remainingFirstValues--;\n }\n if (!remainingFirstValues) {\n subscriber.next(valueTransform(values.slice()));\n }\n }, function () {\n if (!--active) {\n subscriber.complete();\n }\n }));\n }, subscriber);\n };\n for (var i = 0; i < length; i++) {\n _loop_1(i);\n }\n }, subscriber);\n };\n}\nfunction maybeSchedule(scheduler, execute, subscription) {\n if (scheduler) {\n executeSchedule(subscription, scheduler, execute);\n }\n else {\n execute();\n }\n}\n//# sourceMappingURL=combineLatest.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {\n var buffer = [];\n var active = 0;\n var index = 0;\n var isComplete = false;\n var checkComplete = function () {\n if (isComplete && !buffer.length && !active) {\n subscriber.complete();\n }\n };\n var outerNext = function (value) { return (active < concurrent ? doInnerSub(value) : buffer.push(value)); };\n var doInnerSub = function (value) {\n expand && subscriber.next(value);\n active++;\n var innerComplete = false;\n innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, function (innerValue) {\n onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);\n if (expand) {\n outerNext(innerValue);\n }\n else {\n subscriber.next(innerValue);\n }\n }, function () {\n innerComplete = true;\n }, undefined, function () {\n if (innerComplete) {\n try {\n active--;\n var _loop_1 = function () {\n var bufferedValue = buffer.shift();\n if (innerSubScheduler) {\n executeSchedule(subscriber, innerSubScheduler, function () { return doInnerSub(bufferedValue); });\n }\n else {\n doInnerSub(bufferedValue);\n }\n };\n while (buffer.length && active < concurrent) {\n _loop_1();\n }\n checkComplete();\n }\n catch (err) {\n subscriber.error(err);\n }\n }\n }));\n };\n source.subscribe(createOperatorSubscriber(subscriber, outerNext, function () {\n isComplete = true;\n checkComplete();\n }));\n return function () {\n additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();\n };\n}\n//# sourceMappingURL=mergeInternals.js.map","import { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nimport { isFunction } from '../util/isFunction';\nexport function mergeMap(project, resultSelector, concurrent) {\n if (concurrent === void 0) { concurrent = Infinity; }\n if (isFunction(resultSelector)) {\n return mergeMap(function (a, i) { return map(function (b, ii) { return resultSelector(a, b, i, ii); })(innerFrom(project(a, i))); }, concurrent);\n }\n else if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n return operate(function (source, subscriber) { return mergeInternals(source, subscriber, project, concurrent); });\n}\n//# sourceMappingURL=mergeMap.js.map","import { mergeMap } from './mergeMap';\nimport { identity } from '../util/identity';\nexport function mergeAll(concurrent) {\n if (concurrent === void 0) { concurrent = Infinity; }\n return mergeMap(identity, concurrent);\n}\n//# sourceMappingURL=mergeAll.js.map","import { mergeAll } from './mergeAll';\nexport function concatAll() {\n return mergeAll(1);\n}\n//# sourceMappingURL=concatAll.js.map","import { concatAll } from '../operators/concatAll';\nimport { popScheduler } from '../util/args';\nimport { from } from './from';\nexport function concat() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return concatAll()(from(args, popScheduler(args)));\n}\n//# sourceMappingURL=concat.js.map","import { Observable } from '../Observable';\nimport { argsArgArrayOrObject } from '../util/argsArgArrayOrObject';\nimport { innerFrom } from './innerFrom';\nimport { popResultSelector } from '../util/args';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { createObject } from '../util/createObject';\nexport function forkJoin() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var resultSelector = popResultSelector(args);\n var _a = argsArgArrayOrObject(args), sources = _a.args, keys = _a.keys;\n var result = new Observable(function (subscriber) {\n var length = sources.length;\n if (!length) {\n subscriber.complete();\n return;\n }\n var values = new Array(length);\n var remainingCompletions = length;\n var remainingEmissions = length;\n var _loop_1 = function (sourceIndex) {\n var hasValue = false;\n innerFrom(sources[sourceIndex]).subscribe(createOperatorSubscriber(subscriber, function (value) {\n if (!hasValue) {\n hasValue = true;\n remainingEmissions--;\n }\n values[sourceIndex] = value;\n }, function () { return remainingCompletions--; }, undefined, function () {\n if (!remainingCompletions || !hasValue) {\n if (!remainingEmissions) {\n subscriber.next(keys ? createObject(keys, values) : values);\n }\n subscriber.complete();\n }\n }));\n };\n for (var sourceIndex = 0; sourceIndex < length; sourceIndex++) {\n _loop_1(sourceIndex);\n }\n });\n return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result;\n}\n//# sourceMappingURL=forkJoin.js.map","import { __read } from \"tslib\";\nimport { innerFrom } from '../observable/innerFrom';\nimport { Observable } from '../Observable';\nimport { mergeMap } from '../operators/mergeMap';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isFunction } from '../util/isFunction';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nvar nodeEventEmitterMethods = ['addListener', 'removeListener'];\nvar eventTargetMethods = ['addEventListener', 'removeEventListener'];\nvar jqueryMethods = ['on', 'off'];\nexport function fromEvent(target, eventName, options, resultSelector) {\n if (isFunction(options)) {\n resultSelector = options;\n options = undefined;\n }\n if (resultSelector) {\n return fromEvent(target, eventName, options).pipe(mapOneOrManyArgs(resultSelector));\n }\n var _a = __read(isEventTarget(target)\n ? eventTargetMethods.map(function (methodName) { return function (handler) { return target[methodName](eventName, handler, options); }; })\n :\n isNodeStyleEventEmitter(target)\n ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName))\n : isJQueryStyleEventEmitter(target)\n ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName))\n : [], 2), add = _a[0], remove = _a[1];\n if (!add) {\n if (isArrayLike(target)) {\n return mergeMap(function (subTarget) { return fromEvent(subTarget, eventName, options); })(innerFrom(target));\n }\n }\n if (!add) {\n throw new TypeError('Invalid event target');\n }\n return new Observable(function (subscriber) {\n var handler = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return subscriber.next(1 < args.length ? args : args[0]);\n };\n add(handler);\n return function () { return remove(handler); };\n });\n}\nfunction toCommonHandlerRegistry(target, eventName) {\n return function (methodName) { return function (handler) { return target[methodName](eventName, handler); }; };\n}\nfunction isNodeStyleEventEmitter(target) {\n return isFunction(target.addListener) && isFunction(target.removeListener);\n}\nfunction isJQueryStyleEventEmitter(target) {\n return isFunction(target.on) && isFunction(target.off);\n}\nfunction isEventTarget(target) {\n return isFunction(target.addEventListener) && isFunction(target.removeEventListener);\n}\n//# sourceMappingURL=fromEvent.js.map","import { Observable } from '../Observable';\nimport { async as asyncScheduler } from '../scheduler/async';\nimport { isScheduler } from '../util/isScheduler';\nimport { isValidDate } from '../util/isDate';\nexport function timer(dueTime, intervalOrScheduler, scheduler) {\n if (dueTime === void 0) { dueTime = 0; }\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n var intervalDuration = -1;\n if (intervalOrScheduler != null) {\n if (isScheduler(intervalOrScheduler)) {\n scheduler = intervalOrScheduler;\n }\n else {\n intervalDuration = intervalOrScheduler;\n }\n }\n return new Observable(function (subscriber) {\n var due = isValidDate(dueTime) ? +dueTime - scheduler.now() : dueTime;\n if (due < 0) {\n due = 0;\n }\n var n = 0;\n return scheduler.schedule(function () {\n if (!subscriber.closed) {\n subscriber.next(n++);\n if (0 <= intervalDuration) {\n this.schedule(undefined, intervalDuration);\n }\n else {\n subscriber.complete();\n }\n }\n }, due);\n });\n}\n//# sourceMappingURL=timer.js.map","import { asyncScheduler } from '../scheduler/async';\nimport { timer } from './timer';\nexport function interval(period, scheduler) {\n if (period === void 0) { period = 0; }\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n if (period < 0) {\n period = 0;\n }\n return timer(period, period, scheduler);\n}\n//# sourceMappingURL=interval.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function filter(predicate, thisArg) {\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) { return predicate.call(thisArg, value, index++) && subscriber.next(value); }));\n });\n}\n//# sourceMappingURL=filter.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { operate } from '../util/lift';\nexport function catchError(selector) {\n return operate(function (source, subscriber) {\n var innerSub = null;\n var syncUnsub = false;\n var handledResult;\n innerSub = source.subscribe(createOperatorSubscriber(subscriber, undefined, undefined, function (err) {\n handledResult = innerFrom(selector(err, catchError(selector)(source)));\n if (innerSub) {\n innerSub.unsubscribe();\n innerSub = null;\n handledResult.subscribe(subscriber);\n }\n else {\n syncUnsub = true;\n }\n }));\n if (syncUnsub) {\n innerSub.unsubscribe();\n innerSub = null;\n handledResult.subscribe(subscriber);\n }\n });\n}\n//# sourceMappingURL=catchError.js.map","import { asyncScheduler } from '../scheduler/async';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function debounceTime(dueTime, scheduler) {\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n return operate(function (source, subscriber) {\n var activeTask = null;\n var lastValue = null;\n var lastTime = null;\n var emit = function () {\n if (activeTask) {\n activeTask.unsubscribe();\n activeTask = null;\n var value = lastValue;\n lastValue = null;\n subscriber.next(value);\n }\n };\n function emitWhenIdle() {\n var targetTime = lastTime + dueTime;\n var now = scheduler.now();\n if (now < targetTime) {\n activeTask = this.schedule(undefined, targetTime - now);\n subscriber.add(activeTask);\n return;\n }\n emit();\n }\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n lastValue = value;\n lastTime = scheduler.now();\n if (!activeTask) {\n activeTask = scheduler.schedule(emitWhenIdle, dueTime);\n subscriber.add(activeTask);\n }\n }, function () {\n emit();\n subscriber.complete();\n }, undefined, function () {\n lastValue = activeTask = null;\n }));\n });\n}\n//# sourceMappingURL=debounceTime.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function defaultIfEmpty(defaultValue) {\n return operate(function (source, subscriber) {\n var hasValue = false;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n hasValue = true;\n subscriber.next(value);\n }, function () {\n if (!hasValue) {\n subscriber.next(defaultValue);\n }\n subscriber.complete();\n }));\n });\n}\n//# sourceMappingURL=defaultIfEmpty.js.map","import { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function take(count) {\n return count <= 0\n ?\n function () { return EMPTY; }\n : operate(function (source, subscriber) {\n var seen = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n if (++seen <= count) {\n subscriber.next(value);\n if (count <= seen) {\n subscriber.complete();\n }\n }\n }));\n });\n}\n//# sourceMappingURL=take.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { noop } from '../util/noop';\nexport function ignoreElements() {\n return operate(function (source, subscriber) {\n source.subscribe(createOperatorSubscriber(subscriber, noop));\n });\n}\n//# sourceMappingURL=ignoreElements.js.map","import { map } from './map';\nexport function mapTo(value) {\n return map(function () { return value; });\n}\n//# sourceMappingURL=mapTo.js.map","import { concat } from '../observable/concat';\nimport { take } from './take';\nimport { ignoreElements } from './ignoreElements';\nimport { mapTo } from './mapTo';\nimport { mergeMap } from './mergeMap';\nimport { innerFrom } from '../observable/innerFrom';\nexport function delayWhen(delayDurationSelector, subscriptionDelay) {\n if (subscriptionDelay) {\n return function (source) {\n return concat(subscriptionDelay.pipe(take(1), ignoreElements()), source.pipe(delayWhen(delayDurationSelector)));\n };\n }\n return mergeMap(function (value, index) { return innerFrom(delayDurationSelector(value, index)).pipe(take(1), mapTo(value)); });\n}\n//# sourceMappingURL=delayWhen.js.map","import { asyncScheduler } from '../scheduler/async';\nimport { delayWhen } from './delayWhen';\nimport { timer } from '../observable/timer';\nexport function delay(due, scheduler) {\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n var duration = timer(due, scheduler);\n return delayWhen(function () { return duration; });\n}\n//# sourceMappingURL=delay.js.map","import { EmptyError } from '../util/EmptyError';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function throwIfEmpty(errorFactory) {\n if (errorFactory === void 0) { errorFactory = defaultErrorFactory; }\n return operate(function (source, subscriber) {\n var hasValue = false;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n hasValue = true;\n subscriber.next(value);\n }, function () { return (hasValue ? subscriber.complete() : subscriber.error(errorFactory())); }));\n });\n}\nfunction defaultErrorFactory() {\n return new EmptyError();\n}\n//# sourceMappingURL=throwIfEmpty.js.map","import { EmptyError } from '../util/EmptyError';\nimport { filter } from './filter';\nimport { take } from './take';\nimport { defaultIfEmpty } from './defaultIfEmpty';\nimport { throwIfEmpty } from './throwIfEmpty';\nimport { identity } from '../util/identity';\nexport function first(predicate, defaultValue) {\n var hasDefaultValue = arguments.length >= 2;\n return function (source) {\n return source.pipe(predicate ? filter(function (v, i) { return predicate(v, i, source); }) : identity, take(1), hasDefaultValue ? defaultIfEmpty(defaultValue) : throwIfEmpty(function () { return new EmptyError(); }));\n };\n}\n//# sourceMappingURL=first.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function switchMap(project, resultSelector) {\n return operate(function (source, subscriber) {\n var innerSubscriber = null;\n var index = 0;\n var isComplete = false;\n var checkComplete = function () { return isComplete && !innerSubscriber && subscriber.complete(); };\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe();\n var innerIndex = 0;\n var outerIndex = index++;\n innerFrom(project(value, outerIndex)).subscribe((innerSubscriber = createOperatorSubscriber(subscriber, function (innerValue) { return subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue); }, function () {\n innerSubscriber = null;\n checkComplete();\n })));\n }, function () {\n isComplete = true;\n checkComplete();\n }));\n });\n}\n//# sourceMappingURL=switchMap.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { noop } from '../util/noop';\nexport function takeUntil(notifier) {\n return operate(function (source, subscriber) {\n innerFrom(notifier).subscribe(createOperatorSubscriber(subscriber, function () { return subscriber.complete(); }, noop));\n !subscriber.closed && source.subscribe(subscriber);\n });\n}\n//# sourceMappingURL=takeUntil.js.map","/**\n * Copyright 2023 ByOmakase, LLC (https://byomakase.org)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Includes rxjs <https://github.com/ReactiveX/rxjs>\n * Available under Apache License Version 2.0\n * <https://github.com/ReactiveX/rxjs/blob/master/LICENSE.txt>\n */\n\nimport {Subject} from \"rxjs\";\n\nexport class StyleAdapter<T> {\n public readonly onChange$: Subject<T> = new Subject<T>();\n\n private _style: T;\n\n constructor(style: T) {\n this.style = style;\n }\n\n get style(): T {\n return this._style;\n }\n\n set style(value: Partial<T>) {\n this._style = {\n ...this._style,\n ...value\n };\n this.onChange$.next(this._style);\n }\n}\n","/**\n * Copyright 2023 ByOmakase, LLC (https://byomakase.org)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Includes rxjs <https://github.com/ReactiveX/rxjs>\n * Available under Apache License Version 2.0\n * <https://github.com/ReactiveX/rxjs/blob/master/LICENSE.txt>\n */\n\nimport Konva from \"konva\";\nimport {map, Observable, of, Subject} from \"rxjs\";\nimport {StyleAdapter} from \"./style-adapter\";\nimport {WithOptionalPartial} from \"../types/types\";\n\nexport interface ComponentConfig<S> {\n style: S\n}\n\n/***\n * Intended to be used in component constructors. 'style' property is made optional, style type 'S' type is made Partial\n */\nexport type ComponentConfigStyleComposed<T extends ComponentConfig<any>> = WithOptionalPartial<T, 'style'>;\n\nexport const composeConfigAndDefault = <T extends ComponentConfig<any>>(config: Partial<ComponentConfigStyleComposed<T>>, configDefault: T): T => {\n return {\n ...configDefault,\n ...config,\n style: {\n ...configDefault.style,\n ...config.style,\n },\n }\n}\n\nexport interface Component<C extends ComponentConfig<S>, S, T extends Konva.Node> {\n get style(): S;\n\n set style(value: Partial<S>);\n\n initCanvasNode(): T;\n\n getCanvasNode(): T;\n\n destroy();\n\n isInitialized(): boolean;\n}\n\nexport abstract class BaseComponent<C extends ComponentConfig<S>, S, T extends Konva.Node> implements Component<C, S, T> {\n protected config: C;\n protected styleAdapter: StyleAdapter<S>;\n protected canvasNode: T;\n\n public readonly onDestroy$ = new Subject<void>();\n\n protected constructor(config: C) {\n this.config = config;\n this.styleAdapter = new StyleAdapter(config.style);\n }\n\n protected abstract createCanvasNode(): T;\n\n initCanvasNode(): T {\n if (this.isInitialized()) {\n throw new Error('Konva node already initalized')\n }\n this.canvasNode = this.createCanvasNode();\n this.afterCanvasNodeInit();\n return this.canvasNode;\n }\n\n initCanvasNodeAsync(): Observable<T> {\n return this.createCanvasNodeAsync().pipe(map(konvaNode => {\n this.canvasNode = konvaNode;\n this.afterCanvasNodeInit();\n return this.canvasNode;\n }))\n }\n\n protected createCanvasNodeAsync(): Observable<T> {\n return of(this.createCanvasNode());\n }\n\n protected afterCanvasNodeInit() {\n\n }\n\n destroy() {\n if (this.isInitialized()) {\n this.getCanvasNode().destroy();\n }\n this.onDestroy$.next();\n this.onDestroy$.complete();\n }\n\n getCanvasNode(): T {\n return this.canvasNode;\n }\n\n isInitialized(): boolean {\n return !!this.getCanvasNode();\n }\n\n get style(): S {\n return this.styleAdapter.style;\n }\n\n set style(value: Partial<S>) {\n this.styleAdapter.style = value;\n }\n\n\n}\n","import {Dimension, Position} from \"./common/measurement\";\n\nexport class Constants {\n public static POSITION_TOP_LEFT: Position = {\n x: 0,\n y: 0\n }\n\n public static DIMENSION_ZERO: Dimension = {\n width: 0,\n height: 0\n }\n\n public static GOLDEN_RATIO = 1.61\n\n public static TIMELINE_ZOOM_EASED_DURATION_MS = 800\n public static TIMELINE_SCROLL_EASED_DURATION_MS = 200\n\n public static MIME_TYPE_VND_APPLE_MPEGURL = 'application/vnd.apple.mpegurl';\n}\n","var util;\n(function (util) {\n util.assertEqual = (val) => val;\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array\n .map((val) => (typeof val === \"string\" ? `'${val}'` : val))\n .join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nconst ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nconst getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then &&\n typeof data.then === \"function\" &&\n data.catch &&\n typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n\nconst ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nconst quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nclass ZodError extends Error {\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n get errors() {\n return this.issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${new Date(issue.minimum)}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `smaller than or equal to`\n : `smaller than`} ${new Date(issue.maximum)}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\n\nlet overrideErrorMap = errorMap;\nfunction setErrorMap(map) {\n overrideErrorMap = map;\n}\nfunction getErrorMap() {\n return overrideErrorMap;\n}\n\nconst makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message || errorMessage,\n };\n};\nconst EMPTY_PATH = [];\nfunction addIssueToContext(ctx, issueData) {\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nclass ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n syncPairs.push({\n key: await pair.key,\n value: await pair.value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (typeof value.value !== \"undefined\" || pair.alwaysSet) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nconst INVALID = Object.freeze({\n status: \"aborted\",\n});\nconst DIRTY = (value) => ({ status: \"dirty\", value });\nconst OK = (value) => ({ status: \"valid\", value });\nconst isAborted = (x) => x.status === \"aborted\";\nconst isDirty = (x) => x.status === \"dirty\";\nconst isValid = (x) => x.status === \"valid\";\nconst isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n\nvar errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message === null || message === void 0 ? void 0 : message.message;\n})(errorUtil || (errorUtil = {}));\n\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n return this._path.concat(this._key);\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n const error = new ZodError(ctx.common.issues);\n return { success: false, error };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n if (typeof ctx.data === \"undefined\") {\n return { message: required_error !== null && required_error !== void 0 ? required_error : ctx.defaultError };\n }\n return { message: invalid_type_error !== null && invalid_type_error !== void 0 ? invalid_type_error : ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nclass ZodType {\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n }\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n var _a;\n const ctx = {\n common: {\n issues: [],\n async: (_a = params === null || params === void 0 ? void 0 : params.async) !== null && _a !== void 0 ? _a : false,\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n async: true,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult)\n ? maybeAsyncResult\n : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\"\n ? refinementData(val, ctx)\n : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this, this._def);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[a-z][a-z0-9]*$/;\nconst uuidRegex = /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\nconst emailRegex = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|([^-]([a-zA-Z0-9-]*\\.)+[a-zA-Z]{2,}))$/;\n// interface IsDateStringOptions extends StringDateOptions {\n/**\n * Match any configuration\n */\n// any?: boolean;\n// }\n// Adapted from https://stackoverflow.com/a/3143231\nconst datetimeRegex = (args) => {\n if (args.precision) {\n if (args.offset) {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}\\\\.\\\\d{${args.precision}}(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$`);\n }\n else {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}\\\\.\\\\d{${args.precision}}Z$`);\n }\n }\n else if (args.precision === 0) {\n if (args.offset) {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$`);\n }\n else {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}Z$`);\n }\n }\n else {\n if (args.offset) {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(\\\\.\\\\d+)?(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$`);\n }\n else {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(\\\\.\\\\d+)?Z$`);\n }\n }\n};\nclass ZodString extends ZodType {\n constructor() {\n super(...arguments);\n this._regex = (regex, validation, message) => this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n /**\n * @deprecated Use z.string().min(1) instead.\n * @see {@link ZodString.min}\n */\n this.nonempty = (message) => this.min(1, errorUtil.errToObj(message));\n this.trim = () => new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n }\n //\n );\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch (_a) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n datetime(options) {\n var _a;\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n offset: (_a = options === null || options === void 0 ? void 0 : options.offset) !== null && _a !== void 0 ? _a : false,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n var _a;\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / Math.pow(10, decCount);\n}\nclass ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" ||\n (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null, min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" ||\n ch.kind === \"int\" ||\n ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodBigInt extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = BigInt(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBigInt.create = (params) => {\n var _a;\n return new ZodBigInt({\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\nclass ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nclass ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nclass ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nclass ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nclass ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nclass ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nclass ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nclass ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nclass ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////\n/////////////////////////////////////////\n////////// //////////\n////////// ZodObject //////////\n////////// //////////\n/////////////////////////////////////////\n/////////////////////////////////////////\nvar objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return ZodArray.create(deepPartialify(schema.element));\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nclass ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n return (this._cached = { shape, keys });\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever &&\n this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") ;\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n syncPairs.push({\n key,\n value: await pair.value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n var _a, _b, _c, _d;\n const defaultError = (_c = (_b = (_a = this._def).errorMap) === null || _b === void 0 ? void 0 : _b.call(_a, issue, ctx).message) !== null && _c !== void 0 ? _c : ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: (_d = errorUtil.errToObj(message).message) !== null && _d !== void 0 ? _d : defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n util.objectKeys(mask).forEach((key) => {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nclass ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return Object.keys(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else {\n return null;\n }\n};\nclass ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util\n .objectKeys(a)\n .filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date &&\n bType === ZodParsedType.date &&\n +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nclass ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\nclass ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nclass ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nclass ZodMap extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nclass ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nclass ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n return OK(async (...args) => {\n const error = new ZodError([]);\n const parsedArgs = await this._def.args\n .parseAsync(args, params)\n .catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await fn(...parsedArgs);\n const parsedReturns = await this._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n return OK((...args) => {\n const parsedArgs = this._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = fn(...parsedArgs.data);\n const parsedReturns = this._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args\n ? args\n : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nclass ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nclass ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nclass ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (this._def.values.indexOf(input.data) === -1) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values) {\n return ZodEnum.create(values);\n }\n exclude(values) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)));\n }\n}\nZodEnum.create = createZodEnum;\nclass ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string &&\n ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (nativeEnumValues.indexOf(input.data) === -1) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nclass ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise &&\n ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise\n ? ctx.data\n : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nclass ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data);\n if (ctx.common.async) {\n return Promise.resolve(processed).then((processed) => {\n return this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n });\n }\n else {\n return this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc\n // effect: RefinementEffect<any>\n ) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n // if (base.status === \"aborted\") return INVALID;\n // if (base.status === \"dirty\") {\n // return { status: \"dirty\", value: base.value };\n // }\n if (!isValid(base))\n return base;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((base) => {\n if (!isValid(base))\n return base;\n // if (base.status === \"aborted\") return INVALID;\n // if (base.status === \"dirty\") {\n // return { status: \"dirty\", value: base.value };\n // }\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({ status: status.value, value: result }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nclass ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nclass ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nclass ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\"\n ? params.default\n : () => params.default,\n ...processCreateParams(params),\n });\n};\nclass ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const result = this._def.innerType._parse({\n data: ctx.data,\n path: ctx.path,\n parent: {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [], // don't collect issues from inner type\n },\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\" ? result.value : this._def.catchValue(),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\" ? result.value : this._def.catchValue(),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nclass ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nconst BRAND = Symbol(\"zod_brand\");\nclass ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nclass ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nconst custom = (check, params = {}, fatal) => {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n if (!check(data)) {\n const p = typeof params === \"function\" ? params(data) : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n ctx.addIssue({ code: \"custom\", ...p2, fatal });\n }\n });\n return ZodAny.create();\n};\nconst late = {\n object: ZodObject.lazycreate,\n};\nvar ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params, true);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nconst coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nconst NEVER = INVALID;\n\nvar mod = /*#__PURE__*/Object.freeze({\n __proto__: null,\n defaultErrorMap: errorMap,\n setErrorMap: setErrorMap,\n getErrorMap: getErrorMap,\n makeIssue: makeIssue,\n EMPTY_PATH: EMPTY_PATH,\n addIssueToContext: addIssueToContext,\n ParseStatus: ParseStatus,\n INVALID: INVALID,\n DIRTY: DIRTY,\n OK: OK,\n isAborted: isAborted,\n isDirty: isDirty,\n isValid: isValid,\n isAsync: isAsync,\n get util () { return util; },\n ZodParsedType: ZodParsedType,\n getParsedType: getParsedType,\n ZodType: ZodType,\n ZodString: ZodString,\n ZodNumber: ZodNumber,\n ZodBigInt: ZodBigInt,\n ZodBoolean: ZodBoolean,\n ZodDate: ZodDate,\n ZodSymbol: ZodSymbol,\n ZodUndefined: ZodUndefined,\n ZodNull: ZodNull,\n ZodAny: ZodAny,\n ZodUnknown: ZodUnknown,\n ZodNever: ZodNever,\n ZodVoid: ZodVoid,\n ZodArray: ZodArray,\n get objectUtil () { return objectUtil; },\n ZodObject: ZodObject,\n ZodUnion: ZodUnion,\n ZodDiscriminatedUnion: ZodDiscriminatedUnion,\n ZodIntersection: ZodIntersection,\n ZodTuple: ZodTuple,\n ZodRecord: ZodRecord,\n ZodMap: ZodMap,\n ZodSet: ZodSet,\n ZodFunction: ZodFunction,\n ZodLazy: ZodLazy,\n ZodLiteral: ZodLiteral,\n ZodEnum: ZodEnum,\n ZodNativeEnum: ZodNativeEnum,\n ZodPromise: ZodPromise,\n ZodEffects: ZodEffects,\n ZodTransformer: ZodEffects,\n ZodOptional: ZodOptional,\n ZodNullable: ZodNullable,\n ZodDefault: ZodDefault,\n ZodCatch: ZodCatch,\n ZodNaN: ZodNaN,\n BRAND: BRAND,\n ZodBranded: ZodBranded,\n ZodPipeline: ZodPipeline,\n custom: custom,\n Schema: ZodType,\n ZodSchema: ZodType,\n late: late,\n get ZodFirstPartyTypeKind () { return ZodFirstPartyTypeKind; },\n coerce: coerce,\n any: anyType,\n array: arrayType,\n bigint: bigIntType,\n boolean: booleanType,\n date: dateType,\n discriminatedUnion: discriminatedUnionType,\n effect: effectsType,\n 'enum': enumType,\n 'function': functionType,\n 'instanceof': instanceOfType,\n intersection: intersectionType,\n lazy: lazyType,\n literal: literalType,\n map: mapType,\n nan: nanType,\n nativeEnum: nativeEnumType,\n never: neverType,\n 'null': nullType,\n nullable: nullableType,\n number: numberType,\n object: objectType,\n oboolean: oboolean,\n onumber: onumber,\n optional: optionalType,\n ostring: ostring,\n pipeline: pipelineType,\n preprocess: preprocessType,\n promise: promiseType,\n record: recordType,\n set: setType,\n strictObject: strictObjectType,\n string: stringType,\n symbol: symbolType,\n transformer: effectsType,\n tuple: tupleType,\n 'undefined': undefinedType,\n union: unionType,\n unknown: unknownType,\n 'void': voidType,\n NEVER: NEVER,\n ZodIssueCode: ZodIssueCode,\n quotelessJson: quotelessJson,\n ZodError: ZodError\n});\n\nexport { BRAND, DIRTY, EMPTY_PATH, INVALID, NEVER, OK, ParseStatus, ZodType as Schema, ZodAny, ZodArray, ZodBigInt, ZodBoolean, ZodBranded, ZodCatch, ZodDate, ZodDefault, ZodDiscriminatedUnion, ZodEffects, ZodEnum, ZodError, ZodFirstPartyTypeKind, ZodFunction, ZodIntersection, ZodIssueCode, ZodLazy, ZodLiteral, ZodMap, ZodNaN, ZodNativeEnum, ZodNever, ZodNull, ZodNullable, ZodNumber, ZodObject, ZodOptional, ZodParsedType, ZodPipeline, ZodPromise, ZodRecord, ZodType as ZodSchema, ZodSet, ZodString, ZodSymbol, ZodEffects as ZodTransformer, ZodTuple, ZodType, ZodUndefined, ZodUnion, ZodUnknown, ZodVoid, addIssueToContext, anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, coerce, custom, dateType as date, mod as default, errorMap as defaultErrorMap, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, getErrorMap, getParsedType, instanceOfType as instanceof, intersectionType as intersection, isAborted, isAsync, isDirty, isValid, late, lazyType as lazy, literalType as literal, makeIssue, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, objectUtil, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, quotelessJson, recordType as record, setType as set, setErrorMap, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, util, voidType as void, mod as z };\n","import {z} from \"zod\";\n\nexport class Validators {\n\n public static id(): (value: string) => string {\n return (value: string) => {\n return z.coerce.string()\n .min(1)\n .max(100)\n .parse(value);\n }\n }\n\n public static description(): (value: string) => string {\n return (value: string) => {\n return z.coerce.string()\n .max(1000)\n .parse(value);\n }\n }\n\n public static boolean(): (value: boolean) => boolean {\n return (value: boolean) => {\n return z.coerce.boolean()\n .parse(value);\n }\n }\n\n public static url(): (value: string) => string {\n return (value: string) => {\n return z.coerce.string()\n .url()\n .parse(value);\n }\n }\n\n}\n","/**\n * Copyright 2023 ByOmakase, LLC (https://byomakase.org)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Includes rxjs <https://github.com/ReactiveX/rxjs>\n * Available under Apache License Version 2.0\n * <https://github.com/ReactiveX/rxjs/blob/master/LICENSE.txt>\n */\n\nimport {BehaviorSubject, Subject} from \"rxjs\";\nimport {OmakasePlayerStyle} from \"../omakase-player\";\n\nexport interface Styles {\n omakasePlayerStyle: OmakasePlayerStyle\n}\n\nexport class StylesProvider {\n private static _instance: StylesProvider;\n\n public readonly onChange$: Subject<Styles> = new BehaviorSubject<Styles>(undefined);\n\n private _styles: Styles;\n\n private constructor() {\n\n }\n\n public static instance(): StylesProvider {\n if (!StylesProvider._instance) {\n StylesProvider._instance = new StylesProvider();\n }\n return StylesProvider._instance;\n }\n\n get styles(): Styles {\n return this._styles;\n }\n\n set styles(value: Partial<Styles>) {\n this._styles = {\n ...this._styles,\n ...value\n };\n this.onChange$.next(this._styles);\n }\n\n}\n","import {BaseComponent, Component, ComponentConfig} from \"../common/component\";\nimport Konva from \"konva\";\nimport {Dimension, OnMeasurementsChange, Position, RectMeasurement} from \"../common/measurement\";\nimport {Constants} from \"../constants\";\nimport {Timeline} from \"./timeline\";\nimport {filter, takeUntil} from \"rxjs\";\nimport {Validators} from \"../validators\";\nimport {StylesProvider} from \"../common/styles-provider\";\nimport {VideoController} from \"../video/video-controller\";\n\nexport interface TimelineLaneStyle {\n height: number;\n backgroundFill: string,\n backgroundOpacity: number,\n descriptionTextFill: string;\n descriptionFontSize: number;\n leftBackgroundFill: string,\n leftBackgroundOpacity: number,\n}\n\nexport const TIMELINE_LANE_STYLE_DEFAULT: TimelineLaneStyle = {\n height: 80,\n backgroundFill: '#ffffff',\n backgroundOpacity: 1,\n descriptionTextFill: '#1c1c1c',\n descriptionFontSize: 15,\n leftBackgroundFill: '#ffffff',\n leftBackgroundOpacity: 1,\n}\n\nexport interface TimelaneLaneConfig<S extends TimelineLaneStyle> extends ComponentConfig<S> {\n id: string;\n description: string;\n}\n\nexport interface TimelaneLane<C extends TimelaneLaneConfig<S>, S extends TimelineLaneStyle> extends Component<C, S, Konva.Group>, OnMeasurementsChange {\n style: S;\n getId(): string;\n getDescription(): string;\n getRect(): RectMeasurement;\n getPosition(): Position;\n getDimension(): Dimension;\n setTimelinePosition(position: Position);\n getTimelinePosition(): Position;\n clearContent();\n setTimeline(timeline: Timeline);\n setVideoController(videoController: VideoController);\n}\n\nexport type GenericTimelaneLane = TimelaneLane<TimelaneLaneConfig<TimelineLaneStyle>, TimelineLaneStyle>;\n\nexport abstract class BaseTimelineLane<C extends TimelaneLaneConfig<S>, S extends TimelineLaneStyle> extends BaseComponent<C, S, Konva.Group> implements TimelaneLane<C, S> {\n protected readonly stylesProvider: StylesProvider = StylesProvider.instance();\n\n protected id: string;\n protected description: string;\n\n protected timelinePosition: Position;\n\n // region konva\n protected bodyGroup: Konva.Group;\n protected bodyBackground: Konva.Rect;\n protected leftGroup: Konva.Group;\n protected leftBackground: Konva.Rect;\n protected leftPanelText: Konva.Text;\n // endregion\n\n protected timeline: Timeline;\n protected videoController: VideoController;\n\n protected constructor(config: C) {\n super(config);\n\n this.id = Validators.id()(this.config.id);\n this.description = Validators.description()(this.config.description);\n }\n\n protected createCanvasNode(): Konva.Group {\n this.bodyGroup = new Konva.Group({\n ...this.timelinePosition,\n width: this.timeline.getBodyGroupRect().width,\n height: this.styleAdapter.style.height\n });\n\n this.bodyBackground = new Konva.Rect({\n ...Constants.POSITION_TOP_LEFT,\n ...this.bodyGroup.getSize(),\n fill: this.styleAdapter.style.backgroundFill,\n opacity: this.styleAdapter.style.backgroundOpacity,\n listening: false\n });\n\n this.leftGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT,\n width: this.timeline.getLeftPanelRect().width,\n listening: false\n })\n\n this.leftBackground = new Konva.Rect({\n ...Constants.POSITION_TOP_LEFT,\n ...this.leftGroup.getSize(),\n fill: this.styleAdapter.style.leftBackgroundFill,\n opacity: this.styleAdapter.style.leftBackgroundOpacity,\n listening: false\n });\n\n this.leftPanelText = new Konva.Text({\n ...Constants.POSITION_TOP_LEFT,\n text: this.description,\n fontSize: this.style.descriptionFontSize,\n fontFamily: this.stylesProvider.styles.omakasePlayerStyle.fontFamily,\n fill: this.style.descriptionTextFill,\n width: this.leftGroup.width() - 10,\n height: this.getRect().height,\n verticalAlign: 'middle',\n align: 'right'\n })\n\n this.leftGroup.add(this.leftBackground);\n this.leftGroup.add(this.leftPanelText);\n\n this.bodyGroup.add(this.bodyBackground);\n this.bodyGroup.add(this.leftGroup);\n\n return this.bodyGroup;\n }\n\n protected afterCanvasNodeInit() {\n this.settleLayout();\n\n // react on timeline zoom\n this.timeline.onZoom$.pipe(takeUntil(this.onDestroy$)).subscribe(event => {\n this.settleLayout();\n })\n\n this.stylesProvider.onChange$.pipe(takeUntil(this.onDestroy$), filter(p => !!p)).subscribe((styles) => {\n this.onStylesProviderChange();\n })\n\n this.styleAdapter.onChange$.pipe(takeUntil(this.onDestroy$), filter(p => !!p)).subscribe((styles) => {\n this.onStyleChange();\n })\n }\n\n onMeasurementsChange() {\n // console.debug(`TimelineLane[${this.getId()}].onMeasurementsChange`)\n this.settleLayout();\n }\n\n /***\n * Global styles\n */\n onStylesProviderChange() {\n this.leftPanelText.setAttrs({\n fontFamily: this.stylesProvider.styles.omakasePlayerStyle.fontFamily\n })\n }\n\n onStyleChange() {\n this.bodyBackground.setAttrs({\n fill: this.styleAdapter.style.backgroundFill,\n opacity: this.styleAdapter.style.backgroundOpacity,\n })\n\n this.leftBackground.setAttrs({\n fill: this.styleAdapter.style.leftBackgroundFill,\n opacity: this.styleAdapter.style.leftBackgroundOpacity,\n })\n\n this.leftPanelText.setAttrs({\n fill: this.styleAdapter.style.leftBackgroundFill,\n opacity: this.styleAdapter.style.leftBackgroundOpacity,\n })\n }\n\n protected settleLayout() {\n // console.debug(`TimelineLane[${this.getId()}].settleLayout`)\n\n this.bodyGroup.setAttrs({\n ...this.timelinePosition,\n width: this.timeline.getBodyGroupRect().width,\n });\n\n this.bodyBackground.setAttrs({\n ...this.bodyGroup.getSize()\n })\n\n this.leftGroup.setAttrs({\n width: this.timeline.getLeftPanelRect().width,\n height: this.bodyGroup.height(),\n visible: this.timeline.getLeftPanelVisible()\n })\n\n this.leftBackground.setAttrs({\n ...this.leftGroup.getSize()\n })\n }\n\n protected isTimelineReady(): boolean {\n return this.timeline && this.timeline.isTimelineReady();\n }\n\n clearContent() {\n }\n\n setTimeline(timeline: Timeline) {\n this.timeline = timeline;\n }\n\n setVideoController(videoController: VideoController) {\n this.videoController = videoController;\n }\n\n get style(): S {\n return super.style;\n }\n\n set style(value: Partial<S>) {\n super.style = value;\n }\n\n getRect(): RectMeasurement {\n return {\n ...this.getPosition(),\n ...this.getDimension()\n }\n }\n\n getPosition(): Position {\n return {\n ...this.bodyGroup.getPosition()\n }\n }\n\n getDimension(): Dimension {\n return {\n ...this.bodyGroup.getSize()\n }\n }\n\n getId(): string {\n return this.id;\n }\n\n getDescription(): string {\n return this.description;\n }\n\n setTimelinePosition(position: Position) {\n this.timelinePosition = position;\n }\n\n getTimelinePosition(): Position {\n return this.timelinePosition;\n }\n\n}\n","import {OnMeasurementsChange} from \"../../common/measurement\";\nimport {BaseComponent, Component, ComponentConfig} from \"../../common/component\";\nimport Konva from \"konva\";\nimport {HasMarkerLane, MarkerLane} from \"./marker-lane\";\nimport {MarkerChangeEvent, MarkerEvent, TimeObservation} from \"../../types\";\nimport {Constants} from \"../../constants\";\nimport {Subject, takeUntil} from \"rxjs\";\nimport {Timeline} from \"../timeline\";\nimport {Validators} from \"../../validators\";\n\nexport type MarkerRenderType = 'lane' | 'spanning'\nexport type MarkerSymbolType = 'square' | 'triangle' | 'circle';\n\nexport interface MarkerStyle {\n color: string;\n renderType: MarkerRenderType;\n symbolType: MarkerSymbolType;\n}\n\nexport const MARKER_STYLE_DEFAULT: MarkerStyle = {\n color: 'rgba(255,73,145)',\n renderType: 'lane',\n symbolType: 'square'\n}\n\nexport interface MarkerConfig<T extends TimeObservation, S extends MarkerStyle> extends ComponentConfig<S> {\n id: string;\n observation: T;\n description?: string;\n editable?: boolean;\n}\n\nexport interface Marker<T extends TimeObservation, C extends MarkerConfig<T, S>, S extends MarkerStyle, E extends MarkerChangeEvent> extends Component<C, S, Konva.Group>, HasMarkerLane, OnMeasurementsChange {\n onChange$: Subject<E>;\n onClick$: Subject<MarkerEvent>;\n onMouseEnter$: Subject<MarkerEvent>;\n onMouseLeave$: Subject<MarkerEvent>;\n\n get style(): S;\n\n setStyle(value: Partial<S>);\n\n getId(): string;\n\n getDescription(): string;\n\n getTimeObservation(): T;\n\n setTimeObservation(timeObservation: T): void;\n\n setEditable(editable: boolean);\n\n setTimeline(timeline: Timeline);\n}\n\nexport type GenericMarker = Marker<TimeObservation, MarkerConfig<TimeObservation, MarkerStyle>, MarkerStyle, MarkerChangeEvent>;\n\nexport abstract class BaseMarker<T extends TimeObservation, C extends MarkerConfig<T, S>, S extends MarkerStyle, E extends MarkerChangeEvent> extends BaseComponent<C, S, Konva.Group> implements Marker<T, C, S, E> {\n protected id: string;\n protected observation: T;\n protected description: string;\n protected editable: boolean;\n\n // region konva\n protected group: Konva.Group;\n // endregion\n\n protected markerLane: MarkerLane;\n protected timeline: Timeline;\n\n public readonly onChange$: Subject<E> = new Subject<E>();\n public readonly onClick$: Subject<MarkerEvent> = new Subject<MarkerEvent>();\n public readonly onMouseEnter$: Subject<MarkerEvent> = new Subject<MarkerEvent>();\n public readonly onMouseLeave$: Subject<MarkerEvent> = new Subject<MarkerEvent>();\n\n protected constructor(config: C) {\n super(config);\n this.id = Validators.id()(this.config.id);\n this.description = Validators.description()(this.config.description);\n this.editable = Validators.boolean()(this.config.editable);\n this.observation = this.config.observation;\n }\n\n protected createCanvasNode(): Konva.Group {\n this.group = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT,\n ...this.timeline.getTimecodedGroupDimension()\n });\n\n return this.group;\n }\n\n protected afterCanvasNodeInit() {\n this.timeline.onZoom$.pipe(takeUntil(this.onDestroy$)).subscribe((event) => {\n this.onMeasurementsChange();\n })\n\n this.group.on('click', (event) => {\n this.onClick$.next({})\n })\n\n this.group.on('mouseenter', (event) => {\n this.onMouseEnter$.next({})\n })\n\n this.group.on('mouseleave', (event) => {\n this.onMouseLeave$.next({})\n })\n }\n\n onMeasurementsChange() {\n this.group.setAttrs({\n ...this.timeline.getTimecodedGroupDimension()\n })\n }\n\n destroy() {\n super.destroy();\n\n this.onChange$.unsubscribe();\n this.onClick$.unsubscribe();\n this.onMouseEnter$.unsubscribe();\n this.onMouseLeave$.unsubscribe();\n }\n\n abstract onChange();\n\n setTimeline(timeline: Timeline) {\n this.timeline = timeline;\n }\n\n setMarkerLane(markerLane: MarkerLane) {\n this.markerLane = markerLane;\n }\n\n getId(): string {\n return this.id;\n }\n\n getDescription(): string {\n return this.description;\n }\n\n getTimeObservation(): T {\n return this.observation;\n }\n\n setTimeObservation(timeObservation: T) {\n if (this.editable) {\n this.observation = timeObservation;\n this.onChange();\n }\n }\n\n setEditable(editable: boolean) {\n this.editable = editable;\n }\n\n get style(): S {\n return this.styleAdapter.style;\n }\n\n setStyle(value: Partial<S>) {\n this.styleAdapter.style = value;\n }\n}\n","export class WindowUtil {\n\n static resetCursorStyle() {\n this.cursor(\"default\");\n }\n\n static cursor(cursor: 'default' | 'pointer' | 'grab' | 'grabbing' | 'ew-resize') {\n document.body.style.cursor = cursor;\n }\n\n}","import {BaseComponent, Component, ComponentConfig} from \"../../common/component\";\nimport Konva from \"konva\";\nimport {OnMeasurementsChange, Position, VerticalMeasurement} from \"../../common/measurement\";\nimport {WindowUtil} from \"../../util/window-util\";\nimport {MarkerLane} from \"./marker-lane\";\nimport {Timeline} from \"../timeline\";\nimport {MarkerRenderType, MarkerSymbolType} from \"./marker\";\n\nexport interface MarkerHandleStyle {\n color: string,\n markerRenderType: MarkerRenderType,\n markerSymbolType: MarkerSymbolType,\n lineStrokeWidth: number;\n lineOpacity: number;\n}\n\nexport const MARKER_HANDLE_STYLE_DEFAULT: MarkerHandleStyle = {\n color: '#ff6c6c',\n markerRenderType: 'lane',\n markerSymbolType: 'square',\n lineStrokeWidth: 1,\n lineOpacity: 0.7\n}\n\nexport interface MarkerHandleConfig<S extends MarkerHandleStyle> extends ComponentConfig<S> {\n x: number;\n editable: boolean;\n}\n\nexport interface MarkerHandle<C extends MarkerHandleConfig<S>, S extends MarkerHandleStyle> extends Component<C, S, Konva.Group>, OnMeasurementsChange {\n getPosition(): Position;\n\n setPosition(position: Position);\n\n getHandleGroup(): Konva.Group;\n\n getSymbol(): Konva.Shape;\n\n getVerticalMeasurement(): VerticalMeasurement;\n\n setColor(color: string);\n\n onDrag: (markerHandleGroup: Konva.Group) => void;\n\n onDragEnd: (markerHandleGroup: Konva.Group) => void;\n}\n\nexport abstract class BaseMarkerHandle<C extends MarkerHandleConfig<S>, S extends MarkerHandleStyle> extends BaseComponent<C, S, Konva.Group> implements MarkerHandle<C, S> {\n protected x: number;\n protected editable: boolean;\n\n // region konva\n protected group: Konva.Group;\n protected symbol: Konva.Shape;\n protected line: Konva.Line;\n protected handleGroup: Konva.Group;\n // endregion\n\n protected markerLane: MarkerLane;\n protected timeline: Timeline\n\n onDrag: (markerHandleGroup: Konva.Group) => void = (markerHandleGroup) => {\n };\n onDragEnd: (markerHandleGroup: Konva.Group) => void = (markerHandleGroup) => {\n };\n\n protected constructor(config: C, markerLane: MarkerLane, timeline: Timeline) {\n super(config);\n this.markerLane = markerLane;\n this.timeline = timeline;\n\n this.x = this.config.x;\n this.editable = this.config.editable;\n }\n\n protected createCanvasNode(): Konva.Group {\n let verticalMeasurement = this.getVerticalMeasurement();\n\n this.group = new Konva.Group({\n x: this.x,\n y: verticalMeasurement.y,\n draggable: this.editable\n });\n\n this.line = new Konva.Line({\n stroke: this.style.color,\n strokeWidth: this.style.lineStrokeWidth,\n opacity: this.style.lineOpacity,\n points: [\n 0, 0,\n 0, verticalMeasurement.height\n ],\n listening: false\n })\n\n this.handleGroup = new Konva.Group({\n x: 0,\n y: this.markerLane.getPosition().y - verticalMeasurement.y + this.markerLane.getDimension().height / 2\n });\n\n this.symbol = this.createSymbol();\n this.handleGroup.add(this.symbol);\n\n this.handleGroup.on('mouseover', (event) => {\n if (this.editable) {\n this.handleGroup.to({\n scaleX: 1.5,\n scaleY: 1.5,\n duration: 0.1,\n })\n WindowUtil.cursor(\"grab\")\n }\n })\n\n this.handleGroup.on('mouseleave', () => {\n if (this.editable) {\n this.handleGroup.to({\n scaleX: 1,\n scaleY: 1,\n duration: 0.1\n })\n WindowUtil.cursor(\"default\")\n }\n })\n\n this.group.add(this.line)\n this.group.add(this.handleGroup)\n\n return this.group;\n }\n\n protected abstract createSymbol(): Konva.Shape;\n\n protected afterCanvasNodeInit() {\n let verticalMeasurement = this.getVerticalMeasurement();\n\n this.group.on('dragstart dragmove', (event) => {\n WindowUtil.cursor(\"grabbing\")\n let newX = this.timeline.constrainTimelinePosition(this.group.getPosition().x);\n this.group.setAttrs({\n x: newX,\n y: verticalMeasurement.y // restrict vertical movement\n })\n this.onDrag(this.group);\n })\n\n this.group.on('dragend', (event) => {\n let newX = this.timeline.constrainTimelinePosition(this.group.getPosition().x);\n this.group.setAttrs({\n x: newX,\n y: verticalMeasurement.y // restrict vertical movement\n })\n this.onDragEnd(this.group);\n WindowUtil.cursor(\"default\")\n })\n }\n\n onMeasurementsChange() {\n let verticalMeasurement = this.getVerticalMeasurement();\n\n this.group.setAttrs({\n y: verticalMeasurement.y,\n })\n\n this.line.setAttrs({\n points: [\n 0, 0,\n 0, verticalMeasurement.height\n ],\n })\n\n this.handleGroup.setAttrs({\n y: this.markerLane.getPosition().y - verticalMeasurement.y + this.markerLane.getDimension().height / 2\n })\n }\n\n getVerticalMeasurement(): VerticalMeasurement {\n switch (this.style.markerRenderType) {\n case 'spanning':\n return {\n y: 0,\n height: this.timeline.getTimecodedGroupDimension().height\n }\n default:\n return {\n y: this.markerLane.getTimelinePosition().y,\n height: this.markerLane.getDimension().height\n }\n }\n }\n\n getHandleGroup(): Konva.Group {\n return this.handleGroup;\n }\n\n getSymbol(): Konva.Shape {\n return this.symbol;\n }\n\n /**\n * Caution: returns group that is draggable\n */\n getPosition(): Position {\n return this.group.getPosition();\n }\n\n setPosition(position: Position) {\n this.group.setAttrs({\n ...position\n });\n this.onMeasurementsChange();\n }\n\n setColor(color: string) {\n this.style.color = color;\n this.line.setAttrs({\n stroke: this.style.color\n })\n this.symbol.setAttrs({\n fill: this.style.color\n })\n }\n\n setEditable(editable: boolean) {\n this.editable = editable;\n this.group.draggable(this.editable);\n }\n\n}\n","/*!\r\n * decimal.js v10.4.3\r\n * An arbitrary-precision Decimal type for JavaScript.\r\n * https://github.com/MikeMcl/decimal.js\r\n * Copyright (c) 2022 Michael Mclaughlin <M8ch88l@gmail.com>\r\n * MIT Licence\r\n */\r\n\r\n\r\n// ----------------------------------- EDITABLE DEFAULTS ------------------------------------ //\r\n\r\n\r\n // The maximum exponent magnitude.\r\n // The limit on the value of `toExpNeg`, `toExpPos`, `minE` and `maxE`.\r\nvar EXP_LIMIT = 9e15, // 0 to 9e15\r\n\r\n // The limit on the value of `precision`, and on the value of the first argument to\r\n // `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n MAX_DIGITS = 1e9, // 0 to 1e9\r\n\r\n // Base conversion alphabet.\r\n NUMERALS = '0123456789abcdef',\r\n\r\n // The natural logarithm of 10 (1025 digits).\r\n LN10 = '2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058',\r\n\r\n // Pi (1025 digits).\r\n PI = '3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789',\r\n\r\n\r\n // The initial configuration properties of the Decimal constructor.\r\n DEFAULTS = {\r\n\r\n // These values must be integers within the stated ranges (inclusive).\r\n // Most of these values can be changed at run-time using the `Decimal.config` method.\r\n\r\n // The maximum number of significant digits of the result of a calculation or base conversion.\r\n // E.g. `Decimal.config({ precision: 20 });`\r\n precision: 20, // 1 to MAX_DIGITS\r\n\r\n // The rounding mode used when rounding to `precision`.\r\n //\r\n // ROUND_UP 0 Away from zero.\r\n // ROUND_DOWN 1 Towards zero.\r\n // ROUND_CEIL 2 Towards +Infinity.\r\n // ROUND_FLOOR 3 Towards -Infinity.\r\n // ROUND_HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // ROUND_HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // ROUND_HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // ROUND_HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n //\r\n // E.g.\r\n // `Decimal.rounding = 4;`\r\n // `Decimal.rounding = Decimal.ROUND_HALF_UP;`\r\n rounding: 4, // 0 to 8\r\n\r\n // The modulo mode used when calculating the modulus: a mod n.\r\n // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n // The remainder (r) is calculated as: r = a - n * q.\r\n //\r\n // UP 0 The remainder is positive if the dividend is negative, else is negative.\r\n // DOWN 1 The remainder has the same sign as the dividend (JavaScript %).\r\n // FLOOR 3 The remainder has the same sign as the divisor (Python %).\r\n // HALF_EVEN 6 The IEEE 754 remainder function.\r\n // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). Always positive.\r\n //\r\n // Truncated division (1), floored division (3), the IEEE 754 remainder (6), and Euclidian\r\n // division (9) are commonly used for the modulus operation. The other rounding modes can also\r\n // be used, but they may not give useful results.\r\n modulo: 1, // 0 to 9\r\n\r\n // The exponent value at and beneath which `toString` returns exponential notation.\r\n // JavaScript numbers: -7\r\n toExpNeg: -7, // 0 to -EXP_LIMIT\r\n\r\n // The exponent value at and above which `toString` returns exponential notation.\r\n // JavaScript numbers: 21\r\n toExpPos: 21, // 0 to EXP_LIMIT\r\n\r\n // The minimum exponent value, beneath which underflow to zero occurs.\r\n // JavaScript numbers: -324 (5e-324)\r\n minE: -EXP_LIMIT, // -1 to -EXP_LIMIT\r\n\r\n // The maximum exponent value, above which overflow to Infinity occurs.\r\n // JavaScript numbers: 308 (1.7976931348623157e+308)\r\n maxE: EXP_LIMIT, // 1 to EXP_LIMIT\r\n\r\n // Whether to use cryptographically-secure random number generation, if available.\r\n crypto: false // true/false\r\n },\r\n\r\n\r\n// ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //\r\n\r\n\r\n inexact, quadrant,\r\n external = true,\r\n\r\n decimalError = '[DecimalError] ',\r\n invalidArgument = decimalError + 'Invalid argument: ',\r\n precisionLimitExceeded = decimalError + 'Precision limit exceeded',\r\n cryptoUnavailable = decimalError + 'crypto unavailable',\r\n tag = '[object Decimal]',\r\n\r\n mathfloor = Math.floor,\r\n mathpow = Math.pow,\r\n\r\n isBinary = /^0b([01]+(\\.[01]*)?|\\.[01]+)(p[+-]?\\d+)?$/i,\r\n isHex = /^0x([0-9a-f]+(\\.[0-9a-f]*)?|\\.[0-9a-f]+)(p[+-]?\\d+)?$/i,\r\n isOctal = /^0o([0-7]+(\\.[0-7]*)?|\\.[0-7]+)(p[+-]?\\d+)?$/i,\r\n isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\r\n\r\n BASE = 1e7,\r\n LOG_BASE = 7,\r\n MAX_SAFE_INTEGER = 9007199254740991,\r\n\r\n LN10_PRECISION = LN10.length - 1,\r\n PI_PRECISION = PI.length - 1,\r\n\r\n // Decimal.prototype object\r\n P = { toStringTag: tag };\r\n\r\n\r\n// Decimal prototype methods\r\n\r\n\r\n/*\r\n * absoluteValue abs\r\n * ceil\r\n * clampedTo clamp\r\n * comparedTo cmp\r\n * cosine cos\r\n * cubeRoot cbrt\r\n * decimalPlaces dp\r\n * dividedBy div\r\n * dividedToIntegerBy divToInt\r\n * equals eq\r\n * floor\r\n * greaterThan gt\r\n * greaterThanOrEqualTo gte\r\n * hyperbolicCosine cosh\r\n * hyperbolicSine sinh\r\n * hyperbolicTangent tanh\r\n * inverseCosine acos\r\n * inverseHyperbolicCosine acosh\r\n * inverseHyperbolicSine asinh\r\n * inverseHyperbolicTangent atanh\r\n * inverseSine asin\r\n * inverseTangent atan\r\n * isFinite\r\n * isInteger isInt\r\n * isNaN\r\n * isNegative isNeg\r\n * isPositive isPos\r\n * isZero\r\n * lessThan lt\r\n * lessThanOrEqualTo lte\r\n * logarithm log\r\n * [maximum] [max]\r\n * [minimum] [min]\r\n * minus sub\r\n * modulo mod\r\n * naturalExponential exp\r\n * naturalLogarithm ln\r\n * negated neg\r\n * plus add\r\n * precision sd\r\n * round\r\n * sine sin\r\n * squareRoot sqrt\r\n * tangent tan\r\n * times mul\r\n * toBinary\r\n * toDecimalPlaces toDP\r\n * toExponential\r\n * toFixed\r\n * toFraction\r\n * toHexadecimal toHex\r\n * toNearest\r\n * toNumber\r\n * toOctal\r\n * toPower pow\r\n * toPrecision\r\n * toSignificantDigits toSD\r\n * toString\r\n * truncated trunc\r\n * valueOf toJSON\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the absolute value of this Decimal.\r\n *\r\n */\r\nP.absoluteValue = P.abs = function () {\r\n var x = new this.constructor(this);\r\n if (x.s < 0) x.s = 1;\r\n return finalise(x);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of positive Infinity.\r\n *\r\n */\r\nP.ceil = function () {\r\n return finalise(new this.constructor(this), this.e + 1, 2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal clamped to the range\r\n * delineated by `min` and `max`.\r\n *\r\n * min {number|string|Decimal}\r\n * max {number|string|Decimal}\r\n *\r\n */\r\nP.clampedTo = P.clamp = function (min, max) {\r\n var k,\r\n x = this,\r\n Ctor = x.constructor;\r\n min = new Ctor(min);\r\n max = new Ctor(max);\r\n if (!min.s || !max.s) return new Ctor(NaN);\r\n if (min.gt(max)) throw Error(invalidArgument + max);\r\n k = x.cmp(min);\r\n return k < 0 ? min : x.cmp(max) > 0 ? max : new Ctor(x);\r\n};\r\n\r\n\r\n/*\r\n * Return\r\n * 1 if the value of this Decimal is greater than the value of `y`,\r\n * -1 if the value of this Decimal is less than the value of `y`,\r\n * 0 if they have the same value,\r\n * NaN if the value of either Decimal is NaN.\r\n *\r\n */\r\nP.comparedTo = P.cmp = function (y) {\r\n var i, j, xdL, ydL,\r\n x = this,\r\n xd = x.d,\r\n yd = (y = new x.constructor(y)).d,\r\n xs = x.s,\r\n ys = y.s;\r\n\r\n // Either NaN or ±Infinity?\r\n if (!xd || !yd) {\r\n return !xs || !ys ? NaN : xs !== ys ? xs : xd === yd ? 0 : !xd ^ xs < 0 ? 1 : -1;\r\n }\r\n\r\n // Either zero?\r\n if (!xd[0] || !yd[0]) return xd[0] ? xs : yd[0] ? -ys : 0;\r\n\r\n // Signs differ?\r\n if (xs !== ys) return xs;\r\n\r\n // Compare exponents.\r\n if (x.e !== y.e) return x.e > y.e ^ xs < 0 ? 1 : -1;\r\n\r\n xdL = xd.length;\r\n ydL = yd.length;\r\n\r\n // Compare digit by digit.\r\n for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\r\n if (xd[i] !== yd[i]) return xd[i] > yd[i] ^ xs < 0 ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return xdL === ydL ? 0 : xdL > ydL ^ xs < 0 ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cosine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * cos(0) = 1\r\n * cos(-0) = 1\r\n * cos(Infinity) = NaN\r\n * cos(-Infinity) = NaN\r\n * cos(NaN) = NaN\r\n *\r\n */\r\nP.cosine = P.cos = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.d) return new Ctor(NaN);\r\n\r\n // cos(0) = cos(-0) = 1\r\n if (!x.d[0]) return new Ctor(1);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n Ctor.rounding = 1;\r\n\r\n x = cosine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(quadrant == 2 || quadrant == 3 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n *\r\n * Return a new Decimal whose value is the cube root of the value of this Decimal, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * cbrt(0) = 0\r\n * cbrt(-0) = -0\r\n * cbrt(1) = 1\r\n * cbrt(-1) = -1\r\n * cbrt(N) = N\r\n * cbrt(-I) = -I\r\n * cbrt(I) = I\r\n *\r\n * Math.cbrt(x) = (x < 0 ? -Math.pow(-x, 1/3) : Math.pow(x, 1/3))\r\n *\r\n */\r\nP.cubeRoot = P.cbrt = function () {\r\n var e, m, n, r, rep, s, sd, t, t3, t3plusx,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n external = false;\r\n\r\n // Initial estimate.\r\n s = x.s * mathpow(x.s * x, 1 / 3);\r\n\r\n // Math.cbrt underflow/overflow?\r\n // Pass x to Math.pow as integer, then adjust the exponent of the result.\r\n if (!s || Math.abs(s) == 1 / 0) {\r\n n = digitsToString(x.d);\r\n e = x.e;\r\n\r\n // Adjust n exponent so it is a multiple of 3 away from x exponent.\r\n if (s = (e - n.length + 1) % 3) n += (s == 1 || s == -2 ? '0' : '00');\r\n s = mathpow(n, 1 / 3);\r\n\r\n // Rarely, e may be one less than the result exponent value.\r\n e = mathfloor((e + 1) / 3) - (e % 3 == (e < 0 ? -1 : 2));\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new Ctor(n);\r\n r.s = x.s;\r\n } else {\r\n r = new Ctor(s.toString());\r\n }\r\n\r\n sd = (e = Ctor.precision) + 3;\r\n\r\n // Halley's method.\r\n // TODO? Compare Newton's method.\r\n for (;;) {\r\n t = r;\r\n t3 = t.times(t).times(t);\r\n t3plusx = t3.plus(x);\r\n r = divide(t3plusx.plus(x).times(t), t3plusx.plus(t3), sd + 2, 1);\r\n\r\n // TODO? Replace with for-loop and checkRoundingDigits.\r\n if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n n = n.slice(sd - 3, sd + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or 4999\r\n // , i.e. approaching a rounding boundary, continue the iteration.\r\n if (n == '9999' || !rep && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the exact result as the\r\n // nines may infinitely repeat.\r\n if (!rep) {\r\n finalise(t, e + 1, 0);\r\n\r\n if (t.times(t).times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n sd += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n // If not, then there are further digits and m will be truthy.\r\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n // Truncate to the first rounding digit.\r\n finalise(r, e + 1, 1);\r\n m = !r.times(r).times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return finalise(r, e, Ctor.rounding, m);\r\n};\r\n\r\n\r\n/*\r\n * Return the number of decimal places of the value of this Decimal.\r\n *\r\n */\r\nP.decimalPlaces = P.dp = function () {\r\n var w,\r\n d = this.d,\r\n n = NaN;\r\n\r\n if (d) {\r\n w = d.length - 1;\r\n n = (w - mathfloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n w = d[w];\r\n if (w) for (; w % 10 == 0; w /= 10) n--;\r\n if (n < 0) n = 0;\r\n }\r\n\r\n return n;\r\n};\r\n\r\n\r\n/*\r\n * n / 0 = I\r\n * n / N = N\r\n * n / I = 0\r\n * 0 / n = 0\r\n * 0 / 0 = N\r\n * 0 / N = N\r\n * 0 / I = 0\r\n * N / n = N\r\n * N / 0 = N\r\n * N / N = N\r\n * N / I = N\r\n * I / n = I\r\n * I / 0 = I\r\n * I / N = N\r\n * I / I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal divided by `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.dividedBy = P.div = function (y) {\r\n return divide(this, new this.constructor(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n * by the value of `y`, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.dividedToIntegerBy = P.divToInt = function (y) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n return finalise(divide(x, new Ctor(y), 0, 1, 1), Ctor.precision, Ctor.rounding);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.\r\n *\r\n */\r\nP.equals = P.eq = function (y) {\r\n return this.cmp(y) === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of negative Infinity.\r\n *\r\n */\r\nP.floor = function () {\r\n return finalise(new this.constructor(this), this.e + 1, 3);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is greater than the value of `y`, otherwise return\r\n * false.\r\n *\r\n */\r\nP.greaterThan = P.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is greater than or equal to the value of `y`,\r\n * otherwise return false.\r\n *\r\n */\r\nP.greaterThanOrEqualTo = P.gte = function (y) {\r\n var k = this.cmp(y);\r\n return k == 1 || k === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic cosine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [1, Infinity]\r\n *\r\n * cosh(x) = 1 + x^2/2! + x^4/4! + x^6/6! + ...\r\n *\r\n * cosh(0) = 1\r\n * cosh(-0) = 1\r\n * cosh(Infinity) = Infinity\r\n * cosh(-Infinity) = Infinity\r\n * cosh(NaN) = NaN\r\n *\r\n * x time taken (ms) result\r\n * 1000 9 9.8503555700852349694e+433\r\n * 10000 25 4.4034091128314607936e+4342\r\n * 100000 171 1.4033316802130615897e+43429\r\n * 1000000 3817 1.5166076984010437725e+434294\r\n * 10000000 abandoned after 2 minute wait\r\n *\r\n * TODO? Compare performance of cosh(x) = 0.5 * (exp(x) + exp(-x))\r\n *\r\n */\r\nP.hyperbolicCosine = P.cosh = function () {\r\n var k, n, pr, rm, len,\r\n x = this,\r\n Ctor = x.constructor,\r\n one = new Ctor(1);\r\n\r\n if (!x.isFinite()) return new Ctor(x.s ? 1 / 0 : NaN);\r\n if (x.isZero()) return one;\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n Ctor.rounding = 1;\r\n len = x.d.length;\r\n\r\n // Argument reduction: cos(4x) = 1 - 8cos^2(x) + 8cos^4(x) + 1\r\n // i.e. cos(x) = 1 - cos^2(x/4)(8 - 8cos^2(x/4))\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n // TODO? Estimation reused from cosine() and may not be optimal here.\r\n if (len < 32) {\r\n k = Math.ceil(len / 3);\r\n n = (1 / tinyPow(4, k)).toString();\r\n } else {\r\n k = 16;\r\n n = '2.3283064365386962890625e-10';\r\n }\r\n\r\n x = taylorSeries(Ctor, 1, x.times(n), new Ctor(1), true);\r\n\r\n // Reverse argument reduction\r\n var cosh2_x,\r\n i = k,\r\n d8 = new Ctor(8);\r\n for (; i--;) {\r\n cosh2_x = x.times(x);\r\n x = one.minus(cosh2_x.times(d8.minus(cosh2_x.times(d8))));\r\n }\r\n\r\n return finalise(x, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic sine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * sinh(x) = x + x^3/3! + x^5/5! + x^7/7! + ...\r\n *\r\n * sinh(0) = 0\r\n * sinh(-0) = -0\r\n * sinh(Infinity) = Infinity\r\n * sinh(-Infinity) = -Infinity\r\n * sinh(NaN) = NaN\r\n *\r\n * x time taken (ms)\r\n * 10 2 ms\r\n * 100 5 ms\r\n * 1000 14 ms\r\n * 10000 82 ms\r\n * 100000 886 ms 1.4033316802130615897e+43429\r\n * 200000 2613 ms\r\n * 300000 5407 ms\r\n * 400000 8824 ms\r\n * 500000 13026 ms 8.7080643612718084129e+217146\r\n * 1000000 48543 ms\r\n *\r\n * TODO? Compare performance of sinh(x) = 0.5 * (exp(x) - exp(-x))\r\n *\r\n */\r\nP.hyperbolicSine = P.sinh = function () {\r\n var k, pr, rm, len,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n Ctor.rounding = 1;\r\n len = x.d.length;\r\n\r\n if (len < 3) {\r\n x = taylorSeries(Ctor, 2, x, x, true);\r\n } else {\r\n\r\n // Alternative argument reduction: sinh(3x) = sinh(x)(3 + 4sinh^2(x))\r\n // i.e. sinh(x) = sinh(x/3)(3 + 4sinh^2(x/3))\r\n // 3 multiplications and 1 addition\r\n\r\n // Argument reduction: sinh(5x) = sinh(x)(5 + sinh^2(x)(20 + 16sinh^2(x)))\r\n // i.e. sinh(x) = sinh(x/5)(5 + sinh^2(x/5)(20 + 16sinh^2(x/5)))\r\n // 4 multiplications and 2 additions\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n k = 1.4 * Math.sqrt(len);\r\n k = k > 16 ? 16 : k | 0;\r\n\r\n x = x.times(1 / tinyPow(5, k));\r\n x = taylorSeries(Ctor, 2, x, x, true);\r\n\r\n // Reverse argument reduction\r\n var sinh2_x,\r\n d5 = new Ctor(5),\r\n d16 = new Ctor(16),\r\n d20 = new Ctor(20);\r\n for (; k--;) {\r\n sinh2_x = x.times(x);\r\n x = x.times(d5.plus(sinh2_x.times(d16.times(sinh2_x).plus(d20))));\r\n }\r\n }\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic tangent of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * tanh(x) = sinh(x) / cosh(x)\r\n *\r\n * tanh(0) = 0\r\n * tanh(-0) = -0\r\n * tanh(Infinity) = 1\r\n * tanh(-Infinity) = -1\r\n * tanh(NaN) = NaN\r\n *\r\n */\r\nP.hyperbolicTangent = P.tanh = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(x.s);\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + 7;\r\n Ctor.rounding = 1;\r\n\r\n return divide(x.sinh(), x.cosh(), Ctor.precision = pr, Ctor.rounding = rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arccosine (inverse cosine) in radians of the value of\r\n * this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [0, pi]\r\n *\r\n * acos(x) = pi/2 - asin(x)\r\n *\r\n * acos(0) = pi/2\r\n * acos(-0) = pi/2\r\n * acos(1) = 0\r\n * acos(-1) = pi\r\n * acos(1/2) = pi/3\r\n * acos(-1/2) = 2*pi/3\r\n * acos(|x| > 1) = NaN\r\n * acos(NaN) = NaN\r\n *\r\n */\r\nP.inverseCosine = P.acos = function () {\r\n var halfPi,\r\n x = this,\r\n Ctor = x.constructor,\r\n k = x.abs().cmp(1),\r\n pr = Ctor.precision,\r\n rm = Ctor.rounding;\r\n\r\n if (k !== -1) {\r\n return k === 0\r\n // |x| is 1\r\n ? x.isNeg() ? getPi(Ctor, pr, rm) : new Ctor(0)\r\n // |x| > 1 or x is NaN\r\n : new Ctor(NaN);\r\n }\r\n\r\n if (x.isZero()) return getPi(Ctor, pr + 4, rm).times(0.5);\r\n\r\n // TODO? Special case acos(0.5) = pi/3 and acos(-0.5) = 2*pi/3\r\n\r\n Ctor.precision = pr + 6;\r\n Ctor.rounding = 1;\r\n\r\n x = x.asin();\r\n halfPi = getPi(Ctor, pr + 4, rm).times(0.5);\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return halfPi.minus(x);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [1, Infinity]\r\n * Range: [0, Infinity]\r\n *\r\n * acosh(x) = ln(x + sqrt(x^2 - 1))\r\n *\r\n * acosh(x < 1) = NaN\r\n * acosh(NaN) = NaN\r\n * acosh(Infinity) = Infinity\r\n * acosh(-Infinity) = NaN\r\n * acosh(0) = NaN\r\n * acosh(-0) = NaN\r\n * acosh(1) = 0\r\n * acosh(-1) = NaN\r\n *\r\n */\r\nP.inverseHyperbolicCosine = P.acosh = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (x.lte(1)) return new Ctor(x.eq(1) ? 0 : NaN);\r\n if (!x.isFinite()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(Math.abs(x.e), x.sd()) + 4;\r\n Ctor.rounding = 1;\r\n external = false;\r\n\r\n x = x.times(x).minus(1).sqrt().plus(x);\r\n\r\n external = true;\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.ln();\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * asinh(x) = ln(x + sqrt(x^2 + 1))\r\n *\r\n * asinh(NaN) = NaN\r\n * asinh(Infinity) = Infinity\r\n * asinh(-Infinity) = -Infinity\r\n * asinh(0) = 0\r\n * asinh(-0) = -0\r\n *\r\n */\r\nP.inverseHyperbolicSine = P.asinh = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + 2 * Math.max(Math.abs(x.e), x.sd()) + 6;\r\n Ctor.rounding = 1;\r\n external = false;\r\n\r\n x = x.times(x).plus(1).sqrt().plus(x);\r\n\r\n external = true;\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.ln();\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * atanh(x) = 0.5 * ln((1 + x) / (1 - x))\r\n *\r\n * atanh(|x| > 1) = NaN\r\n * atanh(NaN) = NaN\r\n * atanh(Infinity) = NaN\r\n * atanh(-Infinity) = NaN\r\n * atanh(0) = 0\r\n * atanh(-0) = -0\r\n * atanh(1) = Infinity\r\n * atanh(-1) = -Infinity\r\n *\r\n */\r\nP.inverseHyperbolicTangent = P.atanh = function () {\r\n var pr, rm, wpr, xsd,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(NaN);\r\n if (x.e >= 0) return new Ctor(x.abs().eq(1) ? x.s / 0 : x.isZero() ? x : NaN);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n xsd = x.sd();\r\n\r\n if (Math.max(xsd, pr) < 2 * -x.e - 1) return finalise(new Ctor(x), pr, rm, true);\r\n\r\n Ctor.precision = wpr = xsd - x.e;\r\n\r\n x = divide(x.plus(1), new Ctor(1).minus(x), wpr + pr, 1);\r\n\r\n Ctor.precision = pr + 4;\r\n Ctor.rounding = 1;\r\n\r\n x = x.ln();\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.times(0.5);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arcsine (inverse sine) in radians of the value of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * asin(x) = 2*atan(x/(1 + sqrt(1 - x^2)))\r\n *\r\n * asin(0) = 0\r\n * asin(-0) = -0\r\n * asin(1/2) = pi/6\r\n * asin(-1/2) = -pi/6\r\n * asin(1) = pi/2\r\n * asin(-1) = -pi/2\r\n * asin(|x| > 1) = NaN\r\n * asin(NaN) = NaN\r\n *\r\n * TODO? Compare performance of Taylor series.\r\n *\r\n */\r\nP.inverseSine = P.asin = function () {\r\n var halfPi, k,\r\n pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n k = x.abs().cmp(1);\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n if (k !== -1) {\r\n\r\n // |x| is 1\r\n if (k === 0) {\r\n halfPi = getPi(Ctor, pr + 4, rm).times(0.5);\r\n halfPi.s = x.s;\r\n return halfPi;\r\n }\r\n\r\n // |x| > 1 or x is NaN\r\n return new Ctor(NaN);\r\n }\r\n\r\n // TODO? Special case asin(1/2) = pi/6 and asin(-1/2) = -pi/6\r\n\r\n Ctor.precision = pr + 6;\r\n Ctor.rounding = 1;\r\n\r\n x = x.div(new Ctor(1).minus(x.times(x)).sqrt().plus(1)).atan();\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.times(2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent (inverse tangent) in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n *\r\n * atan(0) = 0\r\n * atan(-0) = -0\r\n * atan(1) = pi/4\r\n * atan(-1) = -pi/4\r\n * atan(Infinity) = pi/2\r\n * atan(-Infinity) = -pi/2\r\n * atan(NaN) = NaN\r\n *\r\n */\r\nP.inverseTangent = P.atan = function () {\r\n var i, j, k, n, px, t, r, wpr, x2,\r\n x = this,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision,\r\n rm = Ctor.rounding;\r\n\r\n if (!x.isFinite()) {\r\n if (!x.s) return new Ctor(NaN);\r\n if (pr + 4 <= PI_PRECISION) {\r\n r = getPi(Ctor, pr + 4, rm).times(0.5);\r\n r.s = x.s;\r\n return r;\r\n }\r\n } else if (x.isZero()) {\r\n return new Ctor(x);\r\n } else if (x.abs().eq(1) && pr + 4 <= PI_PRECISION) {\r\n r = getPi(Ctor, pr + 4, rm).times(0.25);\r\n r.s = x.s;\r\n return r;\r\n }\r\n\r\n Ctor.precision = wpr = pr + 10;\r\n Ctor.rounding = 1;\r\n\r\n // TODO? if (x >= 1 && pr <= PI_PRECISION) atan(x) = halfPi * x.s - atan(1 / x);\r\n\r\n // Argument reduction\r\n // Ensure |x| < 0.42\r\n // atan(x) = 2 * atan(x / (1 + sqrt(1 + x^2)))\r\n\r\n k = Math.min(28, wpr / LOG_BASE + 2 | 0);\r\n\r\n for (i = k; i; --i) x = x.div(x.times(x).plus(1).sqrt().plus(1));\r\n\r\n external = false;\r\n\r\n j = Math.ceil(wpr / LOG_BASE);\r\n n = 1;\r\n x2 = x.times(x);\r\n r = new Ctor(x);\r\n px = x;\r\n\r\n // atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n for (; i !== -1;) {\r\n px = px.times(x2);\r\n t = r.minus(px.div(n += 2));\r\n\r\n px = px.times(x2);\r\n r = t.plus(px.div(n += 2));\r\n\r\n if (r.d[j] !== void 0) for (i = j; r.d[i] === t.d[i] && i--;);\r\n }\r\n\r\n if (k) r = r.times(2 << (k - 1));\r\n\r\n external = true;\r\n\r\n return finalise(r, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is a finite number, otherwise return false.\r\n *\r\n */\r\nP.isFinite = function () {\r\n return !!this.d;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is an integer, otherwise return false.\r\n *\r\n */\r\nP.isInteger = P.isInt = function () {\r\n return !!this.d && mathfloor(this.e / LOG_BASE) > this.d.length - 2;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is NaN, otherwise return false.\r\n *\r\n */\r\nP.isNaN = function () {\r\n return !this.s;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is negative, otherwise return false.\r\n *\r\n */\r\nP.isNegative = P.isNeg = function () {\r\n return this.s < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is positive, otherwise return false.\r\n *\r\n */\r\nP.isPositive = P.isPos = function () {\r\n return this.s > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is 0 or -0, otherwise return false.\r\n *\r\n */\r\nP.isZero = function () {\r\n return !!this.d && this.d[0] === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is less than `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThan = P.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThanOrEqualTo = P.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return the logarithm of the value of this Decimal to the specified base, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * If no base is specified, return log[10](arg).\r\n *\r\n * log[base](arg) = ln(arg) / ln(base)\r\n *\r\n * The result will always be correctly rounded if the base of the log is 10, and 'almost always'\r\n * otherwise:\r\n *\r\n * Depending on the rounding mode, the result may be incorrectly rounded if the first fifteen\r\n * rounding digits are [49]99999999999999 or [50]00000000000000. In that case, the maximum error\r\n * between the result and the correctly rounded result will be one ulp (unit in the last place).\r\n *\r\n * log[-b](a) = NaN\r\n * log[0](a) = NaN\r\n * log[1](a) = NaN\r\n * log[NaN](a) = NaN\r\n * log[Infinity](a) = NaN\r\n * log[b](0) = -Infinity\r\n * log[b](-0) = -Infinity\r\n * log[b](-a) = NaN\r\n * log[b](1) = 0\r\n * log[b](Infinity) = Infinity\r\n * log[b](NaN) = NaN\r\n *\r\n * [base] {number|string|Decimal} The base of the logarithm.\r\n *\r\n */\r\nP.logarithm = P.log = function (base) {\r\n var isBase10, d, denominator, k, inf, num, sd, r,\r\n arg = this,\r\n Ctor = arg.constructor,\r\n pr = Ctor.precision,\r\n rm = Ctor.rounding,\r\n guard = 5;\r\n\r\n // Default base is 10.\r\n if (base == null) {\r\n base = new Ctor(10);\r\n isBase10 = true;\r\n } else {\r\n base = new Ctor(base);\r\n d = base.d;\r\n\r\n // Return NaN if base is negative, or non-finite, or is 0 or 1.\r\n if (base.s < 0 || !d || !d[0] || base.eq(1)) return new Ctor(NaN);\r\n\r\n isBase10 = base.eq(10);\r\n }\r\n\r\n d = arg.d;\r\n\r\n // Is arg negative, non-finite, 0 or 1?\r\n if (arg.s < 0 || !d || !d[0] || arg.eq(1)) {\r\n return new Ctor(d && !d[0] ? -1 / 0 : arg.s != 1 ? NaN : d ? 0 : 1 / 0);\r\n }\r\n\r\n // The result will have a non-terminating decimal expansion if base is 10 and arg is not an\r\n // integer power of 10.\r\n if (isBase10) {\r\n if (d.length > 1) {\r\n inf = true;\r\n } else {\r\n for (k = d[0]; k % 10 === 0;) k /= 10;\r\n inf = k !== 1;\r\n }\r\n }\r\n\r\n external = false;\r\n sd = pr + guard;\r\n num = naturalLogarithm(arg, sd);\r\n denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n\r\n // The result will have 5 rounding digits.\r\n r = divide(num, denominator, sd, 1);\r\n\r\n // If at a rounding boundary, i.e. the result's rounding digits are [49]9999 or [50]0000,\r\n // calculate 10 further digits.\r\n //\r\n // If the result is known to have an infinite decimal expansion, repeat this until it is clear\r\n // that the result is above or below the boundary. Otherwise, if after calculating the 10\r\n // further digits, the last 14 are nines, round up and assume the result is exact.\r\n // Also assume the result is exact if the last 14 are zero.\r\n //\r\n // Example of a result that will be incorrectly rounded:\r\n // log[1048576](4503599627370502) = 2.60000000000000009610279511444746...\r\n // The above result correctly rounded using ROUND_CEIL to 1 decimal place should be 2.7, but it\r\n // will be given as 2.6 as there are 15 zeros immediately after the requested decimal place, so\r\n // the exact result would be assumed to be 2.6, which rounded using ROUND_CEIL to 1 decimal\r\n // place is still 2.6.\r\n if (checkRoundingDigits(r.d, k = pr, rm)) {\r\n\r\n do {\r\n sd += 10;\r\n num = naturalLogarithm(arg, sd);\r\n denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n r = divide(num, denominator, sd, 1);\r\n\r\n if (!inf) {\r\n\r\n // Check for 14 nines from the 2nd rounding digit, as the first may be 4.\r\n if (+digitsToString(r.d).slice(k + 1, k + 15) + 1 == 1e14) {\r\n r = finalise(r, pr + 1, 0);\r\n }\r\n\r\n break;\r\n }\r\n } while (checkRoundingDigits(r.d, k += 10, rm));\r\n }\r\n\r\n external = true;\r\n\r\n return finalise(r, pr, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the maximum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|Decimal}\r\n *\r\nP.max = function () {\r\n Array.prototype.push.call(arguments, this);\r\n return maxOrMin(this.constructor, arguments, 'lt');\r\n};\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the minimum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|Decimal}\r\n *\r\nP.min = function () {\r\n Array.prototype.push.call(arguments, this);\r\n return maxOrMin(this.constructor, arguments, 'gt');\r\n};\r\n */\r\n\r\n\r\n/*\r\n * n - 0 = n\r\n * n - N = N\r\n * n - I = -I\r\n * 0 - n = -n\r\n * 0 - 0 = 0\r\n * 0 - N = N\r\n * 0 - I = -I\r\n * N - n = N\r\n * N - 0 = N\r\n * N - N = N\r\n * N - I = N\r\n * I - n = I\r\n * I - 0 = I\r\n * I - N = N\r\n * I - I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal minus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.minus = P.sub = function (y) {\r\n var d, e, i, j, k, len, pr, rm, xd, xe, xLTy, yd,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n y = new Ctor(y);\r\n\r\n // If either is not finite...\r\n if (!x.d || !y.d) {\r\n\r\n // Return NaN if either is NaN.\r\n if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n // Return y negated if x is finite and y is ±Infinity.\r\n else if (x.d) y.s = -y.s;\r\n\r\n // Return x if y is finite and x is ±Infinity.\r\n // Return x if both are ±Infinity with different signs.\r\n // Return NaN if both are ±Infinity with the same sign.\r\n else y = new Ctor(y.d || x.s !== y.s ? x : NaN);\r\n\r\n return y;\r\n }\r\n\r\n // If signs differ...\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.plus(y);\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n // If either is zero...\r\n if (!xd[0] || !yd[0]) {\r\n\r\n // Return y negated if x is zero and y is non-zero.\r\n if (yd[0]) y.s = -y.s;\r\n\r\n // Return x if y is zero and x is non-zero.\r\n else if (xd[0]) y = new Ctor(x);\r\n\r\n // Return zero if both are zero.\r\n // From IEEE 754 (2008) 6.3: 0 - 0 = -0 - -0 = -0 when rounding to -Infinity.\r\n else return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n }\r\n\r\n // x and y are finite, non-zero numbers with the same sign.\r\n\r\n // Calculate base 1e7 exponents.\r\n e = mathfloor(y.e / LOG_BASE);\r\n xe = mathfloor(x.e / LOG_BASE);\r\n\r\n xd = xd.slice();\r\n k = xe - e;\r\n\r\n // If base 1e7 exponents differ...\r\n if (k) {\r\n xLTy = k < 0;\r\n\r\n if (xLTy) {\r\n d = xd;\r\n k = -k;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = xe;\r\n len = xd.length;\r\n }\r\n\r\n // Numbers with massively different exponents would result in a very high number of\r\n // zeros needing to be prepended, but this can be avoided while still ensuring correct\r\n // rounding by limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.\r\n i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\r\n\r\n if (k > i) {\r\n k = i;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents.\r\n d.reverse();\r\n for (i = k; i--;) d.push(0);\r\n d.reverse();\r\n\r\n // Base 1e7 exponents equal.\r\n } else {\r\n\r\n // Check digits to determine which is the bigger number.\r\n\r\n i = xd.length;\r\n len = yd.length;\r\n xLTy = i < len;\r\n if (xLTy) len = i;\r\n\r\n for (i = 0; i < len; i++) {\r\n if (xd[i] != yd[i]) {\r\n xLTy = xd[i] < yd[i];\r\n break;\r\n }\r\n }\r\n\r\n k = 0;\r\n }\r\n\r\n if (xLTy) {\r\n d = xd;\r\n xd = yd;\r\n yd = d;\r\n y.s = -y.s;\r\n }\r\n\r\n len = xd.length;\r\n\r\n // Append zeros to `xd` if shorter.\r\n // Don't add zeros to `yd` if shorter as subtraction only needs to start at `yd` length.\r\n for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\r\n\r\n // Subtract yd from xd.\r\n for (i = yd.length; i > k;) {\r\n\r\n if (xd[--i] < yd[i]) {\r\n for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\r\n --xd[j];\r\n xd[i] += BASE;\r\n }\r\n\r\n xd[i] -= yd[i];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xd[--len] === 0;) xd.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xd[0] === 0; xd.shift()) --e;\r\n\r\n // Zero?\r\n if (!xd[0]) return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n y.d = xd;\r\n y.e = getBase10Exponent(xd, e);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n};\r\n\r\n\r\n/*\r\n * n % 0 = N\r\n * n % N = N\r\n * n % I = n\r\n * 0 % n = 0\r\n * -0 % n = -0\r\n * 0 % 0 = N\r\n * 0 % N = N\r\n * 0 % I = 0\r\n * N % n = N\r\n * N % 0 = N\r\n * N % N = N\r\n * N % I = N\r\n * I % n = N\r\n * I % 0 = N\r\n * I % N = N\r\n * I % I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal modulo `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * The result depends on the modulo mode.\r\n *\r\n */\r\nP.modulo = P.mod = function (y) {\r\n var q,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n y = new Ctor(y);\r\n\r\n // Return NaN if x is ±Infinity or NaN, or y is NaN or ±0.\r\n if (!x.d || !y.s || y.d && !y.d[0]) return new Ctor(NaN);\r\n\r\n // Return x if y is ±Infinity or x is ±0.\r\n if (!y.d || x.d && !x.d[0]) {\r\n return finalise(new Ctor(x), Ctor.precision, Ctor.rounding);\r\n }\r\n\r\n // Prevent rounding of intermediate calculations.\r\n external = false;\r\n\r\n if (Ctor.modulo == 9) {\r\n\r\n // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n // result = x - q * y where 0 <= result < abs(y)\r\n q = divide(x, y.abs(), 0, 3, 1);\r\n q.s *= y.s;\r\n } else {\r\n q = divide(x, y, 0, Ctor.modulo, 1);\r\n }\r\n\r\n q = q.times(y);\r\n\r\n external = true;\r\n\r\n return x.minus(q);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n * i.e. the base e raised to the power the value of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.naturalExponential = P.exp = function () {\r\n return naturalExponential(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.naturalLogarithm = P.ln = function () {\r\n return naturalLogarithm(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n * -1.\r\n *\r\n */\r\nP.negated = P.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s;\r\n return finalise(x);\r\n};\r\n\r\n\r\n/*\r\n * n + 0 = n\r\n * n + N = N\r\n * n + I = I\r\n * 0 + n = n\r\n * 0 + 0 = 0\r\n * 0 + N = N\r\n * 0 + I = I\r\n * N + n = N\r\n * N + 0 = N\r\n * N + N = N\r\n * N + I = N\r\n * I + n = I\r\n * I + 0 = I\r\n * I + N = N\r\n * I + I = I\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal plus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.plus = P.add = function (y) {\r\n var carry, d, e, i, k, len, pr, rm, xd, yd,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n y = new Ctor(y);\r\n\r\n // If either is not finite...\r\n if (!x.d || !y.d) {\r\n\r\n // Return NaN if either is NaN.\r\n if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n // Return x if y is finite and x is ±Infinity.\r\n // Return x if both are ±Infinity with the same sign.\r\n // Return NaN if both are ±Infinity with different signs.\r\n // Return y if x is finite and y is ±Infinity.\r\n else if (!x.d) y = new Ctor(y.d || x.s === y.s ? x : NaN);\r\n\r\n return y;\r\n }\r\n\r\n // If signs differ...\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.minus(y);\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n // If either is zero...\r\n if (!xd[0] || !yd[0]) {\r\n\r\n // Return x if y is zero.\r\n // Return y if y is non-zero.\r\n if (!yd[0]) y = new Ctor(x);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n }\r\n\r\n // x and y are finite, non-zero numbers with the same sign.\r\n\r\n // Calculate base 1e7 exponents.\r\n k = mathfloor(x.e / LOG_BASE);\r\n e = mathfloor(y.e / LOG_BASE);\r\n\r\n xd = xd.slice();\r\n i = k - e;\r\n\r\n // If base 1e7 exponents differ...\r\n if (i) {\r\n\r\n if (i < 0) {\r\n d = xd;\r\n i = -i;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = k;\r\n len = xd.length;\r\n }\r\n\r\n // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\r\n k = Math.ceil(pr / LOG_BASE);\r\n len = k > len ? k + 1 : len + 1;\r\n\r\n if (i > len) {\r\n i = len;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\r\n d.reverse();\r\n for (; i--;) d.push(0);\r\n d.reverse();\r\n }\r\n\r\n len = xd.length;\r\n i = yd.length;\r\n\r\n // If yd is longer than xd, swap xd and yd so xd points to the longer array.\r\n if (len - i < 0) {\r\n i = len;\r\n d = yd;\r\n yd = xd;\r\n xd = d;\r\n }\r\n\r\n // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\r\n for (carry = 0; i;) {\r\n carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\r\n xd[i] %= BASE;\r\n }\r\n\r\n if (carry) {\r\n xd.unshift(carry);\r\n ++e;\r\n }\r\n\r\n // Remove trailing zeros.\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n for (len = xd.length; xd[--len] == 0;) xd.pop();\r\n\r\n y.d = xd;\r\n y.e = getBase10Exponent(xd, e);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return the number of significant digits of the value of this Decimal.\r\n *\r\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n *\r\n */\r\nP.precision = P.sd = function (z) {\r\n var k,\r\n x = this;\r\n\r\n if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\r\n\r\n if (x.d) {\r\n k = getPrecision(x.d);\r\n if (z && x.e + 1 > k) k = x.e + 1;\r\n } else {\r\n k = NaN;\r\n }\r\n\r\n return k;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n * rounding mode `rounding`.\r\n *\r\n */\r\nP.round = function () {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n return finalise(new Ctor(x), x.e + 1, Ctor.rounding);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n *\r\n * sin(0) = 0\r\n * sin(-0) = -0\r\n * sin(Infinity) = NaN\r\n * sin(-Infinity) = NaN\r\n * sin(NaN) = NaN\r\n *\r\n */\r\nP.sine = P.sin = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(NaN);\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n Ctor.rounding = 1;\r\n\r\n x = sine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(quadrant > 2 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * sqrt(-n) = N\r\n * sqrt(N) = N\r\n * sqrt(-I) = N\r\n * sqrt(I) = I\r\n * sqrt(0) = 0\r\n * sqrt(-0) = -0\r\n *\r\n */\r\nP.squareRoot = P.sqrt = function () {\r\n var m, n, sd, r, rep, t,\r\n x = this,\r\n d = x.d,\r\n e = x.e,\r\n s = x.s,\r\n Ctor = x.constructor;\r\n\r\n // Negative/NaN/Infinity/zero?\r\n if (s !== 1 || !d || !d[0]) {\r\n return new Ctor(!s || s < 0 && (!d || d[0]) ? NaN : d ? x : 1 / 0);\r\n }\r\n\r\n external = false;\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+x);\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n if (s == 0 || s == 1 / 0) {\r\n n = digitsToString(d);\r\n\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(n);\r\n e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new Ctor(n);\r\n } else {\r\n r = new Ctor(s.toString());\r\n }\r\n\r\n sd = (e = Ctor.precision) + 3;\r\n\r\n // Newton-Raphson iteration.\r\n for (;;) {\r\n t = r;\r\n r = t.plus(divide(x, t, sd + 2, 1)).times(0.5);\r\n\r\n // TODO? Replace with for-loop and checkRoundingDigits.\r\n if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n n = n.slice(sd - 3, sd + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\r\n // 4999, i.e. approaching a rounding boundary, continue the iteration.\r\n if (n == '9999' || !rep && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the exact result as the\r\n // nines may infinitely repeat.\r\n if (!rep) {\r\n finalise(t, e + 1, 0);\r\n\r\n if (t.times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n sd += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n // If not, then there are further digits and m will be truthy.\r\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n // Truncate to the first rounding digit.\r\n finalise(r, e + 1, 1);\r\n m = !r.times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return finalise(r, e, Ctor.rounding, m);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the tangent of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * tan(0) = 0\r\n * tan(-0) = -0\r\n * tan(Infinity) = NaN\r\n * tan(-Infinity) = NaN\r\n * tan(NaN) = NaN\r\n *\r\n */\r\nP.tangent = P.tan = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(NaN);\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + 10;\r\n Ctor.rounding = 1;\r\n\r\n x = x.sin();\r\n x.s = 1;\r\n x = divide(x, new Ctor(1).minus(x.times(x)).sqrt(), pr + 10, 0);\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(quadrant == 2 || quadrant == 4 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * n * 0 = 0\r\n * n * N = N\r\n * n * I = I\r\n * 0 * n = 0\r\n * 0 * 0 = 0\r\n * 0 * N = N\r\n * 0 * I = N\r\n * N * n = N\r\n * N * 0 = N\r\n * N * N = N\r\n * N * I = N\r\n * I * n = I\r\n * I * 0 = N\r\n * I * N = N\r\n * I * I = I\r\n *\r\n * Return a new Decimal whose value is this Decimal times `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.times = P.mul = function (y) {\r\n var carry, e, i, k, r, rL, t, xdL, ydL,\r\n x = this,\r\n Ctor = x.constructor,\r\n xd = x.d,\r\n yd = (y = new Ctor(y)).d;\r\n\r\n y.s *= x.s;\r\n\r\n // If either is NaN, ±Infinity or ±0...\r\n if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n return new Ctor(!y.s || xd && !xd[0] && !yd || yd && !yd[0] && !xd\r\n\r\n // Return NaN if either is NaN.\r\n // Return NaN if x is ±0 and y is ±Infinity, or y is ±0 and x is ±Infinity.\r\n ? NaN\r\n\r\n // Return ±Infinity if either is ±Infinity.\r\n // Return ±0 if either is ±0.\r\n : !xd || !yd ? y.s / 0 : y.s * 0);\r\n }\r\n\r\n e = mathfloor(x.e / LOG_BASE) + mathfloor(y.e / LOG_BASE);\r\n xdL = xd.length;\r\n ydL = yd.length;\r\n\r\n // Ensure xd points to the longer array.\r\n if (xdL < ydL) {\r\n r = xd;\r\n xd = yd;\r\n yd = r;\r\n rL = xdL;\r\n xdL = ydL;\r\n ydL = rL;\r\n }\r\n\r\n // Initialise the result array with zeros.\r\n r = [];\r\n rL = xdL + ydL;\r\n for (i = rL; i--;) r.push(0);\r\n\r\n // Multiply!\r\n for (i = ydL; --i >= 0;) {\r\n carry = 0;\r\n for (k = xdL + i; k > i;) {\r\n t = r[k] + yd[i] * xd[k - i - 1] + carry;\r\n r[k--] = t % BASE | 0;\r\n carry = t / BASE | 0;\r\n }\r\n\r\n r[k] = (r[k] + carry) % BASE | 0;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; !r[--rL];) r.pop();\r\n\r\n if (carry) ++e;\r\n else r.shift();\r\n\r\n y.d = r;\r\n y.e = getBase10Exponent(r, e);\r\n\r\n return external ? finalise(y, Ctor.precision, Ctor.rounding) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 2, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toBinary = function (sd, rm) {\r\n return toStringBinary(this, 2, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`\r\n * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.\r\n *\r\n * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toDecimalPlaces = P.toDP = function (dp, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n x = new Ctor(x);\r\n if (dp === void 0) return x;\r\n\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n return finalise(x, dp + x.e + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in exponential notation rounded to\r\n * `dp` fixed decimal places using rounding mode `rounding`.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toExponential = function (dp, rm) {\r\n var str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) {\r\n str = finiteToString(x, true);\r\n } else {\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = finalise(new Ctor(x), dp + 1, rm);\r\n str = finiteToString(x, true, dp + 1);\r\n }\r\n\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is\r\n * omitted.\r\n *\r\n * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n * (-0).toFixed(3) is '0.000'.\r\n * (-0.5).toFixed(0) is '-0'.\r\n *\r\n */\r\nP.toFixed = function (dp, rm) {\r\n var str, y,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) {\r\n str = finiteToString(x);\r\n } else {\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n y = finalise(new Ctor(x), dp + x.e + 1, rm);\r\n str = finiteToString(y, false, dp + y.e + 1);\r\n }\r\n\r\n // To determine whether to add the minus sign look at the value before it was rounded,\r\n // i.e. look at `x` rather than `y`.\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return an array representing the value of this Decimal as a simple fraction with an integer\r\n * numerator and an integer denominator.\r\n *\r\n * The denominator will be a positive non-zero value less than or equal to the specified maximum\r\n * denominator. If a maximum denominator is not specified, the denominator will be the lowest\r\n * value necessary to represent the number exactly.\r\n *\r\n * [maxD] {number|string|Decimal} Maximum denominator. Integer >= 1 and < Infinity.\r\n *\r\n */\r\nP.toFraction = function (maxD) {\r\n var d, d0, d1, d2, e, k, n, n0, n1, pr, q, r,\r\n x = this,\r\n xd = x.d,\r\n Ctor = x.constructor;\r\n\r\n if (!xd) return new Ctor(x);\r\n\r\n n1 = d0 = new Ctor(1);\r\n d1 = n0 = new Ctor(0);\r\n\r\n d = new Ctor(d1);\r\n e = d.e = getPrecision(xd) - x.e - 1;\r\n k = e % LOG_BASE;\r\n d.d[0] = mathpow(10, k < 0 ? LOG_BASE + k : k);\r\n\r\n if (maxD == null) {\r\n\r\n // d is 10**e, the minimum max-denominator needed.\r\n maxD = e > 0 ? d : n1;\r\n } else {\r\n n = new Ctor(maxD);\r\n if (!n.isInt() || n.lt(n1)) throw Error(invalidArgument + n);\r\n maxD = n.gt(d) ? (e > 0 ? d : n1) : n;\r\n }\r\n\r\n external = false;\r\n n = new Ctor(digitsToString(xd));\r\n pr = Ctor.precision;\r\n Ctor.precision = e = xd.length * LOG_BASE * 2;\r\n\r\n for (;;) {\r\n q = divide(n, d, 0, 1, 1);\r\n d2 = d0.plus(q.times(d1));\r\n if (d2.cmp(maxD) == 1) break;\r\n d0 = d1;\r\n d1 = d2;\r\n d2 = n1;\r\n n1 = n0.plus(q.times(d2));\r\n n0 = d2;\r\n d2 = d;\r\n d = n.minus(q.times(d2));\r\n n = d2;\r\n }\r\n\r\n d2 = divide(maxD.minus(d0), d1, 0, 1, 1);\r\n n0 = n0.plus(d2.times(n1));\r\n d0 = d0.plus(d2.times(d1));\r\n n0.s = n1.s = x.s;\r\n\r\n // Determine which fraction is closer to x, n0/d0 or n1/d1?\r\n r = divide(n1, d1, e, 1).minus(x).abs().cmp(divide(n0, d0, e, 1).minus(x).abs()) < 1\r\n ? [n1, d1] : [n0, d0];\r\n\r\n Ctor.precision = pr;\r\n external = true;\r\n\r\n return r;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 16, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toHexadecimal = P.toHex = function (sd, rm) {\r\n return toStringBinary(this, 16, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Returns a new Decimal whose value is the nearest multiple of `y` in the direction of rounding\r\n * mode `rm`, or `Decimal.rounding` if `rm` is omitted, to the value of this Decimal.\r\n *\r\n * The return value will always have the same sign as this Decimal, unless either this Decimal\r\n * or `y` is NaN, in which case the return value will be also be NaN.\r\n *\r\n * The return value is not affected by the value of `precision`.\r\n *\r\n * y {number|string|Decimal} The magnitude to round to a multiple of.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toNearest() rounding mode not an integer: {rm}'\r\n * 'toNearest() rounding mode out of range: {rm}'\r\n *\r\n */\r\nP.toNearest = function (y, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n x = new Ctor(x);\r\n\r\n if (y == null) {\r\n\r\n // If x is not finite, return x.\r\n if (!x.d) return x;\r\n\r\n y = new Ctor(1);\r\n rm = Ctor.rounding;\r\n } else {\r\n y = new Ctor(y);\r\n if (rm === void 0) {\r\n rm = Ctor.rounding;\r\n } else {\r\n checkInt32(rm, 0, 8);\r\n }\r\n\r\n // If x is not finite, return x if y is not NaN, else NaN.\r\n if (!x.d) return y.s ? x : y;\r\n\r\n // If y is not finite, return Infinity with the sign of x if y is Infinity, else NaN.\r\n if (!y.d) {\r\n if (y.s) y.s = x.s;\r\n return y;\r\n }\r\n }\r\n\r\n // If y is not zero, calculate the nearest multiple of y to x.\r\n if (y.d[0]) {\r\n external = false;\r\n x = divide(x, y, 0, rm, 1).times(y);\r\n external = true;\r\n finalise(x);\r\n\r\n // If y is zero, return zero with the sign of x.\r\n } else {\r\n y.s = x.s;\r\n x = y;\r\n }\r\n\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return the value of this Decimal converted to a number primitive.\r\n * Zero keeps its sign.\r\n *\r\n */\r\nP.toNumber = function () {\r\n return +this;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 8, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toOctal = function (sd, rm) {\r\n return toStringBinary(this, 8, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal raised to the power `y`, rounded\r\n * to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * ECMAScript compliant.\r\n *\r\n * pow(x, NaN) = NaN\r\n * pow(x, ±0) = 1\r\n\r\n * pow(NaN, non-zero) = NaN\r\n * pow(abs(x) > 1, +Infinity) = +Infinity\r\n * pow(abs(x) > 1, -Infinity) = +0\r\n * pow(abs(x) == 1, ±Infinity) = NaN\r\n * pow(abs(x) < 1, +Infinity) = +0\r\n * pow(abs(x) < 1, -Infinity) = +Infinity\r\n * pow(+Infinity, y > 0) = +Infinity\r\n * pow(+Infinity, y < 0) = +0\r\n * pow(-Infinity, odd integer > 0) = -Infinity\r\n * pow(-Infinity, even integer > 0) = +Infinity\r\n * pow(-Infinity, odd integer < 0) = -0\r\n * pow(-Infinity, even integer < 0) = +0\r\n * pow(+0, y > 0) = +0\r\n * pow(+0, y < 0) = +Infinity\r\n * pow(-0, odd integer > 0) = -0\r\n * pow(-0, even integer > 0) = +0\r\n * pow(-0, odd integer < 0) = -Infinity\r\n * pow(-0, even integer < 0) = +Infinity\r\n * pow(finite x < 0, finite non-integer) = NaN\r\n *\r\n * For non-integer or very large exponents pow(x, y) is calculated using\r\n *\r\n * x^y = exp(y*ln(x))\r\n *\r\n * Assuming the first 15 rounding digits are each equally likely to be any digit 0-9, the\r\n * probability of an incorrectly rounded result\r\n * P([49]9{14} | [50]0{14}) = 2 * 0.2 * 10^-14 = 4e-15 = 1/2.5e+14\r\n * i.e. 1 in 250,000,000,000,000\r\n *\r\n * If a result is incorrectly rounded the maximum error will be 1 ulp (unit in last place).\r\n *\r\n * y {number|string|Decimal} The power to which to raise this Decimal.\r\n *\r\n */\r\nP.toPower = P.pow = function (y) {\r\n var e, k, pr, r, rm, s,\r\n x = this,\r\n Ctor = x.constructor,\r\n yn = +(y = new Ctor(y));\r\n\r\n // Either ±Infinity, NaN or ±0?\r\n if (!x.d || !y.d || !x.d[0] || !y.d[0]) return new Ctor(mathpow(+x, yn));\r\n\r\n x = new Ctor(x);\r\n\r\n if (x.eq(1)) return x;\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n if (y.eq(1)) return finalise(x, pr, rm);\r\n\r\n // y exponent\r\n e = mathfloor(y.e / LOG_BASE);\r\n\r\n // If y is a small integer use the 'exponentiation by squaring' algorithm.\r\n if (e >= y.d.length - 1 && (k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\r\n r = intPow(Ctor, x, k, pr);\r\n return y.s < 0 ? new Ctor(1).div(r) : finalise(r, pr, rm);\r\n }\r\n\r\n s = x.s;\r\n\r\n // if x is negative\r\n if (s < 0) {\r\n\r\n // if y is not an integer\r\n if (e < y.d.length - 1) return new Ctor(NaN);\r\n\r\n // Result is positive if x is negative and the last digit of integer y is even.\r\n if ((y.d[e] & 1) == 0) s = 1;\r\n\r\n // if x.eq(-1)\r\n if (x.e == 0 && x.d[0] == 1 && x.d.length == 1) {\r\n x.s = s;\r\n return x;\r\n }\r\n }\r\n\r\n // Estimate result exponent.\r\n // x^y = 10^e, where e = y * log10(x)\r\n // log10(x) = log10(x_significand) + x_exponent\r\n // log10(x_significand) = ln(x_significand) / ln(10)\r\n k = mathpow(+x, yn);\r\n e = k == 0 || !isFinite(k)\r\n ? mathfloor(yn * (Math.log('0.' + digitsToString(x.d)) / Math.LN10 + x.e + 1))\r\n : new Ctor(k + '').e;\r\n\r\n // Exponent estimate may be incorrect e.g. x: 0.999999999999999999, y: 2.29, e: 0, r.e: -1.\r\n\r\n // Overflow/underflow?\r\n if (e > Ctor.maxE + 1 || e < Ctor.minE - 1) return new Ctor(e > 0 ? s / 0 : 0);\r\n\r\n external = false;\r\n Ctor.rounding = x.s = 1;\r\n\r\n // Estimate the extra guard digits needed to ensure five correct rounding digits from\r\n // naturalLogarithm(x). Example of failure without these extra digits (precision: 10):\r\n // new Decimal(2.32456).pow('2087987436534566.46411')\r\n // should be 1.162377823e+764914905173815, but is 1.162355823e+764914905173815\r\n k = Math.min(12, (e + '').length);\r\n\r\n // r = x^y = exp(y*ln(x))\r\n r = naturalExponential(y.times(naturalLogarithm(x, pr + k)), pr);\r\n\r\n // r may be Infinity, e.g. (0.9999999999999999).pow(-1e+40)\r\n if (r.d) {\r\n\r\n // Truncate to the required precision plus five rounding digits.\r\n r = finalise(r, pr + 5, 1);\r\n\r\n // If the rounding digits are [49]9999 or [50]0000 increase the precision by 10 and recalculate\r\n // the result.\r\n if (checkRoundingDigits(r.d, pr, rm)) {\r\n e = pr + 10;\r\n\r\n // Truncate to the increased precision plus five rounding digits.\r\n r = finalise(naturalExponential(y.times(naturalLogarithm(x, e + k)), e), e + 5, 1);\r\n\r\n // Check for 14 nines from the 2nd rounding digit (the first rounding digit may be 4 or 9).\r\n if (+digitsToString(r.d).slice(pr + 1, pr + 15) + 1 == 1e14) {\r\n r = finalise(r, pr + 1, 0);\r\n }\r\n }\r\n }\r\n\r\n r.s = s;\r\n external = true;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(r, pr, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal rounded to `sd` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * Return exponential notation if `sd` is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n var str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = finalise(new Ctor(x), sd, rm);\r\n str = finiteToString(x, sd <= x.e || x.e <= Ctor.toExpNeg, sd);\r\n }\r\n\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`\r\n * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if\r\n * omitted.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toSD() digits out of range: {sd}'\r\n * 'toSD() digits not an integer: {sd}'\r\n * 'toSD() rounding mode not an integer: {rm}'\r\n * 'toSD() rounding mode out of range: {rm}'\r\n *\r\n */\r\nP.toSignificantDigits = P.toSD = function (sd, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n sd = Ctor.precision;\r\n rm = Ctor.rounding;\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n }\r\n\r\n return finalise(new Ctor(x), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal.\r\n *\r\n * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.\r\n *\r\n */\r\nP.toString = function () {\r\n var x = this,\r\n Ctor = x.constructor,\r\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal truncated to a whole number.\r\n *\r\n */\r\nP.truncated = P.trunc = function () {\r\n return finalise(new this.constructor(this), this.e + 1, 1);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal.\r\n * Unlike `toString`, negative zero will include the minus sign.\r\n *\r\n */\r\nP.valueOf = P.toJSON = function () {\r\n var x = this,\r\n Ctor = x.constructor,\r\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n return x.isNeg() ? '-' + str : str;\r\n};\r\n\r\n\r\n// Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\r\n\r\n\r\n/*\r\n * digitsToString P.cubeRoot, P.logarithm, P.squareRoot, P.toFraction, P.toPower,\r\n * finiteToString, naturalExponential, naturalLogarithm\r\n * checkInt32 P.toDecimalPlaces, P.toExponential, P.toFixed, P.toNearest,\r\n * P.toPrecision, P.toSignificantDigits, toStringBinary, random\r\n * checkRoundingDigits P.logarithm, P.toPower, naturalExponential, naturalLogarithm\r\n * convertBase toStringBinary, parseOther\r\n * cos P.cos\r\n * divide P.atanh, P.cubeRoot, P.dividedBy, P.dividedToIntegerBy,\r\n * P.logarithm, P.modulo, P.squareRoot, P.tan, P.tanh, P.toFraction,\r\n * P.toNearest, toStringBinary, naturalExponential, naturalLogarithm,\r\n * taylorSeries, atan2, parseOther\r\n * finalise P.absoluteValue, P.atan, P.atanh, P.ceil, P.cos, P.cosh,\r\n * P.cubeRoot, P.dividedToIntegerBy, P.floor, P.logarithm, P.minus,\r\n * P.modulo, P.negated, P.plus, P.round, P.sin, P.sinh, P.squareRoot,\r\n * P.tan, P.times, P.toDecimalPlaces, P.toExponential, P.toFixed,\r\n * P.toNearest, P.toPower, P.toPrecision, P.toSignificantDigits,\r\n * P.truncated, divide, getLn10, getPi, naturalExponential,\r\n * naturalLogarithm, ceil, floor, round, trunc\r\n * finiteToString P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf,\r\n * toStringBinary\r\n * getBase10Exponent P.minus, P.plus, P.times, parseOther\r\n * getLn10 P.logarithm, naturalLogarithm\r\n * getPi P.acos, P.asin, P.atan, toLessThanHalfPi, atan2\r\n * getPrecision P.precision, P.toFraction\r\n * getZeroString digitsToString, finiteToString\r\n * intPow P.toPower, parseOther\r\n * isOdd toLessThanHalfPi\r\n * maxOrMin max, min\r\n * naturalExponential P.naturalExponential, P.toPower\r\n * naturalLogarithm P.acosh, P.asinh, P.atanh, P.logarithm, P.naturalLogarithm,\r\n * P.toPower, naturalExponential\r\n * nonFiniteToString finiteToString, toStringBinary\r\n * parseDecimal Decimal\r\n * parseOther Decimal\r\n * sin P.sin\r\n * taylorSeries P.cosh, P.sinh, cos, sin\r\n * toLessThanHalfPi P.cos, P.sin\r\n * toStringBinary P.toBinary, P.toHexadecimal, P.toOctal\r\n * truncate intPow\r\n *\r\n * Throws: P.logarithm, P.precision, P.toFraction, checkInt32, getLn10, getPi,\r\n * naturalLogarithm, config, parseOther, random, Decimal\r\n */\r\n\r\n\r\nfunction digitsToString(d) {\r\n var i, k, ws,\r\n indexOfLastWord = d.length - 1,\r\n str = '',\r\n w = d[0];\r\n\r\n if (indexOfLastWord > 0) {\r\n str += w;\r\n for (i = 1; i < indexOfLastWord; i++) {\r\n ws = d[i] + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n str += ws;\r\n }\r\n\r\n w = d[i];\r\n ws = w + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n } else if (w === 0) {\r\n return '0';\r\n }\r\n\r\n // Remove trailing zeros of last w.\r\n for (; w % 10 === 0;) w /= 10;\r\n\r\n return str + w;\r\n}\r\n\r\n\r\nfunction checkInt32(i, min, max) {\r\n if (i !== ~~i || i < min || i > max) {\r\n throw Error(invalidArgument + i);\r\n }\r\n}\r\n\r\n\r\n/*\r\n * Check 5 rounding digits if `repeating` is null, 4 otherwise.\r\n * `repeating == null` if caller is `log` or `pow`,\r\n * `repeating != null` if caller is `naturalLogarithm` or `naturalExponential`.\r\n */\r\nfunction checkRoundingDigits(d, i, rm, repeating) {\r\n var di, k, r, rd;\r\n\r\n // Get the length of the first word of the array d.\r\n for (k = d[0]; k >= 10; k /= 10) --i;\r\n\r\n // Is the rounding digit in the first word of d?\r\n if (--i < 0) {\r\n i += LOG_BASE;\r\n di = 0;\r\n } else {\r\n di = Math.ceil((i + 1) / LOG_BASE);\r\n i %= LOG_BASE;\r\n }\r\n\r\n // i is the index (0 - 6) of the rounding digit.\r\n // E.g. if within the word 3487563 the first rounding digit is 5,\r\n // then i = 4, k = 1000, rd = 3487563 % 1000 = 563\r\n k = mathpow(10, LOG_BASE - i);\r\n rd = d[di] % k | 0;\r\n\r\n if (repeating == null) {\r\n if (i < 3) {\r\n if (i == 0) rd = rd / 100 | 0;\r\n else if (i == 1) rd = rd / 10 | 0;\r\n r = rm < 4 && rd == 99999 || rm > 3 && rd == 49999 || rd == 50000 || rd == 0;\r\n } else {\r\n r = (rm < 4 && rd + 1 == k || rm > 3 && rd + 1 == k / 2) &&\r\n (d[di + 1] / k / 100 | 0) == mathpow(10, i - 2) - 1 ||\r\n (rd == k / 2 || rd == 0) && (d[di + 1] / k / 100 | 0) == 0;\r\n }\r\n } else {\r\n if (i < 4) {\r\n if (i == 0) rd = rd / 1000 | 0;\r\n else if (i == 1) rd = rd / 100 | 0;\r\n else if (i == 2) rd = rd / 10 | 0;\r\n r = (repeating || rm < 4) && rd == 9999 || !repeating && rm > 3 && rd == 4999;\r\n } else {\r\n r = ((repeating || rm < 4) && rd + 1 == k ||\r\n (!repeating && rm > 3) && rd + 1 == k / 2) &&\r\n (d[di + 1] / k / 1000 | 0) == mathpow(10, i - 3) - 1;\r\n }\r\n }\r\n\r\n return r;\r\n}\r\n\r\n\r\n// Convert string of `baseIn` to an array of numbers of `baseOut`.\r\n// Eg. convertBase('255', 10, 16) returns [15, 15].\r\n// Eg. convertBase('ff', 16, 10) returns [2, 5, 5].\r\nfunction convertBase(str, baseIn, baseOut) {\r\n var j,\r\n arr = [0],\r\n arrL,\r\n i = 0,\r\n strL = str.length;\r\n\r\n for (; i < strL;) {\r\n for (arrL = arr.length; arrL--;) arr[arrL] *= baseIn;\r\n arr[0] += NUMERALS.indexOf(str.charAt(i++));\r\n for (j = 0; j < arr.length; j++) {\r\n if (arr[j] > baseOut - 1) {\r\n if (arr[j + 1] === void 0) arr[j + 1] = 0;\r\n arr[j + 1] += arr[j] / baseOut | 0;\r\n arr[j] %= baseOut;\r\n }\r\n }\r\n }\r\n\r\n return arr.reverse();\r\n}\r\n\r\n\r\n/*\r\n * cos(x) = 1 - x^2/2! + x^4/4! - ...\r\n * |x| < pi/2\r\n *\r\n */\r\nfunction cosine(Ctor, x) {\r\n var k, len, y;\r\n\r\n if (x.isZero()) return x;\r\n\r\n // Argument reduction: cos(4x) = 8*(cos^4(x) - cos^2(x)) + 1\r\n // i.e. cos(x) = 8*(cos^4(x/4) - cos^2(x/4)) + 1\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n len = x.d.length;\r\n if (len < 32) {\r\n k = Math.ceil(len / 3);\r\n y = (1 / tinyPow(4, k)).toString();\r\n } else {\r\n k = 16;\r\n y = '2.3283064365386962890625e-10';\r\n }\r\n\r\n Ctor.precision += k;\r\n\r\n x = taylorSeries(Ctor, 1, x.times(y), new Ctor(1));\r\n\r\n // Reverse argument reduction\r\n for (var i = k; i--;) {\r\n var cos2x = x.times(x);\r\n x = cos2x.times(cos2x).minus(cos2x).times(8).plus(1);\r\n }\r\n\r\n Ctor.precision -= k;\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Perform division in the specified base.\r\n */\r\nvar divide = (function () {\r\n\r\n // Assumes non-zero x and k, and hence non-zero result.\r\n function multiplyInteger(x, k, base) {\r\n var temp,\r\n carry = 0,\r\n i = x.length;\r\n\r\n for (x = x.slice(); i--;) {\r\n temp = x[i] * k + carry;\r\n x[i] = temp % base | 0;\r\n carry = temp / base | 0;\r\n }\r\n\r\n if (carry) x.unshift(carry);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, r;\r\n\r\n if (aL != bL) {\r\n r = aL > bL ? 1 : -1;\r\n } else {\r\n for (i = r = 0; i < aL; i++) {\r\n if (a[i] != b[i]) {\r\n r = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return r;\r\n }\r\n\r\n function subtract(a, b, aL, base) {\r\n var i = 0;\r\n\r\n // Subtract b from a.\r\n for (; aL--;) {\r\n a[aL] -= i;\r\n i = a[aL] < b[aL] ? 1 : 0;\r\n a[aL] = i * base + a[aL] - b[aL];\r\n }\r\n\r\n // Remove leading zeros.\r\n for (; !a[0] && a.length > 1;) a.shift();\r\n }\r\n\r\n return function (x, y, pr, rm, dp, base) {\r\n var cmp, e, i, k, logBase, more, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0,\r\n yL, yz,\r\n Ctor = x.constructor,\r\n sign = x.s == y.s ? 1 : -1,\r\n xd = x.d,\r\n yd = y.d;\r\n\r\n // Either NaN, Infinity or 0?\r\n if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n return new Ctor(// Return NaN if either NaN, or both Infinity or 0.\r\n !x.s || !y.s || (xd ? yd && xd[0] == yd[0] : !yd) ? NaN :\r\n\r\n // Return ±0 if x is 0 or y is ±Infinity, or return ±Infinity as y is 0.\r\n xd && xd[0] == 0 || !yd ? sign * 0 : sign / 0);\r\n }\r\n\r\n if (base) {\r\n logBase = 1;\r\n e = x.e - y.e;\r\n } else {\r\n base = BASE;\r\n logBase = LOG_BASE;\r\n e = mathfloor(x.e / logBase) - mathfloor(y.e / logBase);\r\n }\r\n\r\n yL = yd.length;\r\n xL = xd.length;\r\n q = new Ctor(sign);\r\n qd = q.d = [];\r\n\r\n // Result exponent may be one less than e.\r\n // The digit array of a Decimal from toStringBinary may have trailing zeros.\r\n for (i = 0; yd[i] == (xd[i] || 0); i++);\r\n\r\n if (yd[i] > (xd[i] || 0)) e--;\r\n\r\n if (pr == null) {\r\n sd = pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n } else if (dp) {\r\n sd = pr + (x.e - y.e) + 1;\r\n } else {\r\n sd = pr;\r\n }\r\n\r\n if (sd < 0) {\r\n qd.push(1);\r\n more = true;\r\n } else {\r\n\r\n // Convert precision in number of base 10 digits to base 1e7 digits.\r\n sd = sd / logBase + 2 | 0;\r\n i = 0;\r\n\r\n // divisor < 1e7\r\n if (yL == 1) {\r\n k = 0;\r\n yd = yd[0];\r\n sd++;\r\n\r\n // k is the carry.\r\n for (; (i < xL || k) && sd--; i++) {\r\n t = k * base + (xd[i] || 0);\r\n qd[i] = t / yd | 0;\r\n k = t % yd | 0;\r\n }\r\n\r\n more = k || i < xL;\r\n\r\n // divisor >= 1e7\r\n } else {\r\n\r\n // Normalise xd and yd so highest order digit of yd is >= base/2\r\n k = base / (yd[0] + 1) | 0;\r\n\r\n if (k > 1) {\r\n yd = multiplyInteger(yd, k, base);\r\n xd = multiplyInteger(xd, k, base);\r\n yL = yd.length;\r\n xL = xd.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xd.slice(0, yL);\r\n remL = rem.length;\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; remL < yL;) rem[remL++] = 0;\r\n\r\n yz = yd.slice();\r\n yz.unshift(0);\r\n yd0 = yd[0];\r\n\r\n if (yd[1] >= base / 2) ++yd0;\r\n\r\n do {\r\n k = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, k.\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n // k will be how many times the divisor goes into the current remainder.\r\n k = rem0 / yd0 | 0;\r\n\r\n // Algorithm:\r\n // 1. product = divisor * trial digit (k)\r\n // 2. if product > remainder: product -= divisor, k--\r\n // 3. remainder -= product\r\n // 4. if product was < remainder at 2:\r\n // 5. compare new remainder and divisor\r\n // 6. If remainder > divisor: remainder -= divisor, k++\r\n\r\n if (k > 1) {\r\n if (k >= base) k = base - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiplyInteger(yd, k, base);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n cmp = compare(prod, rem, prodL, remL);\r\n\r\n // product > remainder.\r\n if (cmp == 1) {\r\n k--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yd, prodL, base);\r\n }\r\n } else {\r\n\r\n // cmp is -1.\r\n // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\r\n // to avoid it. If k is 1 there is a need to compare yd and rem again below.\r\n if (k == 0) cmp = k = 1;\r\n prod = yd.slice();\r\n }\r\n\r\n prodL = prod.length;\r\n if (prodL < remL) prod.unshift(0);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL, base);\r\n\r\n // If product was < previous remainder.\r\n if (cmp == -1) {\r\n remL = rem.length;\r\n\r\n // Compare divisor and new remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n if (cmp < 1) {\r\n k++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yd, remL, base);\r\n }\r\n }\r\n\r\n remL = rem.length;\r\n } else if (cmp === 0) {\r\n k++;\r\n rem = [0];\r\n } // if cmp === 1, k will be 0\r\n\r\n // Add the next digit, k, to the result array.\r\n qd[i++] = k;\r\n\r\n // Update the remainder.\r\n if (cmp && rem[0]) {\r\n rem[remL++] = xd[xi] || 0;\r\n } else {\r\n rem = [xd[xi]];\r\n remL = 1;\r\n }\r\n\r\n } while ((xi++ < xL || rem[0] !== void 0) && sd--);\r\n\r\n more = rem[0] !== void 0;\r\n }\r\n\r\n // Leading zero?\r\n if (!qd[0]) qd.shift();\r\n }\r\n\r\n // logBase is 1 when divide is being used for base conversion.\r\n if (logBase == 1) {\r\n q.e = e;\r\n inexact = more;\r\n } else {\r\n\r\n // To calculate q.e, first get the number of digits of qd[0].\r\n for (i = 1, k = qd[0]; k >= 10; k /= 10) i++;\r\n q.e = i + e * logBase - 1;\r\n\r\n finalise(q, dp ? pr + q.e + 1 : pr, rm, more);\r\n }\r\n\r\n return q;\r\n };\r\n})();\r\n\r\n\r\n/*\r\n * Round `x` to `sd` significant digits using rounding mode `rm`.\r\n * Check for over/under-flow.\r\n */\r\n function finalise(x, sd, rm, isTruncated) {\r\n var digits, i, j, k, rd, roundUp, w, xd, xdi,\r\n Ctor = x.constructor;\r\n\r\n // Don't round if sd is null or undefined.\r\n out: if (sd != null) {\r\n xd = x.d;\r\n\r\n // Infinity/NaN.\r\n if (!xd) return x;\r\n\r\n // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // w: the word of xd containing rd, a base 1e7 number.\r\n // xdi: the index of w within xd.\r\n // digits: the number of digits of w.\r\n // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\r\n // they had leading zeros)\r\n // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\r\n\r\n // Get the length of the first word of the digits array xd.\r\n for (digits = 1, k = xd[0]; k >= 10; k /= 10) digits++;\r\n i = sd - digits;\r\n\r\n // Is the rounding digit in the first word of xd?\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n w = xd[xdi = 0];\r\n\r\n // Get the rounding digit at index j of w.\r\n rd = w / mathpow(10, digits - j - 1) % 10 | 0;\r\n } else {\r\n xdi = Math.ceil((i + 1) / LOG_BASE);\r\n k = xd.length;\r\n if (xdi >= k) {\r\n if (isTruncated) {\r\n\r\n // Needed by `naturalExponential`, `naturalLogarithm` and `squareRoot`.\r\n for (; k++ <= xdi;) xd.push(0);\r\n w = rd = 0;\r\n digits = 1;\r\n i %= LOG_BASE;\r\n j = i - LOG_BASE + 1;\r\n } else {\r\n break out;\r\n }\r\n } else {\r\n w = k = xd[xdi];\r\n\r\n // Get the number of digits of w.\r\n for (digits = 1; k >= 10; k /= 10) digits++;\r\n\r\n // Get the index of rd within w.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within w, adjusted for leading zeros.\r\n // The number of leading zeros of w is given by LOG_BASE - digits.\r\n j = i - LOG_BASE + digits;\r\n\r\n // Get the rounding digit at index j of w.\r\n rd = j < 0 ? 0 : w / mathpow(10, digits - j - 1) % 10 | 0;\r\n }\r\n }\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n isTruncated = isTruncated || sd < 0 ||\r\n xd[xdi + 1] !== void 0 || (j < 0 ? w : w % mathpow(10, digits - j - 1));\r\n\r\n // The expression `w % mathpow(10, digits - j - 1)` returns all the digits of w to the right\r\n // of the digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression\r\n // will give 714.\r\n\r\n roundUp = rm < 4\r\n ? (rd || isTruncated) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || isTruncated || rm == 6 &&\r\n\r\n // Check whether the digit to the left of the rounding digit is odd.\r\n ((i > 0 ? j > 0 ? w / mathpow(10, digits - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n if (sd < 1 || !xd[0]) {\r\n xd.length = 0;\r\n if (roundUp) {\r\n\r\n // Convert sd to decimal places.\r\n sd -= x.e + 1;\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\r\n x.e = -sd || 0;\r\n } else {\r\n\r\n // Zero.\r\n xd[0] = x.e = 0;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n // Remove excess digits.\r\n if (i == 0) {\r\n xd.length = xdi;\r\n k = 1;\r\n xdi--;\r\n } else {\r\n xd.length = xdi + 1;\r\n k = mathpow(10, LOG_BASE - i);\r\n\r\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n // j > 0 means i > number of leading zeros of w.\r\n xd[xdi] = j > 0 ? (w / mathpow(10, digits - j) % mathpow(10, j) | 0) * k : 0;\r\n }\r\n\r\n if (roundUp) {\r\n for (;;) {\r\n\r\n // Is the digit to be rounded up in the first word of xd?\r\n if (xdi == 0) {\r\n\r\n // i will be the length of xd[0] before k is added.\r\n for (i = 1, j = xd[0]; j >= 10; j /= 10) i++;\r\n j = xd[0] += k;\r\n for (k = 1; j >= 10; j /= 10) k++;\r\n\r\n // if i != k the length has increased.\r\n if (i != k) {\r\n x.e++;\r\n if (xd[0] == BASE) xd[0] = 1;\r\n }\r\n\r\n break;\r\n } else {\r\n xd[xdi] += k;\r\n if (xd[xdi] != BASE) break;\r\n xd[xdi--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xd.length; xd[--i] === 0;) xd.pop();\r\n }\r\n\r\n if (external) {\r\n\r\n // Overflow?\r\n if (x.e > Ctor.maxE) {\r\n\r\n // Infinity.\r\n x.d = null;\r\n x.e = NaN;\r\n\r\n // Underflow?\r\n } else if (x.e < Ctor.minE) {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n // Ctor.underflow = true;\r\n } // else Ctor.underflow = false;\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\nfunction finiteToString(x, isExp, sd) {\r\n if (!x.isFinite()) return nonFiniteToString(x);\r\n var k,\r\n e = x.e,\r\n str = digitsToString(x.d),\r\n len = str.length;\r\n\r\n if (isExp) {\r\n if (sd && (k = sd - len) > 0) {\r\n str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\r\n } else if (len > 1) {\r\n str = str.charAt(0) + '.' + str.slice(1);\r\n }\r\n\r\n str = str + (x.e < 0 ? 'e' : 'e+') + x.e;\r\n } else if (e < 0) {\r\n str = '0.' + getZeroString(-e - 1) + str;\r\n if (sd && (k = sd - len) > 0) str += getZeroString(k);\r\n } else if (e >= len) {\r\n str += getZeroString(e + 1 - len);\r\n if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\r\n } else {\r\n if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\r\n if (sd && (k = sd - len) > 0) {\r\n if (e + 1 === len) str += '.';\r\n str += getZeroString(k);\r\n }\r\n }\r\n\r\n return str;\r\n}\r\n\r\n\r\n// Calculate the base 10 exponent from the base 1e7 exponent.\r\nfunction getBase10Exponent(digits, e) {\r\n var w = digits[0];\r\n\r\n // Add the number of digits of the first word of the digits array.\r\n for ( e *= LOG_BASE; w >= 10; w /= 10) e++;\r\n return e;\r\n}\r\n\r\n\r\nfunction getLn10(Ctor, sd, pr) {\r\n if (sd > LN10_PRECISION) {\r\n\r\n // Reset global state in case the exception is caught.\r\n external = true;\r\n if (pr) Ctor.precision = pr;\r\n throw Error(precisionLimitExceeded);\r\n }\r\n return finalise(new Ctor(LN10), sd, 1, true);\r\n}\r\n\r\n\r\nfunction getPi(Ctor, sd, rm) {\r\n if (sd > PI_PRECISION) throw Error(precisionLimitExceeded);\r\n return finalise(new Ctor(PI), sd, rm, true);\r\n}\r\n\r\n\r\nfunction getPrecision(digits) {\r\n var w = digits.length - 1,\r\n len = w * LOG_BASE + 1;\r\n\r\n w = digits[w];\r\n\r\n // If non-zero...\r\n if (w) {\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n for (; w % 10 == 0; w /= 10) len--;\r\n\r\n // Add the number of digits of the first word.\r\n for (w = digits[0]; w >= 10; w /= 10) len++;\r\n }\r\n\r\n return len;\r\n}\r\n\r\n\r\nfunction getZeroString(k) {\r\n var zs = '';\r\n for (; k--;) zs += '0';\r\n return zs;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of Decimal `x` to the power `n`, where `n` is an\r\n * integer of type number.\r\n *\r\n * Implements 'exponentiation by squaring'. Called by `pow` and `parseOther`.\r\n *\r\n */\r\nfunction intPow(Ctor, x, n, pr) {\r\n var isTruncated,\r\n r = new Ctor(1),\r\n\r\n // Max n of 9007199254740991 takes 53 loop iterations.\r\n // Maximum digits array length; leaves [28, 34] guard digits.\r\n k = Math.ceil(pr / LOG_BASE + 4);\r\n\r\n external = false;\r\n\r\n for (;;) {\r\n if (n % 2) {\r\n r = r.times(x);\r\n if (truncate(r.d, k)) isTruncated = true;\r\n }\r\n\r\n n = mathfloor(n / 2);\r\n if (n === 0) {\r\n\r\n // To ensure correct rounding when r.d is truncated, increment the last word if it is zero.\r\n n = r.d.length - 1;\r\n if (isTruncated && r.d[n] === 0) ++r.d[n];\r\n break;\r\n }\r\n\r\n x = x.times(x);\r\n truncate(x.d, k);\r\n }\r\n\r\n external = true;\r\n\r\n return r;\r\n}\r\n\r\n\r\nfunction isOdd(n) {\r\n return n.d[n.d.length - 1] & 1;\r\n}\r\n\r\n\r\n/*\r\n * Handle `max` and `min`. `ltgt` is 'lt' or 'gt'.\r\n */\r\nfunction maxOrMin(Ctor, args, ltgt) {\r\n var y,\r\n x = new Ctor(args[0]),\r\n i = 0;\r\n\r\n for (; ++i < args.length;) {\r\n y = new Ctor(args[i]);\r\n if (!y.s) {\r\n x = y;\r\n break;\r\n } else if (x[ltgt](y)) {\r\n x = y;\r\n }\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n * Taylor/Maclaurin series.\r\n *\r\n * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n *\r\n * Argument reduction:\r\n * Repeat x = x / 32, k += 5, until |x| < 0.1\r\n * exp(x) = exp(x / 2^k)^(2^k)\r\n *\r\n * Previously, the argument was initially reduced by\r\n * exp(x) = exp(r) * 10^k where r = x - k * ln10, k = floor(x / ln10)\r\n * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n * found to be slower than just dividing repeatedly by 32 as above.\r\n *\r\n * Max integer argument: exp('20723265836946413') = 6.3e+9000000000000000\r\n * Min integer argument: exp('-20723265836946411') = 1.2e-9000000000000000\r\n * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n *\r\n * exp(Infinity) = Infinity\r\n * exp(-Infinity) = 0\r\n * exp(NaN) = NaN\r\n * exp(±0) = 1\r\n *\r\n * exp(x) is non-terminating for any finite, non-zero x.\r\n *\r\n * The result will always be correctly rounded.\r\n *\r\n */\r\nfunction naturalExponential(x, sd) {\r\n var denominator, guard, j, pow, sum, t, wpr,\r\n rep = 0,\r\n i = 0,\r\n k = 0,\r\n Ctor = x.constructor,\r\n rm = Ctor.rounding,\r\n pr = Ctor.precision;\r\n\r\n // 0/NaN/Infinity?\r\n if (!x.d || !x.d[0] || x.e > 17) {\r\n\r\n return new Ctor(x.d\r\n ? !x.d[0] ? 1 : x.s < 0 ? 0 : 1 / 0\r\n : x.s ? x.s < 0 ? 0 : x : 0 / 0);\r\n }\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n t = new Ctor(0.03125);\r\n\r\n // while abs(x) >= 0.1\r\n while (x.e > -2) {\r\n\r\n // x = x / 2^5\r\n x = x.times(t);\r\n k += 5;\r\n }\r\n\r\n // Use 2 * log10(2^k) + 5 (empirically derived) to estimate the increase in precision\r\n // necessary to ensure the first 4 rounding digits are correct.\r\n guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\r\n wpr += guard;\r\n denominator = pow = sum = new Ctor(1);\r\n Ctor.precision = wpr;\r\n\r\n for (;;) {\r\n pow = finalise(pow.times(x), wpr, 1);\r\n denominator = denominator.times(++i);\r\n t = sum.plus(divide(pow, denominator, wpr, 1));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n j = k;\r\n while (j--) sum = finalise(sum.times(sum), wpr, 1);\r\n\r\n // Check to see if the first 4 rounding digits are [49]999.\r\n // If so, repeat the summation with a higher precision, otherwise\r\n // e.g. with precision: 18, rounding: 1\r\n // exp(18.404272462595034083567793919843761) = 98372560.1229999999 (should be 98372560.123)\r\n // `wpr - guard` is the index of first rounding digit.\r\n if (sd == null) {\r\n\r\n if (rep < 3 && checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n Ctor.precision = wpr += 10;\r\n denominator = pow = t = new Ctor(1);\r\n i = 0;\r\n rep++;\r\n } else {\r\n return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n }\r\n } else {\r\n Ctor.precision = pr;\r\n return sum;\r\n }\r\n }\r\n\r\n sum = t;\r\n }\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n * ln(-n) = NaN\r\n * ln(0) = -Infinity\r\n * ln(-0) = -Infinity\r\n * ln(1) = 0\r\n * ln(Infinity) = Infinity\r\n * ln(-Infinity) = NaN\r\n * ln(NaN) = NaN\r\n *\r\n * ln(n) (n != 1) is non-terminating.\r\n *\r\n */\r\nfunction naturalLogarithm(y, sd) {\r\n var c, c0, denominator, e, numerator, rep, sum, t, wpr, x1, x2,\r\n n = 1,\r\n guard = 10,\r\n x = y,\r\n xd = x.d,\r\n Ctor = x.constructor,\r\n rm = Ctor.rounding,\r\n pr = Ctor.precision;\r\n\r\n // Is x negative or Infinity, NaN, 0 or 1?\r\n if (x.s < 0 || !xd || !xd[0] || !x.e && xd[0] == 1 && xd.length == 1) {\r\n return new Ctor(xd && !xd[0] ? -1 / 0 : x.s != 1 ? NaN : xd ? 0 : x);\r\n }\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n Ctor.precision = wpr += guard;\r\n c = digitsToString(xd);\r\n c0 = c.charAt(0);\r\n\r\n if (Math.abs(e = x.e) < 1.5e15) {\r\n\r\n // Argument reduction.\r\n // The series converges faster the closer the argument is to 1, so using\r\n // ln(a^b) = b * ln(a), ln(a) = ln(a^b) / b\r\n // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\r\n // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\r\n // later be divided by this number, then separate out the power of 10 using\r\n // ln(a*10^b) = ln(a) + b*ln(10).\r\n\r\n // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\r\n //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\r\n // max n is 6 (gives 0.7 - 1.3)\r\n while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\r\n x = x.times(y);\r\n c = digitsToString(x.d);\r\n c0 = c.charAt(0);\r\n n++;\r\n }\r\n\r\n e = x.e;\r\n\r\n if (c0 > 1) {\r\n x = new Ctor('0.' + c);\r\n e++;\r\n } else {\r\n x = new Ctor(c0 + '.' + c.slice(1));\r\n }\r\n } else {\r\n\r\n // The argument reduction method above may result in overflow if the argument y is a massive\r\n // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\r\n // function using ln(x*10^e) = ln(x) + e*ln(10).\r\n t = getLn10(Ctor, wpr + 2, pr).times(e + '');\r\n x = naturalLogarithm(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\r\n Ctor.precision = pr;\r\n\r\n return sd == null ? finalise(x, pr, rm, external = true) : x;\r\n }\r\n\r\n // x1 is x reduced to a value near 1.\r\n x1 = x;\r\n\r\n // Taylor series.\r\n // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\r\n // where x = (y - 1)/(y + 1) (|x| < 1)\r\n sum = numerator = x = divide(x.minus(1), x.plus(1), wpr, 1);\r\n x2 = finalise(x.times(x), wpr, 1);\r\n denominator = 3;\r\n\r\n for (;;) {\r\n numerator = finalise(numerator.times(x2), wpr, 1);\r\n t = sum.plus(divide(numerator, new Ctor(denominator), wpr, 1));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n sum = sum.times(2);\r\n\r\n // Reverse the argument reduction. Check that e is not 0 because, besides preventing an\r\n // unnecessary calculation, -0 + 0 = +0 and to ensure correct rounding -0 needs to stay -0.\r\n if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\r\n sum = divide(sum, new Ctor(n), wpr, 1);\r\n\r\n // Is rm > 3 and the first 4 rounding digits 4999, or rm < 4 (or the summation has\r\n // been repeated previously) and the first 4 rounding digits 9999?\r\n // If so, restart the summation with a higher precision, otherwise\r\n // e.g. with precision: 12, rounding: 1\r\n // ln(135520028.6126091714265381533) = 18.7246299999 when it should be 18.72463.\r\n // `wpr - guard` is the index of first rounding digit.\r\n if (sd == null) {\r\n if (checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n Ctor.precision = wpr += guard;\r\n t = numerator = x = divide(x1.minus(1), x1.plus(1), wpr, 1);\r\n x2 = finalise(x.times(x), wpr, 1);\r\n denominator = rep = 1;\r\n } else {\r\n return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n }\r\n } else {\r\n Ctor.precision = pr;\r\n return sum;\r\n }\r\n }\r\n\r\n sum = t;\r\n denominator += 2;\r\n }\r\n}\r\n\r\n\r\n// ±Infinity, NaN.\r\nfunction nonFiniteToString(x) {\r\n // Unsigned.\r\n return String(x.s * x.s / 0);\r\n}\r\n\r\n\r\n/*\r\n * Parse the value of a new Decimal `x` from string `str`.\r\n */\r\nfunction parseDecimal(x, str) {\r\n var e, i, len;\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = str.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +str.slice(i + 1);\r\n str = str.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = str.length;\r\n }\r\n\r\n // Determine leading zeros.\r\n for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n // Determine trailing zeros.\r\n for (len = str.length; str.charCodeAt(len - 1) === 48; --len);\r\n str = str.slice(i, len);\r\n\r\n if (str) {\r\n len -= i;\r\n x.e = e = e - i - 1;\r\n x.d = [];\r\n\r\n // Transform base\r\n\r\n // e is the base 10 exponent.\r\n // i is where to slice str to get the first word of the digits array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE;\r\n\r\n if (i < len) {\r\n if (i) x.d.push(+str.slice(0, i));\r\n for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\r\n str = str.slice(i);\r\n i = LOG_BASE - str.length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--;) str += '0';\r\n x.d.push(+str);\r\n\r\n if (external) {\r\n\r\n // Overflow?\r\n if (x.e > x.constructor.maxE) {\r\n\r\n // Infinity.\r\n x.d = null;\r\n x.e = NaN;\r\n\r\n // Underflow?\r\n } else if (x.e < x.constructor.minE) {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n // x.constructor.underflow = true;\r\n } // else x.constructor.underflow = false;\r\n }\r\n } else {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Parse the value of a new Decimal `x` from a string `str`, which is not a decimal value.\r\n */\r\nfunction parseOther(x, str) {\r\n var base, Ctor, divisor, i, isFloat, len, p, xd, xe;\r\n\r\n if (str.indexOf('_') > -1) {\r\n str = str.replace(/(\\d)_(?=\\d)/g, '$1');\r\n if (isDecimal.test(str)) return parseDecimal(x, str);\r\n } else if (str === 'Infinity' || str === 'NaN') {\r\n if (!+str) x.s = NaN;\r\n x.e = NaN;\r\n x.d = null;\r\n return x;\r\n }\r\n\r\n if (isHex.test(str)) {\r\n base = 16;\r\n str = str.toLowerCase();\r\n } else if (isBinary.test(str)) {\r\n base = 2;\r\n } else if (isOctal.test(str)) {\r\n base = 8;\r\n } else {\r\n throw Error(invalidArgument + str);\r\n }\r\n\r\n // Is there a binary exponent part?\r\n i = str.search(/p/i);\r\n\r\n if (i > 0) {\r\n p = +str.slice(i + 1);\r\n str = str.substring(2, i);\r\n } else {\r\n str = str.slice(2);\r\n }\r\n\r\n // Convert `str` as an integer then divide the result by `base` raised to a power such that the\r\n // fraction part will be restored.\r\n i = str.indexOf('.');\r\n isFloat = i >= 0;\r\n Ctor = x.constructor;\r\n\r\n if (isFloat) {\r\n str = str.replace('.', '');\r\n len = str.length;\r\n i = len - i;\r\n\r\n // log[10](16) = 1.2041... , log[10](88) = 1.9444....\r\n divisor = intPow(Ctor, new Ctor(base), i, i * 2);\r\n }\r\n\r\n xd = convertBase(str, base, BASE);\r\n xe = xd.length - 1;\r\n\r\n // Remove trailing zeros.\r\n for (i = xe; xd[i] === 0; --i) xd.pop();\r\n if (i < 0) return new Ctor(x.s * 0);\r\n x.e = getBase10Exponent(xd, xe);\r\n x.d = xd;\r\n external = false;\r\n\r\n // At what precision to perform the division to ensure exact conversion?\r\n // maxDecimalIntegerPartDigitCount = ceil(log[10](b) * otherBaseIntegerPartDigitCount)\r\n // log[10](2) = 0.30103, log[10](8) = 0.90309, log[10](16) = 1.20412\r\n // E.g. ceil(1.2 * 3) = 4, so up to 4 decimal digits are needed to represent 3 hex int digits.\r\n // maxDecimalFractionPartDigitCount = {Hex:4|Oct:3|Bin:1} * otherBaseFractionPartDigitCount\r\n // Therefore using 4 * the number of digits of str will always be enough.\r\n if (isFloat) x = divide(x, divisor, len * 4);\r\n\r\n // Multiply by the binary exponent part if present.\r\n if (p) x = x.times(Math.abs(p) < 54 ? mathpow(2, p) : Decimal.pow(2, p));\r\n external = true;\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n * |x| < pi/2\r\n *\r\n */\r\nfunction sine(Ctor, x) {\r\n var k,\r\n len = x.d.length;\r\n\r\n if (len < 3) {\r\n return x.isZero() ? x : taylorSeries(Ctor, 2, x, x);\r\n }\r\n\r\n // Argument reduction: sin(5x) = 16*sin^5(x) - 20*sin^3(x) + 5*sin(x)\r\n // i.e. sin(x) = 16*sin^5(x/5) - 20*sin^3(x/5) + 5*sin(x/5)\r\n // and sin(x) = sin(x/5)(5 + sin^2(x/5)(16sin^2(x/5) - 20))\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n k = 1.4 * Math.sqrt(len);\r\n k = k > 16 ? 16 : k | 0;\r\n\r\n x = x.times(1 / tinyPow(5, k));\r\n x = taylorSeries(Ctor, 2, x, x);\r\n\r\n // Reverse argument reduction\r\n var sin2_x,\r\n d5 = new Ctor(5),\r\n d16 = new Ctor(16),\r\n d20 = new Ctor(20);\r\n for (; k--;) {\r\n sin2_x = x.times(x);\r\n x = x.times(d5.plus(sin2_x.times(d16.times(sin2_x).minus(d20))));\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n// Calculate Taylor series for `cos`, `cosh`, `sin` and `sinh`.\r\nfunction taylorSeries(Ctor, n, x, y, isHyperbolic) {\r\n var j, t, u, x2,\r\n i = 1,\r\n pr = Ctor.precision,\r\n k = Math.ceil(pr / LOG_BASE);\r\n\r\n external = false;\r\n x2 = x.times(x);\r\n u = new Ctor(y);\r\n\r\n for (;;) {\r\n t = divide(u.times(x2), new Ctor(n++ * n++), pr, 1);\r\n u = isHyperbolic ? y.plus(t) : y.minus(t);\r\n y = divide(t.times(x2), new Ctor(n++ * n++), pr, 1);\r\n t = u.plus(y);\r\n\r\n if (t.d[k] !== void 0) {\r\n for (j = k; t.d[j] === u.d[j] && j--;);\r\n if (j == -1) break;\r\n }\r\n\r\n j = u;\r\n u = y;\r\n y = t;\r\n t = j;\r\n i++;\r\n }\r\n\r\n external = true;\r\n t.d.length = k + 1;\r\n\r\n return t;\r\n}\r\n\r\n\r\n// Exponent e must be positive and non-zero.\r\nfunction tinyPow(b, e) {\r\n var n = b;\r\n while (--e) n *= b;\r\n return n;\r\n}\r\n\r\n\r\n// Return the absolute value of `x` reduced to less than or equal to half pi.\r\nfunction toLessThanHalfPi(Ctor, x) {\r\n var t,\r\n isNeg = x.s < 0,\r\n pi = getPi(Ctor, Ctor.precision, 1),\r\n halfPi = pi.times(0.5);\r\n\r\n x = x.abs();\r\n\r\n if (x.lte(halfPi)) {\r\n quadrant = isNeg ? 4 : 1;\r\n return x;\r\n }\r\n\r\n t = x.divToInt(pi);\r\n\r\n if (t.isZero()) {\r\n quadrant = isNeg ? 3 : 2;\r\n } else {\r\n x = x.minus(t.times(pi));\r\n\r\n // 0 <= x < pi\r\n if (x.lte(halfPi)) {\r\n quadrant = isOdd(t) ? (isNeg ? 2 : 3) : (isNeg ? 4 : 1);\r\n return x;\r\n }\r\n\r\n quadrant = isOdd(t) ? (isNeg ? 1 : 4) : (isNeg ? 3 : 2);\r\n }\r\n\r\n return x.minus(pi).abs();\r\n}\r\n\r\n\r\n/*\r\n * Return the value of Decimal `x` as a string in base `baseOut`.\r\n *\r\n * If the optional `sd` argument is present include a binary exponent suffix.\r\n */\r\nfunction toStringBinary(x, baseOut, sd, rm) {\r\n var base, e, i, k, len, roundUp, str, xd, y,\r\n Ctor = x.constructor,\r\n isExp = sd !== void 0;\r\n\r\n if (isExp) {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n } else {\r\n sd = Ctor.precision;\r\n rm = Ctor.rounding;\r\n }\r\n\r\n if (!x.isFinite()) {\r\n str = nonFiniteToString(x);\r\n } else {\r\n str = finiteToString(x);\r\n i = str.indexOf('.');\r\n\r\n // Use exponential notation according to `toExpPos` and `toExpNeg`? No, but if required:\r\n // maxBinaryExponent = floor((decimalExponent + 1) * log[2](10))\r\n // minBinaryExponent = floor(decimalExponent * log[2](10))\r\n // log[2](10) = 3.321928094887362347870319429489390175864\r\n\r\n if (isExp) {\r\n base = 2;\r\n if (baseOut == 16) {\r\n sd = sd * 4 - 3;\r\n } else if (baseOut == 8) {\r\n sd = sd * 3 - 2;\r\n }\r\n } else {\r\n base = baseOut;\r\n }\r\n\r\n // Convert the number as an integer then divide the result by its base raised to a power such\r\n // that the fraction part will be restored.\r\n\r\n // Non-integer.\r\n if (i >= 0) {\r\n str = str.replace('.', '');\r\n y = new Ctor(1);\r\n y.e = str.length - i;\r\n y.d = convertBase(finiteToString(y), 10, base);\r\n y.e = y.d.length;\r\n }\r\n\r\n xd = convertBase(str, 10, base);\r\n e = len = xd.length;\r\n\r\n // Remove trailing zeros.\r\n for (; xd[--len] == 0;) xd.pop();\r\n\r\n if (!xd[0]) {\r\n str = isExp ? '0p+0' : '0';\r\n } else {\r\n if (i < 0) {\r\n e--;\r\n } else {\r\n x = new Ctor(x);\r\n x.d = xd;\r\n x.e = e;\r\n x = divide(x, y, sd, rm, 0, base);\r\n xd = x.d;\r\n e = x.e;\r\n roundUp = inexact;\r\n }\r\n\r\n // The rounding digit, i.e. the digit after the digit that may be rounded up.\r\n i = xd[sd];\r\n k = base / 2;\r\n roundUp = roundUp || xd[sd + 1] !== void 0;\r\n\r\n roundUp = rm < 4\r\n ? (i !== void 0 || roundUp) && (rm === 0 || rm === (x.s < 0 ? 3 : 2))\r\n : i > k || i === k && (rm === 4 || roundUp || rm === 6 && xd[sd - 1] & 1 ||\r\n rm === (x.s < 0 ? 8 : 7));\r\n\r\n xd.length = sd;\r\n\r\n if (roundUp) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up and so on.\r\n for (; ++xd[--sd] > base - 1;) {\r\n xd[sd] = 0;\r\n if (!sd) {\r\n ++e;\r\n xd.unshift(1);\r\n }\r\n }\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n // E.g. [4, 11, 15] becomes 4bf.\r\n for (i = 0, str = ''; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n\r\n // Add binary exponent suffix?\r\n if (isExp) {\r\n if (len > 1) {\r\n if (baseOut == 16 || baseOut == 8) {\r\n i = baseOut == 16 ? 4 : 3;\r\n for (--len; len % i; len++) str += '0';\r\n xd = convertBase(str, base, baseOut);\r\n for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n // xd[0] will always be be 1\r\n for (i = 1, str = '1.'; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n } else {\r\n str = str.charAt(0) + '.' + str.slice(1);\r\n }\r\n }\r\n\r\n str = str + (e < 0 ? 'p' : 'p+') + e;\r\n } else if (e < 0) {\r\n for (; ++e;) str = '0' + str;\r\n str = '0.' + str;\r\n } else {\r\n if (++e > len) for (e -= len; e-- ;) str += '0';\r\n else if (e < len) str = str.slice(0, e) + '.' + str.slice(e);\r\n }\r\n }\r\n\r\n str = (baseOut == 16 ? '0x' : baseOut == 2 ? '0b' : baseOut == 8 ? '0o' : '') + str;\r\n }\r\n\r\n return x.s < 0 ? '-' + str : str;\r\n}\r\n\r\n\r\n// Does not strip trailing zeros.\r\nfunction truncate(arr, len) {\r\n if (arr.length > len) {\r\n arr.length = len;\r\n return true;\r\n }\r\n}\r\n\r\n\r\n// Decimal methods\r\n\r\n\r\n/*\r\n * abs\r\n * acos\r\n * acosh\r\n * add\r\n * asin\r\n * asinh\r\n * atan\r\n * atanh\r\n * atan2\r\n * cbrt\r\n * ceil\r\n * clamp\r\n * clone\r\n * config\r\n * cos\r\n * cosh\r\n * div\r\n * exp\r\n * floor\r\n * hypot\r\n * ln\r\n * log\r\n * log2\r\n * log10\r\n * max\r\n * min\r\n * mod\r\n * mul\r\n * pow\r\n * random\r\n * round\r\n * set\r\n * sign\r\n * sin\r\n * sinh\r\n * sqrt\r\n * sub\r\n * sum\r\n * tan\r\n * tanh\r\n * trunc\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the absolute value of `x`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction abs(x) {\r\n return new this(x).abs();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arccosine in radians of `x`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction acos(x) {\r\n return new this(x).acos();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction acosh(x) {\r\n return new this(x).acosh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sum of `x` and `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n * y {number|string|Decimal}\r\n *\r\n */\r\nfunction add(x, y) {\r\n return new this(x).plus(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arcsine in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction asin(x) {\r\n return new this(x).asin();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction asinh(x) {\r\n return new this(x).asinh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction atan(x) {\r\n return new this(x).atan();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction atanh(x) {\r\n return new this(x).atanh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent in radians of `y/x` in the range -pi to pi\r\n * (inclusive), rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi, pi]\r\n *\r\n * y {number|string|Decimal} The y-coordinate.\r\n * x {number|string|Decimal} The x-coordinate.\r\n *\r\n * atan2(±0, -0) = ±pi\r\n * atan2(±0, +0) = ±0\r\n * atan2(±0, -x) = ±pi for x > 0\r\n * atan2(±0, x) = ±0 for x > 0\r\n * atan2(-y, ±0) = -pi/2 for y > 0\r\n * atan2(y, ±0) = pi/2 for y > 0\r\n * atan2(±y, -Infinity) = ±pi for finite y > 0\r\n * atan2(±y, +Infinity) = ±0 for finite y > 0\r\n * atan2(±Infinity, x) = ±pi/2 for finite x\r\n * atan2(±Infinity, -Infinity) = ±3*pi/4\r\n * atan2(±Infinity, +Infinity) = ±pi/4\r\n * atan2(NaN, x) = NaN\r\n * atan2(y, NaN) = NaN\r\n *\r\n */\r\nfunction atan2(y, x) {\r\n y = new this(y);\r\n x = new this(x);\r\n var r,\r\n pr = this.precision,\r\n rm = this.rounding,\r\n wpr = pr + 4;\r\n\r\n // Either NaN\r\n if (!y.s || !x.s) {\r\n r = new this(NaN);\r\n\r\n // Both ±Infinity\r\n } else if (!y.d && !x.d) {\r\n r = getPi(this, wpr, 1).times(x.s > 0 ? 0.25 : 0.75);\r\n r.s = y.s;\r\n\r\n // x is ±Infinity or y is ±0\r\n } else if (!x.d || y.isZero()) {\r\n r = x.s < 0 ? getPi(this, pr, rm) : new this(0);\r\n r.s = y.s;\r\n\r\n // y is ±Infinity or x is ±0\r\n } else if (!y.d || x.isZero()) {\r\n r = getPi(this, wpr, 1).times(0.5);\r\n r.s = y.s;\r\n\r\n // Both non-zero and finite\r\n } else if (x.s < 0) {\r\n this.precision = wpr;\r\n this.rounding = 1;\r\n r = this.atan(divide(y, x, wpr, 1));\r\n x = getPi(this, wpr, 1);\r\n this.precision = pr;\r\n this.rounding = rm;\r\n r = y.s < 0 ? r.minus(x) : r.plus(x);\r\n } else {\r\n r = this.atan(divide(y, x, wpr, 1));\r\n }\r\n\r\n return r;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cube root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction cbrt(x) {\r\n return new this(x).cbrt();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` rounded to an integer using `ROUND_CEIL`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction ceil(x) {\r\n return finalise(x = new this(x), x.e + 1, 2);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` clamped to the range delineated by `min` and `max`.\r\n *\r\n * x {number|string|Decimal}\r\n * min {number|string|Decimal}\r\n * max {number|string|Decimal}\r\n *\r\n */\r\nfunction clamp(x, min, max) {\r\n return new this(x).clamp(min, max);\r\n}\r\n\r\n\r\n/*\r\n * Configure global settings for a Decimal constructor.\r\n *\r\n * `obj` is an object with one or more of the following properties,\r\n *\r\n * precision {number}\r\n * rounding {number}\r\n * toExpNeg {number}\r\n * toExpPos {number}\r\n * maxE {number}\r\n * minE {number}\r\n * modulo {number}\r\n * crypto {boolean|number}\r\n * defaults {true}\r\n *\r\n * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n *\r\n */\r\nfunction config(obj) {\r\n if (!obj || typeof obj !== 'object') throw Error(decimalError + 'Object expected');\r\n var i, p, v,\r\n useDefaults = obj.defaults === true,\r\n ps = [\r\n 'precision', 1, MAX_DIGITS,\r\n 'rounding', 0, 8,\r\n 'toExpNeg', -EXP_LIMIT, 0,\r\n 'toExpPos', 0, EXP_LIMIT,\r\n 'maxE', 0, EXP_LIMIT,\r\n 'minE', -EXP_LIMIT, 0,\r\n 'modulo', 0, 9\r\n ];\r\n\r\n for (i = 0; i < ps.length; i += 3) {\r\n if (p = ps[i], useDefaults) this[p] = DEFAULTS[p];\r\n if ((v = obj[p]) !== void 0) {\r\n if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\r\n else throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n }\r\n\r\n if (p = 'crypto', useDefaults) this[p] = DEFAULTS[p];\r\n if ((v = obj[p]) !== void 0) {\r\n if (v === true || v === false || v === 0 || v === 1) {\r\n if (v) {\r\n if (typeof crypto != 'undefined' && crypto &&\r\n (crypto.getRandomValues || crypto.randomBytes)) {\r\n this[p] = true;\r\n } else {\r\n throw Error(cryptoUnavailable);\r\n }\r\n } else {\r\n this[p] = false;\r\n }\r\n } else {\r\n throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n }\r\n\r\n return this;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cosine of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction cos(x) {\r\n return new this(x).cos();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic cosine of `x`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction cosh(x) {\r\n return new this(x).cosh();\r\n}\r\n\r\n\r\n/*\r\n * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n * constructor.\r\n *\r\n */\r\nfunction clone(obj) {\r\n var i, p, ps;\r\n\r\n /*\r\n * The Decimal constructor and exported function.\r\n * Return a new Decimal instance.\r\n *\r\n * v {number|string|Decimal} A numeric value.\r\n *\r\n */\r\n function Decimal(v) {\r\n var e, i, t,\r\n x = this;\r\n\r\n // Decimal called without new.\r\n if (!(x instanceof Decimal)) return new Decimal(v);\r\n\r\n // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\r\n // which points to Object.\r\n x.constructor = Decimal;\r\n\r\n // Duplicate.\r\n if (isDecimalInstance(v)) {\r\n x.s = v.s;\r\n\r\n if (external) {\r\n if (!v.d || v.e > Decimal.maxE) {\r\n\r\n // Infinity.\r\n x.e = NaN;\r\n x.d = null;\r\n } else if (v.e < Decimal.minE) {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n } else {\r\n x.e = v.e;\r\n x.d = v.d.slice();\r\n }\r\n } else {\r\n x.e = v.e;\r\n x.d = v.d ? v.d.slice() : v.d;\r\n }\r\n\r\n return;\r\n }\r\n\r\n t = typeof v;\r\n\r\n if (t === 'number') {\r\n if (v === 0) {\r\n x.s = 1 / v < 0 ? -1 : 1;\r\n x.e = 0;\r\n x.d = [0];\r\n return;\r\n }\r\n\r\n if (v < 0) {\r\n v = -v;\r\n x.s = -1;\r\n } else {\r\n x.s = 1;\r\n }\r\n\r\n // Fast path for small integers.\r\n if (v === ~~v && v < 1e7) {\r\n for (e = 0, i = v; i >= 10; i /= 10) e++;\r\n\r\n if (external) {\r\n if (e > Decimal.maxE) {\r\n x.e = NaN;\r\n x.d = null;\r\n } else if (e < Decimal.minE) {\r\n x.e = 0;\r\n x.d = [0];\r\n } else {\r\n x.e = e;\r\n x.d = [v];\r\n }\r\n } else {\r\n x.e = e;\r\n x.d = [v];\r\n }\r\n\r\n return;\r\n\r\n // Infinity, NaN.\r\n } else if (v * 0 !== 0) {\r\n if (!v) x.s = NaN;\r\n x.e = NaN;\r\n x.d = null;\r\n return;\r\n }\r\n\r\n return parseDecimal(x, v.toString());\r\n\r\n } else if (t !== 'string') {\r\n throw Error(invalidArgument + v);\r\n }\r\n\r\n // Minus sign?\r\n if ((i = v.charCodeAt(0)) === 45) {\r\n v = v.slice(1);\r\n x.s = -1;\r\n } else {\r\n // Plus sign?\r\n if (i === 43) v = v.slice(1);\r\n x.s = 1;\r\n }\r\n\r\n return isDecimal.test(v) ? parseDecimal(x, v) : parseOther(x, v);\r\n }\r\n\r\n Decimal.prototype = P;\r\n\r\n Decimal.ROUND_UP = 0;\r\n Decimal.ROUND_DOWN = 1;\r\n Decimal.ROUND_CEIL = 2;\r\n Decimal.ROUND_FLOOR = 3;\r\n Decimal.ROUND_HALF_UP = 4;\r\n Decimal.ROUND_HALF_DOWN = 5;\r\n Decimal.ROUND_HALF_EVEN = 6;\r\n Decimal.ROUND_HALF_CEIL = 7;\r\n Decimal.ROUND_HALF_FLOOR = 8;\r\n Decimal.EUCLID = 9;\r\n\r\n Decimal.config = Decimal.set = config;\r\n Decimal.clone = clone;\r\n Decimal.isDecimal = isDecimalInstance;\r\n\r\n Decimal.abs = abs;\r\n Decimal.acos = acos;\r\n Decimal.acosh = acosh; // ES6\r\n Decimal.add = add;\r\n Decimal.asin = asin;\r\n Decimal.asinh = asinh; // ES6\r\n Decimal.atan = atan;\r\n Decimal.atanh = atanh; // ES6\r\n Decimal.atan2 = atan2;\r\n Decimal.cbrt = cbrt; // ES6\r\n Decimal.ceil = ceil;\r\n Decimal.clamp = clamp;\r\n Decimal.cos = cos;\r\n Decimal.cosh = cosh; // ES6\r\n Decimal.div = div;\r\n Decimal.exp = exp;\r\n Decimal.floor = floor;\r\n Decimal.hypot = hypot; // ES6\r\n Decimal.ln = ln;\r\n Decimal.log = log;\r\n Decimal.log10 = log10; // ES6\r\n Decimal.log2 = log2; // ES6\r\n Decimal.max = max;\r\n Decimal.min = min;\r\n Decimal.mod = mod;\r\n Decimal.mul = mul;\r\n Decimal.pow = pow;\r\n Decimal.random = random;\r\n Decimal.round = round;\r\n Decimal.sign = sign; // ES6\r\n Decimal.sin = sin;\r\n Decimal.sinh = sinh; // ES6\r\n Decimal.sqrt = sqrt;\r\n Decimal.sub = sub;\r\n Decimal.sum = sum;\r\n Decimal.tan = tan;\r\n Decimal.tanh = tanh; // ES6\r\n Decimal.trunc = trunc; // ES6\r\n\r\n if (obj === void 0) obj = {};\r\n if (obj) {\r\n if (obj.defaults !== true) {\r\n ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'maxE', 'minE', 'modulo', 'crypto'];\r\n for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\r\n }\r\n }\r\n\r\n Decimal.config(obj);\r\n\r\n return Decimal;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` divided by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n * y {number|string|Decimal}\r\n *\r\n */\r\nfunction div(x, y) {\r\n return new this(x).div(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} The power to which to raise the base of the natural log.\r\n *\r\n */\r\nfunction exp(x) {\r\n return new this(x).exp();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` round to an integer using `ROUND_FLOOR`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction floor(x) {\r\n return finalise(x = new this(x), x.e + 1, 3);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of the sum of the squares of the arguments,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * hypot(a, b, ...) = sqrt(a^2 + b^2 + ...)\r\n *\r\n * arguments {number|string|Decimal}\r\n *\r\n */\r\nfunction hypot() {\r\n var i, n,\r\n t = new this(0);\r\n\r\n external = false;\r\n\r\n for (i = 0; i < arguments.length;) {\r\n n = new this(arguments[i++]);\r\n if (!n.d) {\r\n if (n.s) {\r\n external = true;\r\n return new this(1 / 0);\r\n }\r\n t = n;\r\n } else if (t.d) {\r\n t = t.plus(n.times(n));\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return t.sqrt();\r\n}\r\n\r\n\r\n/*\r\n * Return true if object is a Decimal instance (where Decimal is any Decimal constructor),\r\n * otherwise return false.\r\n *\r\n */\r\nfunction isDecimalInstance(obj) {\r\n return obj instanceof Decimal || obj && obj.toStringTag === tag || false;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction ln(x) {\r\n return new this(x).ln();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the log of `x` to the base `y`, or to base 10 if no base\r\n * is specified, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * log[y](x)\r\n *\r\n * x {number|string|Decimal} The argument of the logarithm.\r\n * y {number|string|Decimal} The base of the logarithm.\r\n *\r\n */\r\nfunction log(x, y) {\r\n return new this(x).log(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the base 2 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction log2(x) {\r\n return new this(x).log(2);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the base 10 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction log10(x) {\r\n return new this(x).log(10);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the maximum of the arguments.\r\n *\r\n * arguments {number|string|Decimal}\r\n *\r\n */\r\nfunction max() {\r\n return maxOrMin(this, arguments, 'lt');\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the minimum of the arguments.\r\n *\r\n * arguments {number|string|Decimal}\r\n *\r\n */\r\nfunction min() {\r\n return maxOrMin(this, arguments, 'gt');\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` modulo `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n * y {number|string|Decimal}\r\n *\r\n */\r\nfunction mod(x, y) {\r\n return new this(x).mod(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` multiplied by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n * y {number|string|Decimal}\r\n *\r\n */\r\nfunction mul(x, y) {\r\n return new this(x).mul(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` raised to the power `y`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} The base.\r\n * y {number|string|Decimal} The exponent.\r\n *\r\n */\r\nfunction pow(x, y) {\r\n return new this(x).pow(y);\r\n}\r\n\r\n\r\n/*\r\n * Returns a new Decimal with a random value equal to or greater than 0 and less than 1, and with\r\n * `sd`, or `Decimal.precision` if `sd` is omitted, significant digits (or less if trailing zeros\r\n * are produced).\r\n *\r\n * [sd] {number} Significant digits. Integer, 0 to MAX_DIGITS inclusive.\r\n *\r\n */\r\nfunction random(sd) {\r\n var d, e, k, n,\r\n i = 0,\r\n r = new this(1),\r\n rd = [];\r\n\r\n if (sd === void 0) sd = this.precision;\r\n else checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n k = Math.ceil(sd / LOG_BASE);\r\n\r\n if (!this.crypto) {\r\n for (; i < k;) rd[i++] = Math.random() * 1e7 | 0;\r\n\r\n // Browsers supporting crypto.getRandomValues.\r\n } else if (crypto.getRandomValues) {\r\n d = crypto.getRandomValues(new Uint32Array(k));\r\n\r\n for (; i < k;) {\r\n n = d[i];\r\n\r\n // 0 <= n < 4294967296\r\n // Probability n >= 4.29e9, is 4967296 / 4294967296 = 0.00116 (1 in 865).\r\n if (n >= 4.29e9) {\r\n d[i] = crypto.getRandomValues(new Uint32Array(1))[0];\r\n } else {\r\n\r\n // 0 <= n <= 4289999999\r\n // 0 <= (n % 1e7) <= 9999999\r\n rd[i++] = n % 1e7;\r\n }\r\n }\r\n\r\n // Node.js supporting crypto.randomBytes.\r\n } else if (crypto.randomBytes) {\r\n\r\n // buffer\r\n d = crypto.randomBytes(k *= 4);\r\n\r\n for (; i < k;) {\r\n\r\n // 0 <= n < 2147483648\r\n n = d[i] + (d[i + 1] << 8) + (d[i + 2] << 16) + ((d[i + 3] & 0x7f) << 24);\r\n\r\n // Probability n >= 2.14e9, is 7483648 / 2147483648 = 0.0035 (1 in 286).\r\n if (n >= 2.14e9) {\r\n crypto.randomBytes(4).copy(d, i);\r\n } else {\r\n\r\n // 0 <= n <= 2139999999\r\n // 0 <= (n % 1e7) <= 9999999\r\n rd.push(n % 1e7);\r\n i += 4;\r\n }\r\n }\r\n\r\n i = k / 4;\r\n } else {\r\n throw Error(cryptoUnavailable);\r\n }\r\n\r\n k = rd[--i];\r\n sd %= LOG_BASE;\r\n\r\n // Convert trailing digits to zeros according to sd.\r\n if (k && sd) {\r\n n = mathpow(10, LOG_BASE - sd);\r\n rd[i] = (k / n | 0) * n;\r\n }\r\n\r\n // Remove trailing words which are zero.\r\n for (; rd[i] === 0; i--) rd.pop();\r\n\r\n // Zero?\r\n if (i < 0) {\r\n e = 0;\r\n rd = [0];\r\n } else {\r\n e = -1;\r\n\r\n // Remove leading words which are zero and adjust exponent accordingly.\r\n for (; rd[0] === 0; e -= LOG_BASE) rd.shift();\r\n\r\n // Count the digits of the first word of rd to determine leading zeros.\r\n for (k = 1, n = rd[0]; n >= 10; n /= 10) k++;\r\n\r\n // Adjust the exponent for leading zeros of the first word of rd.\r\n if (k < LOG_BASE) e -= LOG_BASE - k;\r\n }\r\n\r\n r.e = e;\r\n r.d = rd;\r\n\r\n return r;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` rounded to an integer using rounding mode `rounding`.\r\n *\r\n * To emulate `Math.round`, set rounding to 7 (ROUND_HALF_CEIL).\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction round(x) {\r\n return finalise(x = new this(x), x.e + 1, this.rounding);\r\n}\r\n\r\n\r\n/*\r\n * Return\r\n * 1 if x > 0,\r\n * -1 if x < 0,\r\n * 0 if x is 0,\r\n * -0 if x is -0,\r\n * NaN otherwise\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction sign(x) {\r\n x = new this(x);\r\n return x.d ? (x.d[0] ? x.s : 0 * x.s) : x.s || NaN;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sine of `x`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction sin(x) {\r\n return new this(x).sin();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic sine of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction sinh(x) {\r\n return new this(x).sinh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction sqrt(x) {\r\n return new this(x).sqrt();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` minus `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n * y {number|string|Decimal}\r\n *\r\n */\r\nfunction sub(x, y) {\r\n return new this(x).sub(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sum of the arguments, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * Only the result is rounded, not the intermediate calculations.\r\n *\r\n * arguments {number|string|Decimal}\r\n *\r\n */\r\nfunction sum() {\r\n var i = 0,\r\n args = arguments,\r\n x = new this(args[i]);\r\n\r\n external = false;\r\n for (; x.s && ++i < args.length;) x = x.plus(args[i]);\r\n external = true;\r\n\r\n return finalise(x, this.precision, this.rounding);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the tangent of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction tan(x) {\r\n return new this(x).tan();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic tangent of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction tanh(x) {\r\n return new this(x).tanh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` truncated to an integer.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction trunc(x) {\r\n return finalise(x = new this(x), x.e + 1, 1);\r\n}\r\n\r\n\r\nP[Symbol.for('nodejs.util.inspect.custom')] = P.toString;\r\nP[Symbol.toStringTag] = 'Decimal';\r\n\r\n// Create and configure initial Decimal constructor.\r\nexport var Decimal = P.constructor = clone(DEFAULTS);\r\n\r\n// Create the internal constants from their string values.\r\nLN10 = new Decimal(LN10);\r\nPI = new Decimal(PI);\r\n\r\nexport default Decimal;\r\n","import Konva from \"konva\";\nimport {BaseMarker, MARKER_STYLE_DEFAULT, MarkerConfig, MarkerStyle} from \"./marker\";\nimport {PeriodMarkerChangeEvent, PeriodObservation} from \"../../types\";\nimport {BaseMarkerHandle, MARKER_HANDLE_STYLE_DEFAULT, MarkerHandleConfig, MarkerHandleStyle} from \"./marker-handle\";\nimport Decimal from \"decimal.js\";\nimport {VerticalMeasurement} from \"../../common/measurement\";\nimport {Timeline} from \"../timeline\";\nimport {MarkerLane} from \"./marker-lane\";\nimport {takeUntil} from \"rxjs\";\nimport {ComponentConfigStyleComposed} from \"../../common/component\";\nimport {z, ZodType} from \"zod\";\n\n// region marker handle\nexport interface PeriodMarkerHandleStyle extends MarkerHandleStyle {\n markerSymbolSize: number\n periodMarkerHandleType: 'start' | 'end';\n}\n\nexport interface PeriodMarkerHandleConfig extends MarkerHandleConfig<PeriodMarkerHandleStyle> {\n\n}\n\nconst markerHandleConfigDefault: Partial<PeriodMarkerHandleConfig> = {\n editable: true,\n style: {\n ...MARKER_HANDLE_STYLE_DEFAULT,\n markerSymbolSize: 20,\n periodMarkerHandleType: 'start'\n }\n}\n\nexport class PeriodMarkerHandle extends BaseMarkerHandle<PeriodMarkerHandleConfig, PeriodMarkerHandleStyle> {\n\n constructor(config: ComponentConfigStyleComposed<PeriodMarkerHandleConfig>, markerLane: MarkerLane, timeline: Timeline) {\n super({\n ...markerHandleConfigDefault,\n ...config,\n style: {\n ...markerHandleConfigDefault.style,\n ...config.style,\n },\n }, markerLane, timeline);\n }\n\n protected createSymbol(): Konva.Shape {\n switch (this.style.markerSymbolType) {\n case 'triangle':\n let diagonal = Decimal.sqrt(2).mul(this.style.markerSymbolSize).toNumber();\n let halfDiagonal = diagonal / 2;\n return new Konva.Line({\n points: this.style.periodMarkerHandleType === 'start' ? [-halfDiagonal, 0, 0, 0, 0, halfDiagonal] : [0, 0, halfDiagonal, 0, 0, halfDiagonal],\n fill: this.style.color,\n closed: true,\n offsetY: halfDiagonal / 2,\n })\n case 'circle':\n return new Konva.Arc({\n fill: this.style.color,\n innerRadius: 0,\n outerRadius: this.style.markerSymbolSize / 2,\n angle: 180,\n rotation: this.style.periodMarkerHandleType === 'start' ? 90 : -90\n })\n case 'square':\n return new Konva.Line({\n points: [\n 0, 0,\n this.style.markerSymbolSize, 0,\n this.style.markerSymbolSize, this.style.markerSymbolSize\n ],\n fill: this.style.color,\n closed: true,\n rotation: this.style.periodMarkerHandleType === 'start' ? 225 : 45,\n offsetX: this.style.markerSymbolSize / 2,\n offsetY: this.style.markerSymbolSize / 2,\n })\n default:\n throw Error('Unknown type');\n }\n }\n}\n\n// endregion\n\nexport interface PeriodMarkerStyle extends MarkerStyle {\n selectedAreaOpacity: number;\n markerHandleAreaOpacity: number;\n}\n\nexport interface PeriodMarkerConfig extends MarkerConfig<PeriodObservation, PeriodMarkerStyle> {\n\n}\n\nconst markerConfigDefault: Partial<PeriodMarkerConfig> = {\n editable: true,\n style: {\n ...MARKER_STYLE_DEFAULT,\n selectedAreaOpacity: 0.2,\n markerHandleAreaOpacity: 0.7\n }\n}\n\nexport class PeriodMarker extends BaseMarker<PeriodObservation, PeriodMarkerConfig, PeriodMarkerStyle, PeriodMarkerChangeEvent> {\n private startMarkerHandle: PeriodMarkerHandle;\n private endMarkerHandle: PeriodMarkerHandle;\n\n // region konva\n private selectedAreaRect: Konva.Rect;\n private markerHandleRect: Konva.Rect;\n\n // endregion\n\n constructor(config: ComponentConfigStyleComposed<PeriodMarkerConfig>) {\n super({\n ...markerConfigDefault,\n ...config,\n style: {\n ...markerConfigDefault.style,\n ...config.style,\n },\n });\n\n this.observation.start = z.coerce.number()\n .min(0)\n .parse(this.observation.start);\n\n this.observation.end = z.coerce.number()\n .gte(this.observation.start)\n .parse(this.observation.end);\n }\n\n protected createCanvasNode(): Konva.Group {\n super.createCanvasNode();\n\n this.initStartMarkerHandle();\n this.initEndMarkerHandle();\n this.initSelectedAreaRect();\n\n return this.group;\n }\n\n onChange() {\n this.settlePosition()\n let event: PeriodMarkerChangeEvent = {\n timeObservation: this.observation\n }\n this.onChange$.next(event)\n }\n\n onMeasurementsChange() {\n super.onMeasurementsChange();\n\n let verticalMeasurement = this.startMarkerHandle.getVerticalMeasurement();\n\n this.selectedAreaRect.setAttrs({\n y: verticalMeasurement.y,\n height: verticalMeasurement.height,\n });\n\n let markerHandleVerticalMeasurement: VerticalMeasurement = {\n y: this.startMarkerHandle.getHandleGroup().y(),\n height: this.startMarkerHandle.getHandleGroup().getClientRect().height\n }\n\n this.markerHandleRect.setAttrs({\n y: verticalMeasurement.y + markerHandleVerticalMeasurement.y - markerHandleVerticalMeasurement.height / 2,\n height: markerHandleVerticalMeasurement.height,\n });\n\n this.settlePosition();\n }\n\n private initSelectedAreaRect() {\n if (this.selectedAreaRect) {\n this.selectedAreaRect.destroy();\n }\n\n if (this.markerHandleRect) {\n this.markerHandleRect.destroy();\n }\n\n if (!this.hasStart() || !this.hasEnd()) {\n return;\n }\n\n let verticalMeasurement = this.startMarkerHandle.getVerticalMeasurement();\n let startX = this.timeline.timeToTimelinePosition(this.observation.start);\n let endX = this.timeline.timeToTimelinePosition(this.observation.end);\n\n this.selectedAreaRect = new Konva.Rect({\n x: startX,\n y: verticalMeasurement.y,\n width: endX - startX,\n height: verticalMeasurement.height,\n listening: false,\n fill: this.style.color,\n opacity: this.style.selectedAreaOpacity\n })\n\n let markerHandleVerticalMeasurement: VerticalMeasurement = {\n y: this.startMarkerHandle.getHandleGroup().y(),\n height: this.startMarkerHandle.getHandleGroup().getClientRect().height\n }\n\n this.markerHandleRect = new Konva.Rect({\n x: startX,\n y: verticalMeasurement.y + markerHandleVerticalMeasurement.y - markerHandleVerticalMeasurement.height / 2,\n width: endX - startX,\n height: markerHandleVerticalMeasurement.height,\n listening: false,\n fill: this.style.color,\n opacity: this.style.markerHandleAreaOpacity\n })\n\n this.group.add(this.selectedAreaRect);\n this.group.add(this.markerHandleRect);\n }\n\n private initStartMarkerHandle() {\n if (this.startMarkerHandle) {\n this.startMarkerHandle.destroy();\n this.startMarkerHandle = void 0;\n }\n\n if (!this.hasStart()) {\n return;\n }\n\n let startX = this.timeline.timeToTimelinePosition(this.observation.start);\n this.startMarkerHandle = new PeriodMarkerHandle({\n x: startX,\n editable: this.editable,\n style: {\n color: this.style.color,\n markerRenderType: this.style.renderType,\n markerSymbolType: this.style.symbolType,\n periodMarkerHandleType: 'start',\n }\n }, this.markerLane, this.timeline);\n\n this.startMarkerHandle.onDrag = (markerHandleGroup) => {\n if (this.editable) {\n if (this.hasEnd()) {\n if (markerHandleGroup.x() > this.endMarkerHandle.getPosition().x) {\n markerHandleGroup.x(this.endMarkerHandle.getPosition().x);\n }\n }\n this.settleMeasurements()\n if (this.hasStart() && this.hasEnd()) {\n this.markerHandleRect.opacity(1);\n }\n }\n }\n\n this.startMarkerHandle.onDragEnd = (markerHandleGroup) => {\n if (this.editable) {\n let newTime = this.timeline.timelinePositionToTime(markerHandleGroup.x());\n this.setTimeObservation({\n ...this.observation,\n start: newTime\n })\n if (this.hasStart() && this.hasEnd()) {\n this.markerHandleRect.opacity(this.style.markerHandleAreaOpacity);\n }\n }\n }\n\n this.group.add(this.startMarkerHandle.initCanvasNode());\n }\n\n private initEndMarkerHandle() {\n if (this.endMarkerHandle) {\n this.endMarkerHandle.destroy();\n this.endMarkerHandle = void 0;\n }\n\n if (!this.hasEnd()) {\n return;\n }\n\n let endX = this.hasEnd() ? this.timeline.timeToTimelinePosition(this.observation.end) : void 0;\n this.endMarkerHandle = new PeriodMarkerHandle({\n x: endX,\n editable: this.editable,\n style: {\n periodMarkerHandleType: 'end',\n color: this.style.color,\n markerRenderType: this.style.renderType,\n markerSymbolType: this.style.symbolType\n }\n }, this.markerLane, this.timeline);\n\n this.endMarkerHandle.onDrag = (markerHandleGroup) => {\n if (this.editable) {\n if (this.hasStart()) {\n if (markerHandleGroup.x() < this.startMarkerHandle.getPosition().x) {\n markerHandleGroup.x(this.startMarkerHandle.getPosition().x);\n }\n }\n this.settleMeasurements()\n if (this.hasStart() && this.hasEnd()) {\n this.markerHandleRect.opacity(1);\n }\n }\n }\n\n this.endMarkerHandle.onDragEnd = (markerHandleGroup) => {\n if (this.editable) {\n let newTime = this.timeline.timelinePositionToTime(markerHandleGroup.x());\n this.setTimeObservation({\n ...this.observation,\n end: newTime\n })\n if (this.hasStart() && this.hasEnd()) {\n this.markerHandleRect.opacity(this.style.markerHandleAreaOpacity);\n }\n }\n }\n\n this.group.add(this.endMarkerHandle.initCanvasNode());\n }\n\n private settlePosition() {\n if (this.hasStart()) {\n this.startMarkerHandle.setPosition({\n ...this.startMarkerHandle.getPosition(),\n x: this.timeline.timeToTimelinePosition(this.observation.start)\n })\n }\n\n if (this.hasEnd()) {\n this.endMarkerHandle.setPosition({\n ...this.endMarkerHandle.getPosition(),\n x: this.timeline.timeToTimelinePosition(this.observation.end)\n })\n }\n\n this.settleMeasurements();\n }\n\n private settleMeasurements() {\n if (this.hasStart() && this.hasEnd()) {\n this.selectedAreaRect.setAttrs({\n x: this.startMarkerHandle.getPosition().x,\n width: this.endMarkerHandle.getPosition().x - this.startMarkerHandle.getPosition().x\n })\n this.markerHandleRect.setAttrs({\n x: this.startMarkerHandle.getPosition().x,\n width: this.endMarkerHandle.getPosition().x - this.startMarkerHandle.getPosition().x\n })\n }\n }\n\n setTimeObservation(timeObservation: PeriodObservation) {\n if (this.editable) {\n this.observation = timeObservation;\n\n // TODO validation start end\n\n this.initStartMarkerHandle();\n this.initEndMarkerHandle();\n this.initSelectedAreaRect();\n\n this.onChange();\n }\n }\n\n setEditable(editable: boolean) {\n super.setEditable(editable);\n }\n\n protected afterCanvasNodeInit() {\n super.afterCanvasNodeInit();\n\n this.styleAdapter.onChange$.pipe(takeUntil(this.onDestroy$)).subscribe((style) => {\n if (this.hasStart()) {\n this.initStartMarkerHandle();\n }\n\n if (this.hasEnd()) {\n this.initEndMarkerHandle()\n }\n\n if (this.hasStart() && this.hasEnd()) {\n this.initSelectedAreaRect();\n }\n })\n }\n\n private hasStart() {\n return this.observation && (this.observation.start !== null && this.observation.start !== undefined);\n }\n\n private hasEnd() {\n return this.observation && (this.observation.end !== null && this.observation.end !== undefined);\n }\n}\n","import Konva from \"konva\";\nimport {BaseMarker, MARKER_STYLE_DEFAULT, MarkerConfig, MarkerStyle} from \"./marker\";\nimport {MomentMarkerChangeEvent, MomentObservation} from \"../../types\";\nimport Decimal from \"decimal.js\";\nimport {BaseMarkerHandle, MARKER_HANDLE_STYLE_DEFAULT, MarkerHandle, MarkerHandleConfig, MarkerHandleStyle} from \"./marker-handle\";\nimport {MarkerLane} from \"./marker-lane\";\nimport {Timeline} from \"../timeline\";\nimport {ComponentConfigStyleComposed} from \"../../common/component\";\nimport {z} from \"zod\";\n\nexport interface MomentMarkerHandleStyle extends MarkerHandleStyle {\n markerSymbolSize: number\n}\n\nexport interface MomentMarkerHandleConfig extends MarkerHandleConfig<MomentMarkerHandleStyle> {\n\n}\n\nconst markerHandleConfigDefault: Partial<MomentMarkerHandleConfig> = {\n editable: true,\n style: {\n ...MARKER_HANDLE_STYLE_DEFAULT,\n markerSymbolSize: 20,\n }\n}\n\nexport class MomentMarkerHandle extends BaseMarkerHandle<MomentMarkerHandleConfig, MomentMarkerHandleStyle> {\n\n constructor(config: ComponentConfigStyleComposed<MomentMarkerHandleConfig>, markerLane: MarkerLane, timeline: Timeline) {\n super({\n ...markerHandleConfigDefault,\n ...config,\n style: {\n ...markerHandleConfigDefault.style,\n ...config.style,\n },\n }, markerLane, timeline);\n }\n\n protected createSymbol(): Konva.Shape {\n switch (this.style.markerSymbolType) {\n case 'triangle':\n let diagonal = Decimal.sqrt(2).mul(this.style.markerSymbolSize).toNumber();\n let halfDiagonal = diagonal / 2;\n return new Konva.Line({\n points: [\n -halfDiagonal, 0,\n halfDiagonal, 0,\n 0, halfDiagonal\n ],\n fill: this.style.color,\n closed: true,\n offsetY: halfDiagonal / 2,\n })\n case 'circle':\n return new Konva.Circle({\n fill: this.style.color,\n radius: this.style.markerSymbolSize / 2\n })\n case 'square':\n return new Konva.Rect({\n fill: this.style.color,\n width: this.style.markerSymbolSize,\n height: this.style.markerSymbolSize,\n rotation: 45,\n offsetX: this.style.markerSymbolSize / 2,\n offsetY: this.style.markerSymbolSize / 2,\n })\n default:\n throw Error('Unknown type');\n }\n }\n}\n\nexport interface MomentMarkerStyle extends MarkerStyle {\n\n}\n\nexport interface MomentMarkerConfig extends MarkerConfig<MomentObservation, MomentMarkerStyle> {\n\n}\n\nconst markerConfigDefault: Partial<MomentMarkerConfig> = {\n description: '',\n editable: true,\n style: {\n ...MARKER_STYLE_DEFAULT\n }\n}\n\nexport class MomentMarker extends BaseMarker<MomentObservation, MomentMarkerConfig, MomentMarkerStyle, MomentMarkerChangeEvent> {\n private markerHandle: MomentMarkerHandle;\n\n constructor(config: ComponentConfigStyleComposed<MomentMarkerConfig>) {\n super({\n ...markerConfigDefault,\n ...config,\n style: {\n ...markerConfigDefault.style,\n ...config.style,\n },\n });\n\n this.observation.time = z.coerce.number()\n .min(0)\n .parse(this.observation.time);\n }\n\n protected createCanvasNode(): Konva.Group {\n super.createCanvasNode();\n\n this.initMarkerHandle();\n\n return this.group;\n }\n\n protected afterCanvasNodeInit() {\n super.afterCanvasNodeInit();\n\n this.styleAdapter.onChange$.subscribe((style) => {\n this.initMarkerHandle();\n })\n }\n\n private initMarkerHandle() {\n if (this.markerHandle) {\n this.markerHandle.destroy();\n this.markerHandle = void 0;\n }\n\n let x = this.timeline.timeToTimelinePosition(this.observation.time);\n\n this.markerHandle = new MomentMarkerHandle({\n x: x,\n editable: this.editable,\n style: {\n color: this.style.color,\n markerRenderType: this.style.renderType,\n markerSymbolType: this.style.symbolType,\n }\n }, this.markerLane, this.timeline);\n\n this.markerHandle.onDragEnd = (markerHandleGroup) => {\n if (this.editable) {\n let newTime = this.timeline.timelinePositionToTime(markerHandleGroup.x());\n this.setTimeObservation({\n ...this.observation,\n time: newTime\n })\n }\n }\n\n this.group.add(this.markerHandle.initCanvasNode());\n }\n\n onChange() {\n this.settlePosition();\n\n let event: MomentMarkerChangeEvent = {\n timeObservation: this.observation\n }\n\n this.onChange$.next(event)\n }\n\n onMeasurementsChange() {\n super.onMeasurementsChange();\n this.markerHandle.onMeasurementsChange();\n this.settlePosition()\n }\n\n settlePosition() {\n this.markerHandle.setPosition({\n ...this.markerHandle.getPosition(),\n x: this.timeline.timeToTimelinePosition(this.observation.time)\n })\n }\n\n setEditable(editable: boolean) {\n super.setEditable(editable);\n }\n\n}\n","import {GenericMarker} from \"./marker\";\nimport Konva from \"konva\";\nimport {BaseTimelineLane, TimelaneLaneConfig, TIMELINE_LANE_STYLE_DEFAULT, TimelineLaneStyle} from \"../timeline-lane\";\nimport {Constants} from \"../../constants\";\nimport {MarkerLaneApi} from \"../../api/marker-lane-api\";\nimport {ComponentConfigStyleComposed} from \"../../common/component\";\nimport {PeriodMarker, PeriodMarkerConfig} from \"./period-marker\";\nimport {MomentMarker, MomentMarkerConfig} from \"./moment-marker\";\nimport {Subject, takeUntil} from \"rxjs\";\nimport {MarkerFocusEvent} from \"../../types\";\n\nexport interface HasMarkerLane {\n setMarkerLane(markerLane: MarkerLane): void;\n}\n\nexport interface MarkerLaneStyle extends TimelineLaneStyle {\n\n}\n\nconst styleDefault: MarkerLaneStyle = {\n ...TIMELINE_LANE_STYLE_DEFAULT\n}\n\nexport interface MarkerLaneConfig extends TimelaneLaneConfig<MarkerLaneStyle> {\n\n}\n\nexport class MarkerLane extends BaseTimelineLane<MarkerLaneConfig, MarkerLaneStyle> implements MarkerLaneApi {\n // region konva\n protected markersGroup: Konva.Group;\n // endregion\n\n private markers: GenericMarker[];\n private markersMap: Map<string, GenericMarker>;\n\n private markerInFocus: GenericMarker;\n\n public readonly onMarkerFocus$: Subject<MarkerFocusEvent> = new Subject<MarkerFocusEvent>();\n\n constructor(config: ComponentConfigStyleComposed<MarkerLaneConfig>) {\n super({\n ...config,\n style: {\n ...styleDefault,\n ...config.style\n }\n });\n\n this.markers = [];\n this.markersMap = new Map<string, GenericMarker>();\n }\n\n protected createCanvasNode(): Konva.Group {\n super.createCanvasNode();\n\n // set position and dimension to whole timecoded timeline\n this.markersGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT,\n ...this.timeline.getTimecodedGroupDimension(),\n });\n\n this.timeline.addToTimecodedMarkersGroup(this.markersGroup);\n\n return this.bodyGroup;\n }\n\n protected settleLayout() {\n super.settleLayout();\n\n let horizontalMeasurement = this.timeline.getTimecodedGroupHorizontalMeasurement();\n\n [this.markersGroup].forEach(node => {\n node.width(horizontalMeasurement.width)\n })\n\n if (this.markers) {\n this.markers.forEach(marker => {\n marker.onMeasurementsChange();\n })\n }\n }\n\n destroy() {\n super.destroy();\n this.markersGroup.destroy();\n }\n\n clearContent() {\n this.removeAllMarkers();\n this.markers = [];\n this.markersMap = new Map<string, GenericMarker>();\n this.markersGroup.destroyChildren();\n }\n\n createMomentMarker(config: MomentMarkerConfig): MomentMarker {\n return this.addMarker(new MomentMarker(config)) as MomentMarker;\n }\n\n createPeriodMarker(config: PeriodMarkerConfig): PeriodMarker {\n return this.addMarker(new PeriodMarker(config)) as PeriodMarker;\n }\n\n addMarker(marker: GenericMarker): GenericMarker {\n if (!this.isInitialized()) {\n throw new Error('MarkerLane not initalized. Maybe you forgot to add MarkerLane to Timeline?')\n }\n\n if (this.markersMap.has(marker.getId())) {\n throw new Error(`Marker with id=${marker.getId()} already exists`)\n }\n\n marker.setMarkerLane(this);\n marker.setTimeline(this.timeline);\n\n marker.onClick$.pipe(takeUntil(this.onDestroy$)).subscribe((event) => {\n this.focusMarker(marker.getId());\n })\n\n marker.onMouseEnter$.pipe(takeUntil(this.onDestroy$)).subscribe((event) => {\n this.focusMarker(marker.getId());\n })\n\n // marker.onMouseLeave$.pipe(takeUntil(this.onDestroy$)).subscribe((event) => {\n // this.focusMarker(marker.getId());\n // })\n\n this.markers.push(marker);\n this.markersMap.set(marker.getId(), marker);\n this.markersGroup.add(marker.initCanvasNode())\n\n return marker;\n }\n\n removeAllMarkers() {\n if (this.markers) {\n this.markers.forEach(marker => {\n this.removeMarker(marker.getId());\n })\n }\n }\n\n removeMarker(id: string) {\n let marker = this.getMarker(id);\n if (marker) {\n this.markers.splice(this.markers.findIndex(p => p.getId() === marker.getId()), 1);\n this.markersMap.delete(marker.getId());\n marker.destroy();\n }\n }\n\n getMarker(id: string): GenericMarker {\n return this.markersMap.get(id);\n }\n\n getMarkers(): GenericMarker[] {\n return this.markers;\n }\n\n focusMarker(id: string) {\n let marker = this.getMarker(id);\n if (marker) {\n this.moveToTop(marker);\n this.markerInFocus = marker;\n this.onMarkerFocus$.next({\n marker: marker\n })\n }\n }\n\n getMarkerInFocus(): GenericMarker {\n return this.markerInFocus;\n }\n\n private moveToTop(marker: GenericMarker) {\n if (marker) {\n this.markersGroup.moveToTop();\n marker.getCanvasNode().moveToTop();\n }\n }\n\n}\n","export class ColorUtil {\n static randomHexColor(): string {\n let color = `#${Math.floor(Math.random() * 16777215).toString(16)}`;\n // console.log(color)\n return color;\n }\n}","import Konva from \"konva\";\nimport Decimal from \"decimal.js\";\nimport {Constants} from \"../constants\";\nimport {ColorUtil} from \"./color-util\";\n\nexport class ShapeUtil {\n static createGoldenRatioWedge(config: {\n x: number,\n y: number,\n height: number,\n color: string\n }): Konva.Line {\n let b = new Decimal(config.height).div(Constants.GOLDEN_RATIO + 1).toDecimalPlaces(2).toNumber();\n let a = config.height - b;\n let halfWidth = a / 2;\n return new Konva.Line({\n points: [\n config.x - halfWidth, config.y,\n config.x + halfWidth, config.y,\n config.x + halfWidth, config.y + a,\n config.x, config.y + a + b,\n config.x - halfWidth, config.y + a,\n ],\n fill: config.color,\n stroke: config.color,\n closed: true,\n listening: false\n })\n }\n\n static createTriangle(config: {\n x: number,\n y: number,\n height: number,\n color: string\n }): Konva.Line {\n let halfWidth = config.height / 2;\n return new Konva.Line({\n points: [\n config.x - halfWidth, config.y,\n config.x + halfWidth, config.y,\n config.x, config.y + config.height,\n ],\n fill: config.color,\n closed: true,\n listening: false\n })\n }\n\n static createEventCatcher(config: Konva.RectConfig = {}) {\n return new Konva.Rect({\n ...Constants.POSITION_TOP_LEFT,\n opacity: 0,\n listening: true,\n ...config,\n });\n }\n\n static createDebugRect() {\n return new Konva.Rect({\n ...Constants.POSITION_TOP_LEFT,\n width: 100,\n height: 100,\n fill: ColorUtil.randomHexColor(),\n opacity: 1,\n });\n }\n}","'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n const pattern = '[object FormData]';\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) ||\n toString.call(thing) === pattern ||\n (isFunction(thing.toString) && thing.toString() === pattern)\n );\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n if (reducer(descriptor, name, obj) !== false) {\n reducedDescriptors[name] = descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n value = +value;\n return Number.isFinite(value) ? value : defaultValue;\n}\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length|0]\n }\n\n return str;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst isStandardBrowserEnv = (() => {\n let product;\n if (typeof navigator !== 'undefined' && (\n (product = navigator.product) === 'ReactNative' ||\n product === 'NativeScript' ||\n product === 'NS')\n ) {\n return false;\n }\n\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n})();\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\n const isStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n isStandardBrowserEnv,\n isStandardBrowserWebWorkerEnv,\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\nconst DEFAULT_CONTENT_TYPE = {\n 'Content-Type': undefined\n};\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n if (!hasJSONContentType) {\n return data;\n }\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nfunction isValidHeaderName(str) {\n return /^[-_a-zA-Z]+$/.test(str.trim());\n}\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\nutils.freezeMethods(AxiosHeaders.prototype);\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.isStandardBrowserEnv ?\n\n// Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n const cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n// Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })();\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.isStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })();\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","'use strict';\n\nimport utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport cookies from './../helpers/cookies.js';\nimport buildURL from './../helpers/buildURL.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport isURLSameOrigin from './../helpers/isURLSameOrigin.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport speedometer from '../helpers/speedometer.js';\n\nfunction progressEventReducer(listener, isDownloadStream) {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e\n };\n\n data[isDownloadStream ? 'download' : 'upload'] = true;\n\n listener(data);\n };\n}\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n let requestData = config.data;\n const requestHeaders = AxiosHeaders.from(config.headers).normalize();\n const responseType = config.responseType;\n let onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData) && (platform.isStandardBrowserEnv || platform.isStandardBrowserWebWorkerEnv)) {\n requestHeaders.setContentType(false); // Let the browser set it\n }\n\n let request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password));\n }\n\n const fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (platform.isStandardBrowserEnv) {\n // Add xsrf header\n const xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath))\n && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\n\n if (xsrfValue) {\n requestHeaders.set(config.xsrfHeaderName, xsrfValue);\n }\n }\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(config.onUploadProgress));\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(fullPath);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if(fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n if((adapter = utils.isString(nameOrAdapter) ? knownAdapters[nameOrAdapter.toLowerCase()] : nameOrAdapter)) {\n break;\n }\n }\n\n if (!adapter) {\n if (adapter === false) {\n throw new AxiosError(\n `Adapter ${nameOrAdapter} is not supported by the environment`,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n throw new Error(\n utils.hasOwnProp(knownAdapters, nameOrAdapter) ?\n `Adapter '${nameOrAdapter}' is not available in the build` :\n `Unknown adapter '${nameOrAdapter}'`\n );\n }\n\n if (!utils.isFunction(adapter)) {\n throw new TypeError('adapter is not a function');\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? thing.toJSON() : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","export const VERSION = \"1.3.3\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer !== undefined) {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n let contextHeaders;\n\n // Flatten headers\n contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n contextHeaders && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","import axios, {AxiosResponse} from \"axios\";\n\nexport function httpGet<T>(url: string): Promise<AxiosResponse<T, any>> {\n return axios.get<T>(url);\n}","'use strict';\n\n/**\n * See spec: https://www.w3.org/TR/webvtt1/#file-structure\n */\n\nfunction ParserError (message, error) {\n this.message = message;\n this.error = error;\n}\n\nParserError.prototype = Object.create(Error.prototype);\n\nconst TIMESTAMP_REGEXP = /([0-9]+)?:?([0-9]{2}):([0-9]{2}\\.[0-9]{2,3})/;\n\nfunction parse (input, options) {\n if (!options) {\n options = {};\n }\n\n const { meta = false, strict = true } = options;\n\n if (typeof input !== 'string') {\n throw new ParserError('Input must be a string');\n }\n\n input = input.trim();\n input = input.replace(/\\r\\n/g, '\\n');\n input = input.replace(/\\r/g, '\\n');\n\n const parts = input.split('\\n\\n');\n const header = parts.shift();\n\n if (!header.startsWith('WEBVTT')) {\n throw new ParserError('Must start with \"WEBVTT\"');\n }\n\n const headerParts = header.split('\\n');\n\n const headerComments = headerParts[0].replace('WEBVTT', '');\n\n if (headerComments.length > 0\n && (headerComments[0] !== ' ' && headerComments[0] !== '\\t')\n ) {\n throw new ParserError('Header comment must start with space or tab');\n }\n\n // nothing of interests, return early\n if (parts.length === 0 && headerParts.length === 1) {\n return { valid: true, strict, cues: [], errors: [] };\n }\n\n if (!meta && headerParts.length > 1 && headerParts[1] !== '') {\n throw new ParserError('Missing blank line after signature');\n }\n\n const { cues, errors } = parseCues(parts, strict);\n\n if (strict && errors.length > 0) {\n throw errors[0];\n }\n\n const headerMeta = meta ? parseMeta(headerParts) : null;\n\n const result = { valid: errors.length === 0, strict, cues, errors };\n\n if (meta) {\n result.meta = headerMeta;\n }\n\n return result;\n}\n\nfunction parseMeta (headerParts) {\n const meta = {};\n headerParts.slice(1).forEach(header => {\n const splitIdx = header.indexOf(':');\n const key = header.slice(0, splitIdx).trim();\n const value = header.slice(splitIdx + 1).trim();\n meta[key] = value;\n });\n return Object.keys(meta).length > 0 ? meta : null;\n}\n\nfunction parseCues (cues, strict) {\n const errors = [];\n\n const parsedCues = cues\n .map((cue, i) => {\n try {\n return parseCue(cue, i, strict);\n } catch (e) {\n errors.push(e);\n return null;\n }\n })\n .filter(Boolean);\n\n return {\n cues: parsedCues,\n errors\n };\n}\n\n/**\n * Parse a single cue block.\n *\n * @param {array} cue Array of content for the cue\n * @param {number} i Index of cue in array\n *\n * @returns {object} cue Cue object with start, end, text and styles.\n * Null if it's a note\n */\nfunction parseCue (cue, i, strict) {\n let identifier = '';\n let start = 0;\n let end = 0.01;\n let text = '';\n let styles = '';\n\n // split and remove empty lines\n const lines = cue.split('\\n').filter(Boolean);\n\n if (lines.length > 0 && lines[0].trim().startsWith('NOTE')) {\n return null;\n }\n\n if (lines.length === 1 && !lines[0].includes('-->')) {\n throw new ParserError(`Cue identifier cannot be standalone (cue #${i})`);\n }\n\n if (lines.length > 1 &&\n !(lines[0].includes('-->') || lines[1].includes('-->'))) {\n const msg = `Cue identifier needs to be followed by timestamp (cue #${i})`;\n throw new ParserError(msg);\n }\n\n if (lines.length > 1 && lines[1].includes('-->')) {\n identifier = lines.shift();\n }\n\n const times = typeof lines[0] === 'string' && lines[0].split(' --> ');\n\n if (times.length !== 2 ||\n !validTimestamp(times[0]) ||\n !validTimestamp(times[1])) {\n\n throw new ParserError(`Invalid cue timestamp (cue #${i})`);\n }\n\n start = parseTimestamp(times[0]);\n end = parseTimestamp(times[1]);\n\n if (strict) {\n if (start > end) {\n throw new ParserError(`Start timestamp greater than end (cue #${i})`);\n }\n\n if (end <= start) {\n throw new ParserError(`End must be greater than start (cue #${i})`);\n }\n }\n\n if (!strict && end < start) {\n throw new ParserError(\n `End must be greater or equal to start when not strict (cue #${i})`\n );\n }\n\n // TODO better style validation\n styles = times[1].replace(TIMESTAMP_REGEXP, '').trim();\n\n lines.shift();\n\n text = lines.join('\\n');\n\n if (!text) {\n return false;\n }\n\n return { identifier, start, end, text, styles };\n}\n\nfunction validTimestamp (timestamp) {\n return TIMESTAMP_REGEXP.test(timestamp);\n}\n\nfunction parseTimestamp (timestamp) {\n const matches = timestamp.match(TIMESTAMP_REGEXP);\n let secs = parseFloat(matches[1] || 0) * 60 * 60; // hours\n secs += parseFloat(matches[2]) * 60; // mins\n secs += parseFloat(matches[3]);\n // secs += parseFloat(matches[4]);\n return secs;\n}\n\nmodule.exports = { ParserError, parse };\n","'use strict';\n\n/**\n * See spec: https://www.w3.org/TR/webvtt1/#file-structure\n */\n\nfunction CompilerError (message, error) {\n this.message = message;\n this.error = error;\n}\n\nCompilerError.prototype = Object.create(Error.prototype);\n\nfunction compile (input) {\n\n if (!input) {\n throw new CompilerError('Input must be non-null');\n }\n\n if (typeof input !== 'object') {\n throw new CompilerError('Input must be an object');\n }\n\n if (Array.isArray(input)) {\n throw new CompilerError('Input cannot be array');\n }\n\n if (!input.valid) {\n throw new CompilerError('Input must be valid');\n }\n\n let output = 'WEBVTT\\n';\n\n if (input.meta) {\n if (typeof input.meta !== 'object' || Array.isArray(input.meta)) {\n throw new CompilerError('Metadata must be an object');\n }\n\n Object.entries(input.meta).forEach((i) => {\n if (typeof i[1] !== 'string') {\n throw new CompilerError(`Metadata value for \"${i[0]}\" must be string`);\n }\n\n output += `${i[0]}: ${i[1]}\\n`;\n });\n }\n\n let lastTime = null;\n\n input.cues.forEach((cue, index) => {\n if (lastTime && lastTime > cue.start) {\n throw new CompilerError(`Cue number ${index} is not in chronological`\n + ' order');\n }\n\n lastTime = cue.start;\n\n output += '\\n';\n output += compileCue(cue);\n output += '\\n';\n });\n\n return output;\n}\n\n/**\n * Compile a single cue block.\n *\n * @param {array} cue Array of content for the cue\n *\n * @returns {object} cue Cue object with start, end, text and styles.\n * Null if it's a note\n */\nfunction compileCue (cue) {\n // TODO: check for malformed JSON\n if (typeof cue !== 'object') {\n throw new CompilerError('Cue malformed: not of type object');\n }\n\n if (typeof cue.identifier !== 'string' &&\n typeof cue.identifier !== 'number' &&\n cue.identifier !== null) {\n throw new CompilerError(`Cue malformed: identifier value is not a string.\n ${JSON.stringify(cue)}`);\n }\n\n if (isNaN(cue.start)) {\n throw new CompilerError(`Cue malformed: null start value.\n ${JSON.stringify(cue)}`);\n }\n\n if (isNaN(cue.end)) {\n throw new CompilerError(`Cue malformed: null end value.\n ${JSON.stringify(cue)}`);\n }\n\n if (cue.start >= cue.end) {\n throw new CompilerError(`Cue malformed: start timestamp greater than end\n ${JSON.stringify(cue)}`);\n }\n\n if (typeof cue.text !== 'string') {\n throw new CompilerError(`Cue malformed: null text value.\n ${JSON.stringify(cue)}`);\n }\n\n if (typeof cue.styles !== 'string') {\n throw new CompilerError(`Cue malformed: null styles value.\n ${JSON.stringify(cue)}`);\n }\n\n let output = '';\n\n if (cue.identifier.length > 0) {\n output += `${cue.identifier}\\n`;\n }\n\n const startTimestamp = convertTimestamp(cue.start);\n const endTimestamp = convertTimestamp(cue.end);\n\n output += `${startTimestamp} --> ${endTimestamp}`;\n output += cue.styles ? ` ${cue.styles}` : '';\n output += `\\n${cue.text}`;\n\n return output;\n}\n\nfunction convertTimestamp (time) {\n const hours = pad(calculateHours(time), 2);\n const minutes = pad(calculateMinutes(time), 2);\n const seconds = pad(calculateSeconds(time), 2);\n const milliseconds = pad(calculateMs(time), 3);\n return `${hours}:${minutes}:${seconds}.${milliseconds}`;\n}\n\nfunction pad (num, zeroes) {\n let output = `${num}`;\n\n while (output.length < zeroes) {\n output = `0${ output }`;\n }\n\n return output;\n}\n\nfunction calculateHours (time) {\n return Math.floor(time / 60 / 60);\n}\n\nfunction calculateMinutes (time) {\n return (Math.floor(time / 60) % 60);\n}\n\nfunction calculateSeconds (time) {\n return Math.floor((time) % 60);\n}\n\nfunction calculateMs (time) {\n return Math.floor((time % 1).toFixed(4) * 1000);\n}\n\nmodule.exports = { CompilerError, compile };\n","'use strict';\n\nconst parse = require('./parser').parse;\n\nfunction segment (input, segmentLength) {\n segmentLength = segmentLength || 10;\n\n const parsed = parse(input);\n const segments = [];\n\n let cues = [];\n let queuedCue = null;\n let currentSegmentDuration = 0;\n let totalSegmentsDuration = 0;\n\n /**\n * One pass segmenting of cues\n */\n parsed.cues.forEach((cue, i) => {\n const firstCue = i === 0;\n const lastCue = i === parsed.cues.length - 1;\n const start = cue.start;\n const end = cue.end;\n const nextStart = lastCue ? Infinity : parsed.cues[i + 1].start;\n const cueLength = firstCue ? end : end - start;\n const silence = firstCue ? 0 : (start - parsed.cues[i - 1].end);\n\n currentSegmentDuration = currentSegmentDuration + cueLength + silence;\n\n debug('------------');\n debug(`Cue #${i}, segment #${segments.length + 1}`);\n debug(`Start ${start}`);\n debug(`End ${end}`);\n debug(`Length ${cueLength}`);\n debug(`Total segment duration = ${totalSegmentsDuration}`);\n debug(`Current segment duration = ${currentSegmentDuration}`);\n debug(`Start of next = ${nextStart}`);\n\n // if there's a boundary cue queued, push and clear queue\n if (queuedCue) {\n cues.push(queuedCue);\n currentSegmentDuration += queuedCue.end - totalSegmentsDuration;\n queuedCue = null;\n }\n\n cues.push(cue);\n\n // if a cue passes a segment boundary, it appears in both\n let shouldQueue = nextStart - end < segmentLength &&\n silence < segmentLength &&\n currentSegmentDuration > segmentLength;\n\n if (shouldSegment(totalSegmentsDuration, segmentLength, nextStart,\n silence)) {\n\n const duration = segmentDuration(lastCue, end, segmentLength,\n currentSegmentDuration,\n totalSegmentsDuration);\n\n segments.push({ duration, cues });\n\n totalSegmentsDuration += duration;\n currentSegmentDuration = 0;\n cues = [];\n } else {\n shouldQueue = false;\n }\n\n if (shouldQueue) {\n queuedCue = cue;\n }\n });\n\n return segments;\n}\n\nfunction shouldSegment (total, length, nextStart, silence) {\n\n // this is stupid, but gets one case fixed...\n const x = alignToSegmentLength(silence, length);\n const nextCueIsInNextSegment = silence <= length ||\n x + total < nextStart;\n\n return nextCueIsInNextSegment && nextStart - total >= length;\n}\n\nfunction segmentDuration (lastCue, end, length, currentSegment, totalSegments) {\n let duration = length;\n\n if (currentSegment > length) {\n duration = alignToSegmentLength(currentSegment - length, length);\n }\n\n // make sure the last cue covers the whole time of the cues\n if (lastCue) {\n duration = parseFloat((end - totalSegments).toFixed(2));\n } else {\n duration = Math.round(duration);\n }\n\n return duration;\n}\n\nfunction alignToSegmentLength (n, segmentLength) {\n n += segmentLength - n % segmentLength;\n return n;\n}\n\nconst debugging = false;\n\n/* istanbul ignore next */\nfunction debug (m) {\n if (debugging) {\n console.log(m);\n }\n}\n\nmodule.exports = { segment };\n","'use strict';\n\nconst segment = require('./segmenter').segment;\n\nfunction hlsSegment (input, segmentLength, startOffset) {\n\n if (typeof startOffset === 'undefined') {\n startOffset = '900000';\n }\n\n const segments = segment(input, segmentLength);\n\n const result = [];\n segments.forEach((seg, i) => {\n\n const content = `WEBVTT\nX-TIMESTAMP-MAP=MPEGTS:${startOffset},LOCAL:00:00:00.000\n\n${printableCues(seg.cues)}\n`;\n const filename = generateSegmentFilename(i);\n result.push({ filename, content });\n });\n return result;\n}\n\nfunction hlsSegmentPlaylist (input, segmentLength) {\n\n const segmented = segment(input, segmentLength);\n\n const printable = printableSegments(segmented);\n const longestSegment = Math.round(findLongestSegment(segmented));\n\n const template = `#EXTM3U\n#EXT-X-TARGETDURATION:${longestSegment}\n#EXT-X-VERSION:3\n#EXT-X-MEDIA-SEQUENCE:0\n#EXT-X-PLAYLIST-TYPE:VOD\n${printable}\n#EXT-X-ENDLIST\n`;\n return template;\n}\n\nfunction pad (num, n) {\n const padding = '0'.repeat(Math.max(0, n - num.toString().length));\n\n return `${padding}${num}`;\n}\n\nfunction generateSegmentFilename (index) {\n return `${index}.vtt`;\n}\n\nfunction printableSegments (segments) {\n const result = [];\n segments.forEach((seg, i) => {\n result.push(`#EXTINF:${seg.duration.toFixed(5)},\n${generateSegmentFilename(i)}`);\n });\n\n return result.join('\\n');\n}\n\nfunction findLongestSegment (segments) {\n let max = 0;\n segments.forEach((seg) => {\n if (seg.duration > max) {\n max = seg.duration;\n }\n });\n\n return max;\n}\n\nfunction printableCues (cues) {\n const result = [];\n cues.forEach((cue) => {\n result.push(printableCue(cue));\n });\n\n return result.join('\\n\\n');\n}\n\nfunction printableCue (cue) {\n const printable = [];\n\n if (cue.identifier) {\n printable.push(cue.identifier);\n }\n\n const start = printableTimestamp(cue.start);\n const end = printableTimestamp(cue.end);\n\n const styles = cue.styles ? `${cue.styles}` : '';\n\n // always add a space after end timestamp, otherwise JWPlayer will not\n // handle cues correctly\n printable.push(`${start} --> ${end} ${styles}`);\n\n printable.push(cue.text);\n\n return printable.join('\\n');\n}\n\nfunction printableTimestamp (timestamp) {\n const ms = (timestamp % 1).toFixed(3);\n timestamp = Math.round(timestamp - ms);\n const hours = Math.floor(timestamp / 3600);\n const mins = Math.floor((timestamp - (hours * 3600)) / 60);\n const secs = timestamp - (hours * 3600) - (mins * 60);\n\n // TODO hours aren't required by spec, but we include them, should be config\n const hourString = `${pad(hours, 2)}:`;\n return `${hourString}${pad(mins, 2)}:${pad(secs, 2)}.${pad(ms * 1000, 3)}`;\n}\n\nmodule.exports = { hlsSegment, hlsSegmentPlaylist };\n","'use strict';\n\nconst parse = require('./lib/parser').parse;\nconst compile = require('./lib/compiler').compile;\nconst segment = require('./lib/segmenter').segment;\nconst hls = require('./lib/hls');\n\nmodule.exports = { parse, compile, segment, hls };\n","import {from, map, Observable} from \"rxjs\";\nimport {httpGet} from \"../http\";\nimport {OmakaseVttCue, OmakaseVttFile} from \"../types\";\nimport webvtt from 'node-webvtt';\n\nexport interface VttCueParsed {\n identifier: string;\n start: number;\n end: number;\n text: string;\n styles: string;\n}\n\nexport interface VttFileMetaParsed {\n kind: string;\n language: string;\n}\n\nexport interface VttFileParsed {\n valid: any\n meta: VttFileMetaParsed;\n cues: VttCueParsed[];\n}\n\nexport abstract class BaseOmakaseVttFile<T extends OmakaseVttCue> implements OmakaseVttFile<T> {\n protected url: string;\n protected cues: Map<number, T> = new Map<number, T>();\n protected cuesKeysSorted: number[] = [];\n\n protected constructor(url: string) {\n this.url = url;\n }\n\n fetch(): Observable<boolean> {\n return from(httpGet<string>(this.getUrl())).pipe(map(result => {\n let vttFileText = result.data;\n\n try {\n let vttFileParsed: VttFileParsed = webvtt.parse(vttFileText, {strict: true, meta: true})\n\n vttFileParsed.cues.forEach(parsedCue => {\n let cue = this.mapCue(parsedCue);\n this.cues.set(cue.startTime, cue);\n this.cuesKeysSorted.push(cue.startTime);\n })\n\n this.cuesKeysSorted.sort((a, b) => {\n return a - b;\n });\n\n return true;\n } catch (e) {\n // TODO error handling\n console.error(e);\n return false;\n }\n }))\n }\n\n protected abstract mapCue(vttCueParsed: VttCueParsed): T;\n\n getUrl() {\n return this.url;\n }\n\n hasCues() {\n return this.cues && this.cues.size > 0;\n }\n\n findCue(time: number): T {\n let cues = this.findCues(time, time);\n if (cues && cues.length === 1) {\n return cues[0];\n } else {\n return void 0;\n }\n }\n\n findCues(startTime: number, endTime: number): T[] {\n let startIndex = this.findCueIndex(startTime);\n let endIndex = this.findCueIndex(endTime);\n if (endIndex === -1) {\n return [];\n }\n return this.cuesKeysSorted.slice(startIndex, endIndex + 1)\n .map(startTime => this.cues.get(startTime));\n }\n\n getCues(): T[] {\n return [...this.cues.values()];\n }\n\n protected findCueIndex(time: number): number {\n let startIndex = 0;\n let endIndex = this.cuesKeysSorted.length - 1;\n while (startIndex <= endIndex) {\n const mid = Math.floor((startIndex + endIndex) / 2);\n if (this.cuesKeysSorted[mid] === time) {\n return mid;\n } else if (this.cuesKeysSorted[mid] < time) {\n startIndex = mid + 1;\n } else {\n endIndex = mid - 1;\n }\n }\n if (endIndex === -1) {\n endIndex = 0;\n }\n return endIndex;\n }\n}\n","import {BaseOmakaseVttFile, VttCueParsed} from \"./vtt-file\";\nimport {SubtitlesVttCue} from \"../types\";\nimport {map, Observable} from \"rxjs\";\nimport Decimal from \"decimal.js\";\n\nexport class SubtitlesVttFile extends BaseOmakaseVttFile<SubtitlesVttCue> {\n\n protected constructor(url: string) {\n super(url);\n }\n\n static create(url: string): Observable<SubtitlesVttFile> {\n let instance = new SubtitlesVttFile(url);\n return instance.fetch().pipe(map(result => {\n return instance;\n }))\n }\n\n protected mapCue(vttCueParsed: VttCueParsed): SubtitlesVttCue {\n return {\n id: vttCueParsed.identifier,\n startTime: new Decimal(vttCueParsed.start).toDecimalPlaces(3).toNumber(),\n endTime: new Decimal(vttCueParsed.end).toDecimalPlaces(3).toNumber(),\n text: vttCueParsed.text\n }\n }\n\n}\n","import {BaseComponent, ComponentConfig, ComponentConfigStyleComposed} from \"../../common/component\";\nimport Konva from \"konva\";\nimport {Dimension, HasRectMeasurement, HorizontalMeasurement, OnMeasurementsChange, Position, RectMeasurement} from \"../../common/measurement\";\nimport {Comparable, OmakaseTextTrackCue} from \"../../types\";\nimport {WithOptionalPartial} from \"../../types/types\";\nimport {SubtitlesLane} from \"./subtitles-lane\";\nimport {takeUntil} from \"rxjs\";\n\nexport interface SubtitlesLaneItemStyle {\n height: number;\n fill: string;\n opacity: number;\n visible: boolean;\n}\n\nexport interface SubtitlesLaneItemConfig extends ComponentConfig<SubtitlesLaneItemStyle> {\n textTrackCue: OmakaseTextTrackCue;\n x: number;\n width: number;\n listening?: boolean;\n}\n\nconst configDefault: Partial<SubtitlesLaneItemConfig> = {\n listening: true,\n style: {\n height: 20,\n fill: 'rgba(255,73,145)',\n opacity: 1,\n visible: true,\n }\n}\n\nexport class SubtitlesLaneItem extends BaseComponent<SubtitlesLaneItemConfig, SubtitlesLaneItemStyle, Konva.Group> implements OnMeasurementsChange, HasRectMeasurement, Comparable<SubtitlesLaneItem> {\n private x: number;\n private width: number;\n private listening: boolean;\n\n // region konva\n private group: Konva.Group;\n private backgroundRect: Konva.Rect;\n // endregion\n\n private textTrackCue: OmakaseTextTrackCue;\n\n private subtitlesLane: SubtitlesLane;\n\n constructor(config: ComponentConfigStyleComposed<SubtitlesLaneItemConfig>, subtitlesLane: SubtitlesLane) {\n super({\n ...configDefault,\n ...config,\n style: {\n ...configDefault.style,\n ...config.style,\n },\n });\n\n this.textTrackCue = this.config.textTrackCue;\n this.x = this.config.x;\n this.width = this.config.width;\n this.listening = this.config.listening;\n\n this.subtitlesLane = subtitlesLane;\n\n this.subtitlesLane.onSettleLayout$.pipe(takeUntil(this.onDestroy$)).subscribe(() => {\n let currentMeasurement = this.subtitlesLane.resolveItemHorizontalMeasurement(this.getTextTrackCue());\n this.setHorizontalMeasurement(currentMeasurement)\n })\n }\n\n protected createCanvasNode(): Konva.Group {\n this.group = new Konva.Group({\n x: this.x,\n y: 0,\n width: this.width,\n height: this.style.height,\n visible: this.style.visible,\n listening: this.listening\n });\n\n this.backgroundRect = new Konva.Rect({\n x: 0,\n y: 0,\n width: this.group.width(),\n height: this.group.height(),\n fill: this.style.fill,\n opacity: this.style.opacity,\n perfectDrawEnabled: false,\n shadowForStrokeEnabled: false,\n hitStrokeWidth: 0\n })\n\n this.group.add(this.backgroundRect)\n\n return this.group;\n }\n\n onMeasurementsChange() {\n this.backgroundRect.size(this.group.getSize());\n }\n\n setPosition(position: WithOptionalPartial<Position, 'y'>) {\n this.x = position.x;\n if (this.isInitialized()) {\n this.group.position({\n x: this.x,\n y: 0\n })\n }\n }\n\n getPosition(): Position {\n return this.group.getPosition();\n }\n\n getDimension(): Dimension {\n return this.group.getSize();\n }\n\n getRect(): RectMeasurement {\n return {\n ...this.getPosition(),\n ...this.getDimension()\n };\n }\n\n getHorizontalMeasurement(): HorizontalMeasurement {\n return {\n x: this.x,\n width: this.width\n }\n }\n\n setHorizontalMeasurement(horizontalMeasurement: HorizontalMeasurement) {\n this.x = horizontalMeasurement.x;\n this.width = horizontalMeasurement.width;\n\n if (this.isInitialized()) {\n this.group.setAttrs({\n x: this.x,\n width: this.width\n })\n }\n this.onMeasurementsChange();\n }\n\n setVisible(visible: boolean) {\n this.style = {\n visible: visible\n };\n if (this.isInitialized()) {\n this.group.visible(visible);\n }\n }\n\n getTextTrackCue(): OmakaseTextTrackCue {\n return this.textTrackCue;\n }\n\n setTextTrackCue(textTrackCue: OmakaseTextTrackCue) {\n this.textTrackCue = textTrackCue;\n }\n\n compareTo(o: SubtitlesLaneItem): number {\n return this.textTrackCue && o ? (\n this.getTextTrackCue().id === o.getTextTrackCue().id\n && this.getTextTrackCue().startTime === o.getTextTrackCue().startTime\n && this.getTextTrackCue().endTime === o.getTextTrackCue().endTime\n ) ? 0 : -1 : -1;\n }\n}\n","import {BaseTimelineLane, TimelaneLaneConfig, TIMELINE_LANE_STYLE_DEFAULT, TimelineLaneStyle} from \"../timeline-lane\";\nimport Konva from \"konva\";\nimport {ShapeUtil} from \"../../util/shape-util\";\nimport {Constants} from \"../../constants\";\nimport {catchError, debounceTime, first, map, Observable, of, Subject, take, takeUntil} from \"rxjs\";\nimport {SubtitlesVttFile} from \"../../track/subtitles-vtt-file\";\nimport {HorizontalMeasurement, Position} from \"../../common/measurement\";\nimport {OmakaseTextTrackCue, SubtitlesVttCue} from \"../../types\";\nimport {SubtitlesLaneItem} from \"./subtitles-lane-item\";\nimport {ComponentConfigStyleComposed} from \"../../common/component\";\n\nexport interface SubtitlesLaneStyle extends TimelineLaneStyle {\n paddingTop: number;\n paddingBottom: number;\n subtitlesLaneItemOpacity: number;\n subtitlesLaneItemFill: string;\n}\n\nconst styleDefault: SubtitlesLaneStyle = {\n ...TIMELINE_LANE_STYLE_DEFAULT,\n height: 40,\n paddingTop: 0,\n paddingBottom: 0,\n subtitlesLaneItemOpacity: 0.9,\n subtitlesLaneItemFill: 'rgba(255,73,145)'\n}\n\nexport interface SubtitlesLaneConfig extends TimelaneLaneConfig<SubtitlesLaneStyle> {\n subtitlesVttUrl: string;\n}\n\nexport class SubtitlesLane extends BaseTimelineLane<SubtitlesLaneConfig, SubtitlesLaneStyle> {\n // region config\n private _subtitlesVttUrl: string;\n // endregion\n\n // region components\n protected readonly subtitlesLaneItemsMap: Map<number, SubtitlesLaneItem> = new Map<number, SubtitlesLaneItem>();\n // endregion\n\n // region konva\n protected timecodedGroup: Konva.Group;\n protected timecodedEventCatcher: Konva.Rect;\n protected subtitlesLaneItemsGroup: Konva.Group;\n // endregion\n\n private subtitlesVttFile: SubtitlesVttFile;\n\n readonly onSettleLayout$: Subject<void> = new Subject<void>();\n\n constructor(config: ComponentConfigStyleComposed<SubtitlesLaneConfig>) {\n super({\n ...config,\n style: {\n ...styleDefault,\n ...config.style\n }\n });\n\n this._subtitlesVttUrl = this.config.subtitlesVttUrl;\n }\n\n protected createCanvasNode(): Konva.Group {\n super.createCanvasNode();\n\n this.timecodedGroup = new Konva.Group({\n ...this.timelinePosition,\n width: this.timeline.getTimecodedGroupDimension().width,\n height: this.bodyGroup.height()\n });\n\n this.timecodedEventCatcher = ShapeUtil.createEventCatcher({\n width: this.timecodedGroup.width(),\n height: this.timecodedGroup.height()\n });\n\n this.subtitlesLaneItemsGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT,\n y: this.style.paddingTop,\n width: this.timecodedGroup.width(),\n height: this.timecodedGroup.height() - (this.style.paddingTop + this.style.paddingBottom)\n });\n\n this.timecodedGroup.add(this.timecodedEventCatcher);\n this.timecodedGroup.add(this.subtitlesLaneItemsGroup);\n\n this.timeline.addToTimecodedSubtitlesGroup(this.timecodedGroup);\n\n return this.bodyGroup;\n }\n\n protected settleLayout() {\n super.settleLayout();\n\n this.timecodedGroup.setAttrs({\n ...this.timelinePosition,\n })\n\n let horizontalMeasurement = this.timeline.getTimecodedGroupHorizontalMeasurement();\n [this.timecodedGroup, this.timecodedEventCatcher, this.subtitlesLaneItemsGroup].forEach(node => {\n node.width(horizontalMeasurement.width)\n })\n\n this.onSettleLayout$.next();\n }\n\n protected afterCanvasNodeInit() {\n super.afterCanvasNodeInit();\n\n this.fetchAndCreateSubtitles();\n }\n\n clearContent() {\n this.subtitlesVttFile = void 0;\n this.clearItems();\n }\n\n private clearItems(){\n this.subtitlesLaneItemsMap.forEach(p => p.destroy())\n this.subtitlesLaneItemsMap.clear()\n this.subtitlesLaneItemsGroup.destroyChildren();\n }\n\n private createEntities() {\n if (!this.isVttLoaded()) {\n return;\n }\n\n this.clearItems();\n\n let cues = this.subtitlesVttFile.getCues();\n\n cues.forEach(cue => {\n let horizontalMeasurement = this.resolveItemHorizontalMeasurement(cue);\n\n let subtitlesLaneItem = new SubtitlesLaneItem({\n ...horizontalMeasurement,\n textTrackCue: cue,\n style: {\n height: this.subtitlesLaneItemsGroup.height(),\n fill: this.style.subtitlesLaneItemFill,\n opacity: this.style.subtitlesLaneItemOpacity\n }\n }, this);\n this.subtitlesLaneItemsMap.set(cue.startTime, subtitlesLaneItem);\n this.subtitlesLaneItemsGroup.add(subtitlesLaneItem.initCanvasNode());\n })\n }\n\n resolveItemHorizontalMeasurement(textTrackCue: OmakaseTextTrackCue): HorizontalMeasurement {\n let startTimeX = this.timeline.constrainTimelinePosition(this.timeline.timeToTimelinePosition(textTrackCue.startTime));\n let endTimeX = this.timeline.constrainTimelinePosition(this.timeline.timeToTimelinePosition(textTrackCue.endTime));\n return {\n x: startTimeX,\n width: endTimeX - startTimeX\n // width: new Decimal(endTimeX - startTimeX).ceil().toNumber()\n }\n }\n\n private fetchAndCreateSubtitles() {\n this.fetchSubtitlesVttFile(this._subtitlesVttUrl).pipe(take(1)).subscribe((subtitlesVttFile) => {\n this.subtitlesVttFile = subtitlesVttFile;\n this.createEntities();\n })\n }\n\n private fetchSubtitlesVttFile(url: string): Observable<SubtitlesVttFile> {\n if (url) {\n return SubtitlesVttFile.create(url).pipe(map(subtitlesVttFile => {\n return subtitlesVttFile;\n }), catchError((err, caught) => {\n return of(void 0);\n }))\n } else {\n return of(void 0);\n }\n }\n\n isVttLoaded(): boolean {\n return !!this.subtitlesVttFile;\n }\n\n get subtitlesVttUrl(): string {\n return this._subtitlesVttUrl;\n }\n\n set subtitlesVttUrl(value: string) {\n this._subtitlesVttUrl = value;\n this.clearContent();\n this.fetchAndCreateSubtitles();\n }\n}\n","import {BaseComponent, ComponentConfig, ComponentConfigStyleComposed, composeConfigAndDefault} from \"../../common/component\";\nimport Konva from \"konva\";\nimport {Dimension, HasRectMeasurement, OnMeasurementsChange, Position, RectMeasurement} from \"../../common/measurement\";\nimport {Comparable, ThumbnailEvent, ThumbnailVttCue} from \"../../types\";\nimport {Constants} from \"../../constants\";\nimport {Subject} from \"rxjs\";\n\nexport interface ThumbnailStyle {\n x: number;\n y: number;\n width: number;\n height: number;\n stroke: string;\n strokeWidth: number;\n visible: boolean;\n}\n\nexport interface ThumbnailConfig extends ComponentConfig<ThumbnailStyle> {\n listening: boolean;\n}\n\nconst configDefault: ThumbnailConfig = {\n listening: false,\n style: {\n ...Constants.POSITION_TOP_LEFT,\n ...Constants.DIMENSION_ZERO,\n stroke: 'rgba(255,73,145)',\n strokeWidth: 5,\n visible: false\n }\n}\n\nexport class Thumbnail extends BaseComponent<ThumbnailConfig, ThumbnailStyle, Konva.Group> implements OnMeasurementsChange, HasRectMeasurement, Comparable<Thumbnail> {\n private listening: boolean;\n private thumbnailVttCue: ThumbnailVttCue;\n\n // region konva\n private group: Konva.Group;\n private backgroundRect: Konva.Rect;\n private image: Konva.Image;\n // endregion\n\n public readonly onClick$: Subject<ThumbnailEvent> = new Subject<ThumbnailEvent>();\n public readonly onMouseOver$: Subject<ThumbnailEvent> = new Subject<ThumbnailEvent>();\n public readonly onMouseMove$: Subject<ThumbnailEvent> = new Subject<ThumbnailEvent>();\n public readonly onMouseOut$: Subject<ThumbnailEvent> = new Subject<ThumbnailEvent>();\n public readonly onMouseLeave$: Subject<ThumbnailEvent> = new Subject<ThumbnailEvent>();\n\n constructor(config: Partial<ComponentConfigStyleComposed<ThumbnailConfig>>) {\n super(composeConfigAndDefault(config, configDefault));\n\n this.listening = this.config.listening;\n }\n\n protected createCanvasNode(): Konva.Group {\n this.group = new Konva.Group({\n x: this.style.x,\n y: this.style.y,\n width: this.style.width,\n height: this.style.height,\n visible: this.style.visible,\n listening: this.listening\n });\n\n this.backgroundRect = new Konva.Rect({\n x: 0,\n y: 0,\n width: this.group.width(),\n height: this.group.height(),\n strokeWidth: this.style.strokeWidth,\n stroke: this.style.stroke\n })\n\n this.group.add(this.backgroundRect)\n\n return this.group;\n }\n\n protected afterCanvasNodeInit() {\n this.group.on('click', (event) => {\n this.onClick$.next({\n thumbnail: this\n })\n })\n\n this.group.on('mouseover', (event) => {\n this.onMouseOver$.next({\n thumbnail: this\n })\n })\n\n this.group.on('mousemove', (event) => {\n this.onMouseMove$.next({\n thumbnail: this\n })\n })\n\n this.group.on('mouseout', (event) => {\n this.onMouseOut$.next({\n thumbnail: this\n })\n })\n\n this.group.on('mouseleave', (event) => {\n this.onMouseLeave$.next({\n thumbnail: this\n })\n })\n }\n\n destroy() {\n super.destroy();\n }\n\n onMeasurementsChange() {\n this.backgroundRect.size(this.group.getSize());\n }\n\n setImage(image: Konva.Image) {\n if (this.image) {\n this.image.destroy();\n }\n\n this.image = image;\n\n this.style = {\n width: image.width(),\n height: image.height()\n }\n\n this.group.setAttrs({\n ...this.image.getSize()\n });\n\n this.backgroundRect.setAttrs({\n ...this.image.getSize()\n });\n\n this.group.add(this.image);\n }\n\n setVisible(visible: boolean) {\n this.style = {\n visible: visible\n }\n if (this.isInitialized()) {\n this.group.visible(visible);\n }\n }\n\n setPosition(position: Position) {\n this.style = {\n ...position\n }\n if (this.isInitialized()) {\n this.group.position(position)\n }\n }\n\n setVisibleAndX(visible: boolean, x: number) {\n this.style = {\n visible: visible,\n x: x\n }\n\n if (this.isInitialized()) {\n this.group.setAttrs({\n visible: visible,\n x: x\n })\n }\n }\n\n getPosition(): Position {\n return this.group.getPosition();\n }\n\n getDimension(): Dimension {\n return this.group.getSize();\n }\n\n setDimension(dimension: Dimension) {\n this.style = {\n ...dimension\n }\n if (this.isInitialized()) {\n this.group.size(dimension);\n }\n this.onMeasurementsChange();\n }\n\n getRect(): RectMeasurement {\n return {\n ...this.getPosition(),\n ...this.getDimension()\n };\n }\n\n getThumbnailVttCue(): ThumbnailVttCue {\n return this.thumbnailVttCue;\n }\n\n setThumbnailVttCue(thumbnailVttCue: ThumbnailVttCue) {\n this.thumbnailVttCue = thumbnailVttCue;\n }\n\n getImage(): Konva.Image {\n return this.image;\n }\n\n compareTo(o: Thumbnail): number {\n return this.thumbnailVttCue && o ? this.thumbnailVttCue.url === o.thumbnailVttCue.url ? 0 : -1 : -1;\n }\n}\n","import {BaseOmakaseVttFile, VttCueParsed} from \"./vtt-file\";\nimport {ThumbnailVttCue} from \"../types\";\nimport {map, Observable} from \"rxjs\";\nimport Decimal from \"decimal.js\";\n\nexport class ThumbnailVttFile extends BaseOmakaseVttFile<ThumbnailVttCue> {\n\n protected constructor(url: string) {\n super(url);\n }\n\n static create(url: string): Observable<ThumbnailVttFile> {\n let instance = new ThumbnailVttFile(url);\n return instance.fetch().pipe(map(result => {\n return instance;\n }))\n }\n\n protected mapCue(vttCueParsed: VttCueParsed): ThumbnailVttCue {\n return {\n id: vttCueParsed.identifier,\n startTime: new Decimal(vttCueParsed.start).toDecimalPlaces(3).toNumber(),\n endTime: new Decimal(vttCueParsed.end).toDecimalPlaces(3).toNumber(),\n text: vttCueParsed.text,\n url: this.resolveThumbnailUrl(vttCueParsed)\n }\n }\n\n private resolveThumbnailUrl(vttCueParsed: VttCueParsed): string {\n return this.isUrlAbsolute(vttCueParsed.text) ? vttCueParsed.text : this.createThumbnailUrlFromRelativeUrl(vttCueParsed.text);\n }\n\n private createThumbnailUrlFromRelativeUrl(relativePath: string) {\n if (this.url.lastIndexOf('/') > 2) {\n return `${this.url.substring(0, this.url.lastIndexOf('/'))}/${relativePath}`\n } else {\n // cannot resolve absolute url :(\n return relativePath;\n }\n }\n\n private isUrlAbsolute(url: string) {\n const regex = /^((http|https)\\:\\/\\/([a-zA-Z0-9\\-]+))$/ig;\n return regex.test(url);\n }\n\n}\n","import Konva from \"konva\";\nimport {map, Observable, Subject} from \"rxjs\";\n\nexport class ImageUtil {\n\n static createKonvaImage(url: string): Observable<Konva.Image> {\n return new Observable<Konva.Image>(o$ => {\n Konva.Image.fromURL(url, (image) => {\n o$.next(image);\n o$.complete();\n }, (error) => {\n console.error(error)\n o$.error(error);\n });\n })\n }\n\n static createKonvaImageSizedByWidth(url: string, width: number): Observable<Konva.Image> {\n return ImageUtil.createKonvaImage(url).pipe(map(image => {\n image.setAttrs({\n width: width,\n height: ImageUtil.calculateProportionalHeight(width, image)\n })\n return image;\n }))\n }\n\n static createKonvaImageSizedByHeight(url: string, height: number): Observable<Konva.Image> {\n return ImageUtil.createKonvaImage(url).pipe(map(image => {\n image.setAttrs({\n width: ImageUtil.calculateProportionalWidth(height, image),\n height: height\n })\n return image;\n }))\n }\n\n public static calculateProportionalHeight(width: number, image: Konva.Image): number {\n return (width * image.getAttrs().image.naturalHeight) / image.getAttrs().image.naturalWidth;\n }\n\n public static calculateProportionalWidth(height: number, image: Konva.Image): number {\n return (height * image.getAttrs().image.naturalWidth) / image.getAttrs().image.naturalHeight;\n }\n\n}","import Konva from \"konva\";\nimport {Thumbnail} from \"./thumbnail\";\nimport {catchError, debounceTime, forkJoin, map, Observable, of, Subject, switchMap, take, takeUntil} from \"rxjs\";\nimport {BaseTimelineLane, TimelaneLaneConfig, TIMELINE_LANE_STYLE_DEFAULT, TimelineLaneStyle} from \"../timeline-lane\";\nimport {ThumbnailVttFile} from \"../../track/thumbnail-vtt-file\";\nimport {ImageUtil} from \"../../util/image-util\";\nimport {Position} from \"../../common/measurement\";\nimport {ThumbnailEvent, ThumbnailVttCue} from \"../../types\";\nimport {ShapeUtil} from \"../../util/shape-util\";\nimport {ComponentConfigStyleComposed} from \"../../common/component\";\n\nexport interface ThumbnailLaneStyle extends TimelineLaneStyle {\n thumbnailHeight: number;\n thumbnailStroke: string;\n thumbnailStrokeWidth: number;\n\n thumbnailHoverScale: number;\n thumbnailHoverStroke: string;\n thumbnailHoverStrokeWidth: number;\n}\n\nconst styleDefault: ThumbnailLaneStyle = {\n ...TIMELINE_LANE_STYLE_DEFAULT,\n thumbnailHeight: 40,\n thumbnailStroke: 'rgba(121,0,255,0.9)',\n thumbnailStrokeWidth: 0,\n\n thumbnailHoverScale: 1.5,\n thumbnailHoverStroke: 'rgba(0,255,188,0.9)',\n thumbnailHoverStrokeWidth: 5\n}\n\nexport interface ThumbnailLaneConfig extends TimelaneLaneConfig<ThumbnailLaneStyle> {\n thumbnailVttUrl: string;\n}\n\nexport class ThumbnailLane extends BaseTimelineLane<ThumbnailLaneConfig, ThumbnailLaneStyle> {\n // region config\n private _thumbnailVttUrl: string;\n // endregion\n\n // region components\n protected readonly thumbnailsMap: Map<number, Thumbnail> = new Map<number, Thumbnail>();\n protected readonly thumbnailsVisibleSet: Set<number> = new Set<number>();\n\n protected thumbnailHover: Thumbnail;\n // endregion\n\n // region konva\n protected timecodedGroup: Konva.Group;\n protected timecodedEventCatcher: Konva.Rect;\n protected thumbnailsGroup: Konva.Group;\n // endregion\n\n private thumbnailVttFile: ThumbnailVttFile;\n private thumbnailWidth: number;\n\n private readonly onSettleLayout$: Subject<void> = new Subject<void>();\n private eventStreamBreaker$ = new Subject<void>();\n\n public readonly onClick$: Subject<ThumbnailEvent> = new Subject<ThumbnailEvent>();\n\n constructor(config: ComponentConfigStyleComposed<ThumbnailLaneConfig>) {\n super({\n ...config,\n style: {\n ...styleDefault,\n ...config.style\n }\n });\n\n this._thumbnailVttUrl = this.config.thumbnailVttUrl;\n }\n\n protected createCanvasNode(): Konva.Group {\n super.createCanvasNode();\n\n this.timecodedGroup = new Konva.Group({\n ...this.timelinePosition,\n width: this.timeline.getTimecodedGroupDimension().width,\n height: this.bodyGroup.height()\n });\n\n this.timecodedEventCatcher = ShapeUtil.createEventCatcher({\n width: this.timecodedGroup.width(),\n height: this.timecodedGroup.height()\n });\n\n this.thumbnailsGroup = new Konva.Group({\n x: 0,\n y: this.style.height / 2 - this.style.thumbnailHeight / 2,\n width: this.timecodedGroup.width(),\n height: this.timecodedGroup.height()\n });\n\n this.timecodedGroup.add(this.timecodedEventCatcher);\n this.timecodedGroup.add(this.thumbnailsGroup);\n\n this.timeline.addToTimecodedThumbnailsGroup(this.timecodedGroup);\n\n this.thumbnailHover = new Thumbnail({\n style: {\n visible: false,\n stroke: this.style.thumbnailHoverStroke,\n strokeWidth: this.style.thumbnailHoverStrokeWidth\n }\n })\n\n this.timeline.addToTimecodedSurfaceGroup(this.thumbnailHover.initCanvasNode());\n\n return this.bodyGroup;\n }\n\n protected settleLayout() {\n super.settleLayout();\n\n this.timecodedGroup.setAttrs({\n ...this.timelinePosition\n })\n\n let horizontalMeasurement = this.timeline.getTimecodedGroupHorizontalMeasurement();\n [this.timecodedGroup, this.timecodedEventCatcher, this.thumbnailsGroup].forEach(node => {\n node.width(horizontalMeasurement.width)\n })\n\n this.onSettleLayout$.next();\n }\n\n protected afterCanvasNodeInit() {\n super.afterCanvasNodeInit();\n\n this.fetchAndCreateThumbnails();\n\n this.onSettleLayout$.pipe(takeUntil(this.onDestroy$)).subscribe(() => {\n this.hideThumbnailHover();\n this.adjustThumbnails();\n })\n\n this.onSettleLayout$.pipe(takeUntil(this.onDestroy$)).pipe(debounceTime(100)).subscribe(() => {\n this.createAndAdjustThumbnails();\n })\n\n this.timecodedGroup.on('mouseout mouseleave', (event) => {\n // console.debug('ScrubberLane emited', event);\n this.hideThumbnailHover();\n })\n }\n\n onMeasurementsChange() {\n super.onMeasurementsChange();\n this.hideThumbnailHover();\n\n this.createAndAdjustThumbnails();\n }\n\n destroy() {\n super.destroy();\n this.timecodedGroup.destroy();\n this.thumbnailHover.destroy();\n this.fireEventStreamBreaker();\n }\n\n clearContent() {\n this.fireEventStreamBreaker();\n\n this.thumbnailVttFile = void 0;\n this.clearItems();\n }\n\n private clearItems(){\n this.thumbnailsMap.forEach(p => p.destroy())\n this.thumbnailsMap.clear()\n this.thumbnailsVisibleSet.clear()\n this.thumbnailsGroup.destroyChildren();\n }\n\n private fireEventStreamBreaker() {\n if (this.eventStreamBreaker$) {\n this.eventStreamBreaker$.next();\n this.eventStreamBreaker$.complete();\n }\n this.eventStreamBreaker$ = new Subject<void>();\n }\n\n private createAndAdjustThumbnails() {\n if (!this.isVttLoaded()) {\n return;\n }\n\n this.resolveVisibleTimestamps();\n this.thumbnailVttFile.getCues().forEach(cue => {\n let x = this.timeline.timeToTimelinePosition(cue.startTime);\n let visible = this.thumbnailsVisibleSet.has(cue.startTime);\n if (this.timeline.constrainTimelinePosition(x) === x) { // exclude thumbnails that don't fit on timeline, maybe timestamps are incorrect\n if (this.thumbnailsMap.has(cue.startTime)) {\n let thumbnail = this.thumbnailsMap.get(cue.startTime);\n if (thumbnail) {\n thumbnail.setVisibleAndX(visible, x)\n }\n } else {\n if (visible) {\n this.thumbnailsMap.set(cue.startTime, null); // this indicates that thumbnail started to load\n ImageUtil.createKonvaImageSizedByHeight(cue.url, this.style.thumbnailHeight).subscribe(image => {\n // use fresh visible status, maybe it has changed while waiting for response\n let mostRecentVisible = this.thumbnailsVisibleSet.has(cue.startTime);\n let thumbnail = this.createThumbnail(cue, image, mostRecentVisible);\n this.thumbnailsMap.set(cue.startTime, thumbnail);\n this.thumbnailsGroup.add(thumbnail.getCanvasNode());\n })\n }\n }\n }\n })\n }\n\n private adjustThumbnails() {\n if (!this.isVttLoaded()) {\n return;\n }\n\n this.resolveVisibleTimestamps();\n this.thumbnailsMap.forEach(thumbnail => {\n if (thumbnail) {\n let x = this.timeline.timeToTimelinePosition(thumbnail.getThumbnailVttCue().startTime);\n let visible = this.thumbnailsVisibleSet.has(thumbnail.getThumbnailVttCue().startTime);\n thumbnail.setVisibleAndX(visible, x);\n } else {\n // not loaded yet\n }\n })\n }\n\n private resolveVisibleTimestamps() {\n let lastThumbnailBoundary;\n let cues = this.thumbnailVttFile.getCues();\n cues.forEach(cue => {\n let x = this.timeline.timeToTimelinePosition(cue.startTime);\n if (this.timeline.constrainTimelinePosition(x) === x) { // exclude thumbnails that don't fit on timeline, maybe timestamps are incorrect\n let visible = lastThumbnailBoundary ? x >= (lastThumbnailBoundary) : true;\n if (visible) {\n lastThumbnailBoundary = x + this.thumbnailWidth;\n this.thumbnailsVisibleSet.add(cue.startTime);\n } else {\n this.thumbnailsVisibleSet.delete(cue.startTime);\n }\n }\n })\n }\n\n private createThumbnail(thumbnailVttCue: ThumbnailVttCue, image: Konva.Image, visible: boolean) {\n let x = this.timeline.timeToTimelinePosition(thumbnailVttCue.startTime);\n\n let thumbnail = new Thumbnail({\n listening: true,\n style: {\n x: x,\n y: 0,\n visible: visible,\n stroke: this.style.thumbnailStroke,\n strokeWidth: this.style.thumbnailStrokeWidth\n }\n })\n\n thumbnail.setThumbnailVttCue(thumbnailVttCue);\n\n thumbnail.initCanvasNode();\n thumbnail.setImage(image);\n\n\n thumbnail.onClick$.pipe(takeUntil(this.eventStreamBreaker$)).subscribe((event) => {\n this.onClick$.next(event);\n })\n\n thumbnail.onMouseOver$.pipe(takeUntil(this.eventStreamBreaker$)).subscribe((event) => {\n this.showThumbnailHover(event.thumbnail)\n })\n\n thumbnail.onMouseMove$.pipe(takeUntil(this.eventStreamBreaker$)).subscribe((event) => {\n this.showThumbnailHover(event.thumbnail)\n })\n\n thumbnail.onMouseOut$.pipe(takeUntil(this.eventStreamBreaker$)).subscribe((event) => {\n this.hideThumbnailHover();\n })\n\n thumbnail.onMouseLeave$.pipe(takeUntil(this.eventStreamBreaker$)).subscribe((event) => {\n this.hideThumbnailHover();\n })\n\n return thumbnail;\n }\n\n private showThumbnailHover(thumbnail: Thumbnail) {\n this.thumbnailHover.setVisible(true);\n if (this.thumbnailHover.compareTo(thumbnail) === 0) {\n // let position = this.resolveThumbnailPosition(this.thumbnailHover);\n let position = this.resolveThumbnailHoverPosition(thumbnail);\n this.thumbnailHover.setPosition(position)\n this.thumbnailHover.setVisible(true);\n } else {\n ImageUtil.createKonvaImageSizedByWidth(thumbnail.getThumbnailVttCue().url, thumbnail.getImage().width() * this.style.thumbnailHoverScale).subscribe(image => {\n this.thumbnailHover.setDimension(image.getSize());\n this.thumbnailHover.setImage(image);\n // this.thumbnailHover.setPosition(this.resolveThumbnailPosition(this.thumbnailHover))\n this.thumbnailHover.setPosition(this.resolveThumbnailHoverPosition(thumbnail))\n this.thumbnailHover.getCanvasNode().moveToTop();\n })\n }\n }\n\n private hideThumbnailHover() {\n if (this.thumbnailHover && this.thumbnailHover.style.visible) {\n this.thumbnailHover.setVisible(false);\n }\n }\n\n private resolveThumbnailHoverPosition(thumbnail: Thumbnail): Position {\n // let pointerPosition = this.timeline.getRelativePointerPosition();\n let timecodedRect = this.timeline.getTimecodedGroupRect();\n let thumbnailHoverImageSize = this.thumbnailHover.getImage().getSize();\n // let x = pointerPosition.x - imageSize.width / 2; // center thumbnail\n let x = thumbnail.getPosition().x + thumbnail.getDimension().width / 2 - thumbnailHoverImageSize.width / 2;\n let halfStroke = thumbnail.style.strokeWidth > 0 ? thumbnail.style.strokeWidth / 2 : 0;\n let xWithStroke = x - halfStroke;\n x = xWithStroke < 0 ? halfStroke : (x + thumbnailHoverImageSize.width + halfStroke) > timecodedRect.width ? (timecodedRect.width - thumbnailHoverImageSize.width - halfStroke) : x;\n let rect = this.getRect();\n let y = rect.y + this.thumbnailsGroup.y() + thumbnail.getDimension().height / 2 - this.thumbnailHover.getDimension().height / 2;\n return { x, y }\n }\n\n\n private fetchAndCreateThumbnails() {\n this.fetchThumbnailVttFile(this._thumbnailVttUrl, this.style.thumbnailHeight).pipe(take(1)).subscribe((result) => {\n if (result) {\n this.thumbnailVttFile = result.thumbnailVttFile;\n this.thumbnailWidth = result.thumbnailWidth;\n this.createAndAdjustThumbnails();\n }\n })\n }\n\n private fetchThumbnailVttFile(url: string, thumbnailHeight: number): Observable<{thumbnailVttFile: ThumbnailVttFile, thumbnailWidth: number}> {\n if (url) {\n return ThumbnailVttFile.create(url).pipe(switchMap(thumbnailVttFile => {\n let firstCue: ThumbnailVttCue = thumbnailVttFile.getCues()[0];\n return ImageUtil.createKonvaImageSizedByHeight(firstCue.url, thumbnailHeight).pipe(map(image => {\n let thumbnailWidth = image.getSize().width;\n return {\n thumbnailVttFile: thumbnailVttFile,\n thumbnailWidth: thumbnailWidth\n };\n }))\n }), catchError((err, caught) => {\n return of(void 0);\n }))\n } else {\n return of(void 0);\n }\n }\n\n isVttLoaded(): boolean {\n return !!this.thumbnailVttFile && !!this.thumbnailWidth;\n }\n\n getThumbnailVttFile(): ThumbnailVttFile {\n return this.thumbnailVttFile;\n }\n\n get thumbnailVttUrl(): string {\n return this._thumbnailVttUrl;\n }\n\n set thumbnailVttUrl(value: string) {\n this._thumbnailVttUrl = value;\n this.clearContent();\n this.fetchAndCreateThumbnails();\n }\n}\n","import {BaseOmakaseVttFile, VttCueParsed} from \"./vtt-file\";\nimport {AudioVttCue} from \"../types\";\nimport {map, Observable} from \"rxjs\";\nimport {z} from \"zod\";\nimport Decimal from \"decimal.js\";\n\nexport class AudioVttFile extends BaseOmakaseVttFile<AudioVttCue> {\n\n protected constructor(url: string) {\n super(url);\n }\n\n static create(url: string): Observable<AudioVttFile> {\n let instance = new AudioVttFile(url);\n return instance.fetch().pipe(map(result => {\n return instance;\n }))\n }\n\n protected mapCue(vttCueParsed: VttCueParsed): AudioVttCue {\n let splitted = vttCueParsed.text.split(',');\n\n let minSample = z.coerce.number()\n .min(-1)\n .max(0)\n .parse(splitted[0]);\n\n let maxSample = z.coerce.number()\n .min(0)\n .max(1)\n .parse(splitted[1]);\n\n let cue = {\n id: vttCueParsed.identifier,\n startTime: new Decimal(vttCueParsed.start).toDecimalPlaces(3).toNumber(),\n endTime: new Decimal(vttCueParsed.end).toDecimalPlaces(3).toNumber(),\n text: vttCueParsed.text,\n minSample: minSample,\n maxSample: maxSample\n }\n\n return cue;\n }\n\n}\n","import {BaseComponent, ComponentConfig, ComponentConfigStyleComposed} from \"../../common/component\";\nimport Konva from \"konva\";\nimport {Dimension, HasRectMeasurement, Position, RectMeasurement} from \"../../common/measurement\";\nimport {AudioVttCue} from \"../../types\";\nimport Decimal from \"decimal.js\";\nimport {WithOptionalPartial} from \"../../types/types\";\n\nexport interface AudioTrackLaneItemStyle {\n height: number;\n cornerRadius: number;\n opacity: number;\n visible: boolean;\n maxSampleFillLinearGradientColorStops: (number | string)[];\n minSampleFillLinearGradientColorStops: (number | string)[];\n}\n\nexport interface AudioTrackLaneItemConfig extends ComponentConfig<AudioTrackLaneItemStyle> {\n audioVttCue: AudioVttCue;\n x: number;\n width: number;\n listening?: boolean;\n}\n\nconst configDefault: Partial<AudioTrackLaneItemConfig> = {\n listening: false,\n style: {\n height: 20,\n cornerRadius: 20,\n opacity: 1,\n visible: true,\n maxSampleFillLinearGradientColorStops: [0, 'red', 0.2, 'yellow', 1, 'green'],\n minSampleFillLinearGradientColorStops: [0, 'green', 0.8, 'yellow', 1, 'red'],\n }\n}\n\nexport class AudioTrackLaneItem extends BaseComponent<AudioTrackLaneItemConfig, AudioTrackLaneItemStyle, Konva.Group> implements HasRectMeasurement {\n private x: number;\n private width: number;\n private listening: boolean;\n\n // region konva\n private group: Konva.Group;\n private maxSampleBar: Konva.Rect;\n private minSampleBar: Konva.Rect;\n // endregion\n\n private audioVttCue: AudioVttCue;\n\n constructor(config: ComponentConfigStyleComposed<AudioTrackLaneItemConfig>) {\n super({\n ...configDefault,\n ...config,\n style: {\n ...configDefault.style,\n ...config.style,\n },\n });\n\n this.audioVttCue = this.config.audioVttCue;\n this.x = this.config.x;\n this.width = this.config.width;\n this.listening = this.config.listening;\n }\n\n protected createCanvasNode(): Konva.Group {\n this.group = new Konva.Group({\n x: this.x,\n y: 0,\n width: this.width,\n height: this.style.height,\n visible: this.style.visible,\n listening: this.listening\n });\n\n let barMaxHeight = this.style.height / 2;\n let maxSampleBarHeight = this.resolveMaxSampleBarHeight();\n let minSampleBarHeight = this.resolveMinSampleBarHeight();\n\n this.maxSampleBar = new Konva.Rect({\n x: 0,\n width: this.group.width(),\n y: barMaxHeight - maxSampleBarHeight,\n height: maxSampleBarHeight,\n opacity: this.style.opacity,\n cornerRadius: [this.style.cornerRadius, this.style.cornerRadius, 0, 0],\n fillLinearGradientStartPoint: {x: 0, y: -(barMaxHeight - maxSampleBarHeight)},\n fillLinearGradientEndPoint: {x: 0, y: maxSampleBarHeight},\n fillLinearGradientColorStops: this.style.maxSampleFillLinearGradientColorStops,\n perfectDrawEnabled: false,\n shadowForStrokeEnabled: false,\n hitStrokeWidth: 0\n })\n\n this.minSampleBar = new Konva.Rect({\n x: 0,\n width: this.group.width(),\n y: barMaxHeight,\n height: minSampleBarHeight,\n opacity: this.style.opacity,\n cornerRadius: [0, 0, this.style.cornerRadius, this.style.cornerRadius],\n fillLinearGradientStartPoint: {x: 0, y: 0},\n fillLinearGradientEndPoint: {x: 0, y: barMaxHeight},\n fillLinearGradientColorStops: this.style.minSampleFillLinearGradientColorStops,\n perfectDrawEnabled: false,\n shadowForStrokeEnabled: false,\n hitStrokeWidth: 0\n })\n\n this.group.add(this.maxSampleBar)\n this.group.add(this.minSampleBar)\n\n return this.group;\n }\n\n private resolveMaxSampleBarHeight() {\n return new Decimal(this.audioVttCue.maxSample).mul(this.style.height / 2).toDecimalPlaces(2).toNumber()\n }\n\n private resolveMinSampleBarHeight() {\n return new Decimal(this.audioVttCue.minSample).abs().mul(this.style.height / 2).toDecimalPlaces(2).toNumber()\n }\n\n setPosition(position: WithOptionalPartial<Position, 'y'>) {\n this.x = position.x;\n if (this.isInitialized()) {\n this.group.position({\n x: this.x,\n y: 0\n })\n }\n }\n\n getPosition(): Position {\n return this.group.getPosition();\n }\n\n getDimension(): Dimension {\n return this.group.getSize();\n }\n\n getRect(): RectMeasurement {\n return {\n ...this.getPosition(),\n ...this.getDimension()\n };\n }\n\n getAudioVttCue(): AudioVttCue {\n return this.audioVttCue;\n }\n\n setAudioVttCue(audioVttCue: AudioVttCue) {\n this.audioVttCue = audioVttCue;\n\n let maxSampleBarHeight = this.resolveMaxSampleBarHeight();\n let minSampleBarHeight = this.resolveMinSampleBarHeight();\n\n this.minSampleBar.setAttrs({\n height: minSampleBarHeight,\n })\n\n this.maxSampleBar.setAttrs({\n y: this.style.height / 2 - maxSampleBarHeight,\n height: maxSampleBarHeight,\n fillLinearGradientStartPoint: {x: 0, y: -(this.style.height / 2 - maxSampleBarHeight)},\n fillLinearGradientEndPoint: {x: 0, y: maxSampleBarHeight},\n })\n }\n}\n","import {BaseTimelineLane, TimelaneLaneConfig, TIMELINE_LANE_STYLE_DEFAULT, TimelineLaneStyle} from \"../timeline-lane\";\nimport Konva from \"konva\";\nimport {ShapeUtil} from \"../../util/shape-util\";\nimport {Constants} from \"../../constants\";\nimport {catchError, combineLatest, debounceTime, map, Observable, of, Subject, take, takeUntil} from \"rxjs\";\nimport {AudioVttCue} from \"../../types\";\nimport {AudioVttFile} from \"../../track/audio-vtt-file\";\nimport {ComponentConfigStyleComposed} from \"../../common/component\";\nimport {AudioTrackLaneItem} from \"./audio-track-lane-item\";\nimport Decimal from \"decimal.js\";\n\nexport interface AudioTrackLaneStyle extends TimelineLaneStyle {\n paddingTop: number;\n paddingBottom: number;\n\n itemWidth: number;\n itemMinPadding: number;\n itemCornerRadius: number;\n maxSampleFillLinearGradientColorStops: (number | string)[];\n minSampleFillLinearGradientColorStops: (number | string)[];\n}\n\nconst styleDefault: AudioTrackLaneStyle = {\n ...TIMELINE_LANE_STYLE_DEFAULT,\n height: 40,\n paddingTop: 0,\n paddingBottom: 0,\n\n itemWidth: 5,\n itemMinPadding: 2,\n itemCornerRadius: 5,\n maxSampleFillLinearGradientColorStops: [0, 'red', 0.2, 'yellow', 1, 'green'],\n minSampleFillLinearGradientColorStops: [0, 'green', 0.8, 'yellow', 1, 'red'],\n\n}\n\nexport interface AudioTrackLaneConfig extends TimelaneLaneConfig<AudioTrackLaneStyle> {\n audioVttFileUrl: string;\n}\n\nexport class AudioTrackLane extends BaseTimelineLane<AudioTrackLaneConfig, AudioTrackLaneStyle> {\n // region config\n private _audioVttFileUrl: string;\n // endregion\n\n // region components\n protected readonly audioTrackLaneItemsMap: Map<number, AudioTrackLaneItem> = new Map<number, AudioTrackLaneItem>();\n // endregion\n\n // region konva\n protected timecodedGroup: Konva.Group;\n protected timecodedEventCatcher: Konva.Rect;\n protected audioTrackLaneItemsGroup: Konva.Group;\n // endregion\n\n private audioVttFile: AudioVttFile;\n\n private numOfInterpolations: number;\n private itemPadding: number;\n\n readonly onSettleLayout$: Subject<void> = new Subject<void>();\n\n constructor(config: ComponentConfigStyleComposed<AudioTrackLaneConfig>) {\n super({\n ...config,\n style: {\n ...styleDefault,\n ...config.style\n }\n });\n\n this._audioVttFileUrl = this.config.audioVttFileUrl;\n }\n\n protected createCanvasNode(): Konva.Group {\n super.createCanvasNode();\n\n this.timecodedGroup = new Konva.Group({\n ...this.timelinePosition,\n width: this.timeline.getTimecodedGroupDimension().width,\n height: this.bodyGroup.height()\n });\n\n this.timecodedEventCatcher = ShapeUtil.createEventCatcher({\n width: this.timecodedGroup.width(),\n height: this.timecodedGroup.height()\n });\n\n this.audioTrackLaneItemsGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT,\n y: this.style.paddingTop,\n width: this.timecodedGroup.width(),\n height: this.timecodedGroup.height() - (this.style.paddingTop + this.style.paddingBottom)\n });\n\n this.timecodedGroup.add(this.timecodedEventCatcher);\n this.timecodedGroup.add(this.audioTrackLaneItemsGroup);\n\n this.timeline.addToTimecodedAudioGroup(this.timecodedGroup);\n\n return this.bodyGroup;\n }\n\n protected settleLayout() {\n super.settleLayout();\n\n this.timecodedGroup.setAttrs({\n ...this.timelinePosition,\n })\n\n let horizontalMeasurement = this.timeline.getTimecodedGroupHorizontalMeasurement();\n [this.timecodedGroup, this.timecodedEventCatcher, this.audioTrackLaneItemsGroup].forEach(node => {\n node.width(horizontalMeasurement.width)\n })\n\n this.onSettleLayout$.next();\n }\n\n protected afterCanvasNodeInit() {\n super.afterCanvasNodeInit();\n\n this.fetchAndCreateAudioTrack();\n\n this.onSettleLayout$.pipe(takeUntil(this.onDestroy$)).subscribe(() => {\n this.settlePosition();\n })\n\n combineLatest([\n this.onSettleLayout$,\n this.timeline.onScroll$\n ]).pipe(takeUntil(this.onDestroy$), debounceTime(100)).subscribe(() => {\n this.settleAll();\n });\n }\n\n clearContent() {\n this.audioVttFile = void 0;\n this.clearItems();\n }\n\n private clearItems(){\n this.audioTrackLaneItemsMap.forEach(p => p.destroy())\n this.audioTrackLaneItemsMap.clear()\n this.audioTrackLaneItemsGroup.destroyChildren();\n }\n\n private getVisibleCues(): AudioVttCue[] {\n let timeRange = this.timeline.getVisibleTimeRange();\n let cues = this.audioVttFile.findCues(timeRange.start, timeRange.end);\n return cues;\n }\n\n private createEntities() {\n if (!this.isVttLoaded()) {\n return;\n }\n\n this.clearItems();\n\n let cues = this.getVisibleCues();\n\n let timecodedContainerWidth = this.timeline.getTimecodedContainerDimension().width;\n\n this.numOfInterpolations = new Decimal(timecodedContainerWidth + this.style.itemMinPadding)\n .div(this.style.itemWidth + this.style.itemMinPadding)\n .floor().toNumber()\n\n this.itemPadding = new Decimal(timecodedContainerWidth - this.numOfInterpolations * this.style.itemWidth)\n .div(this.numOfInterpolations - 1)\n .toNumber();\n\n let numOfCuesPerInterpolation = this.resolveNumOfCuesPerInterpolation(cues.length);\n\n let cuesInterpolations = this.resolveCuesInterpolations(cues, numOfCuesPerInterpolation)\n for (let i = 0; i < this.numOfInterpolations; i++) {\n let cue = cuesInterpolations.get(i);\n\n let itemPosition = this.resolveInterpolatedItemPosition(i);\n\n let audioTrackLaneItem = new AudioTrackLaneItem({\n x: itemPosition,\n width: this.style.itemWidth,\n audioVttCue: cue,\n style: {\n cornerRadius: this.style.itemCornerRadius,\n height: this.audioTrackLaneItemsGroup.height(),\n visible: true,\n maxSampleFillLinearGradientColorStops: this.style.maxSampleFillLinearGradientColorStops,\n minSampleFillLinearGradientColorStops: this.style.minSampleFillLinearGradientColorStops,\n }\n });\n\n this.audioTrackLaneItemsMap.set(i, audioTrackLaneItem);\n this.audioTrackLaneItemsGroup.add(audioTrackLaneItem.initCanvasNode());\n }\n }\n\n private resolveNumOfCuesPerInterpolation(cuesLength: number): number {\n return new Decimal(cuesLength).div(this.numOfInterpolations).floor().toNumber();\n }\n\n private resolveCuesInterpolations(cues: AudioVttCue[], numOfCuesPerInterpolation: number): Map<number, AudioVttCue> {\n let interpolatedCuesSurplus = cues.length - numOfCuesPerInterpolation * this.numOfInterpolations;\n let cuesInterpolations: Map<number, AudioVttCue> = new Map<number, AudioVttCue>();\n\n let sliceEndIndex = 0;\n for (let i = 0; i < this.numOfInterpolations; i++) {\n let interpolationLength = numOfCuesPerInterpolation + (i < interpolatedCuesSurplus ? 1 : 0)\n let sliceStartIndex = sliceEndIndex;\n sliceEndIndex = sliceStartIndex + interpolationLength;\n\n let cuesForInterpolation = cues.slice(sliceStartIndex, sliceEndIndex);\n let firstCue = cues[sliceStartIndex];\n let lastCue = cues[sliceEndIndex - 1];\n\n let minSampleSum = 0, maxSampleSum = 0;\n cuesForInterpolation.forEach(cue => {\n minSampleSum += cue.minSample;\n maxSampleSum += cue.maxSample;\n })\n\n let cue: AudioVttCue = {\n id: `${i}`,\n text: '',\n minSample: new Decimal(minSampleSum).div(interpolationLength).toDecimalPlaces(3).toNumber(),\n maxSample: new Decimal(maxSampleSum).div(interpolationLength).toDecimalPlaces(3).toNumber(),\n startTime: firstCue.startTime,\n endTime: lastCue.endTime\n }\n\n cuesInterpolations.set(i, cue);\n }\n return cuesInterpolations\n }\n\n private settleAll() {\n if (!this.isVttLoaded() || this.audioTrackLaneItemsMap.size < 1) {\n return;\n }\n\n let cues = this.getVisibleCues();\n let numOfCuesPerInterpolation = this.resolveNumOfCuesPerInterpolation(cues.length);\n let cuesInterpolations = this.resolveCuesInterpolations(cues, numOfCuesPerInterpolation)\n\n for (let i = 0; i < this.numOfInterpolations; i++) {\n let cue = cuesInterpolations.get(i);\n let audioTrackLaneItem = this.audioTrackLaneItemsMap.get(i);\n audioTrackLaneItem.setAudioVttCue(cue);\n audioTrackLaneItem.setPosition({\n x: this.resolveInterpolatedItemPosition(i)\n })\n }\n }\n\n private resolveInterpolatedItemPosition(itemIndex: number) {\n return Math.abs(this.timeline.getTimecodedGroupHorizontalMeasurement().x) + itemIndex * this.style.itemWidth + itemIndex * this.itemPadding;\n }\n\n private settlePosition() {\n if (!this.isVttLoaded() || this.audioTrackLaneItemsMap.size < 1) {\n return;\n }\n\n for (let i = 0; i < this.numOfInterpolations; i++) {\n let audioTrackLaneItem = this.audioTrackLaneItemsMap.get(i);\n let x = this.timeline.timeToTimelinePosition(audioTrackLaneItem.getAudioVttCue().startTime);\n audioTrackLaneItem.setPosition({ x })\n }\n }\n\n private fetchAndCreateAudioTrack() {\n this.fetchAudioTrackVttFile(this._audioVttFileUrl).pipe(take(1)).subscribe((audioVttFile) => {\n this.audioVttFile = audioVttFile;\n this.createEntities();\n })\n }\n\n private fetchAudioTrackVttFile(url: string): Observable<AudioVttFile> {\n if (url) {\n return AudioVttFile.create(url).pipe(map(audioTrackVttFile => {\n return audioTrackVttFile;\n }), catchError((err, caught) => {\n return of(void 0);\n }))\n } else {\n return of(void 0);\n }\n }\n\n private isVttLoaded(): boolean {\n return !!this.audioVttFile;\n }\n\n get audioVttFileUrl(): string {\n return this._audioVttFileUrl;\n }\n\n set audioVttFileUrl(value: string) {\n this._audioVttFileUrl = value;\n this.clearContent();\n this.fetchAndCreateAudioTrack();\n }\n}\n","import Konva from \"konva\";\nimport {IFrame} from \"konva/lib/types\";\n\nexport interface AnimateConf {\n layer: Konva.Layer,\n duration: number,\n from: number,\n to: number,\n onUpdateHandler: (frame: IFrame, value: number) => void,\n onCompleteHandler?: (frame: IFrame, value: number) => void\n}\n\nexport function animate(conf: AnimateConf) {\n if (conf.from === conf.to) {\n return;\n }\n\n let isRising = conf.from < conf.to;\n\n // we will always animate from 0 to maxValue\n let maxValue = isRising ? (conf.to - conf.from) : (conf.from - conf.to);\n\n let animation = new Konva.Animation((frame) => {\n let newValue = Konva.Easings.StrongEaseInOut(frame.time, 0, maxValue, conf.duration);\n\n if (newValue >= maxValue) {\n conf.onUpdateHandler(frame, conf.to); // trigger update on last possible value, which is conf.to\n animation.stop();\n if (conf.onCompleteHandler) {\n conf.onCompleteHandler(frame, conf.to);\n animation = null;\n }\n } else {\n let updatedValue = conf.from + newValue * (isRising ? 1 : -1);\n // console.log(updatedValue)\n\n conf.onUpdateHandler(frame, updatedValue);\n }\n\n }, conf.layer);\n\n animation.start();\n}\n","import {BaseComponent, ComponentConfig, ComponentConfigStyleComposed, composeConfigAndDefault} from \"../common/component\";\nimport Konva from \"konva\";\nimport Decimal from \"decimal.js\";\nimport {HasRectMeasurement, HorizontalMeasurement, OnMeasurementsChange, Position, RectMeasurement} from \"../common/measurement\";\nimport {animate} from \"../util/animation-util\";\nimport {ScrollbarScrollEvent, ScrollbarZoomEvent} from \"../types\";\nimport {Constants} from \"../constants\";\nimport {WindowUtil} from \"../util/window-util\";\nimport {filter, Subject, takeUntil} from \"rxjs\";\n\nexport interface ScrollableHorizontally {\n setHorizontalScrollPercent(percent: number): void;\n\n getHorizontalScrollPercent(): number;\n\n getScrollHandleHorizontalMeasurement(scrollbarWidth: number): HorizontalMeasurement;\n}\n\nexport interface ScrollbarStyle {\n height: number;\n backgroundFill: string;\n backgroundFillOpacity: number;\n handleBarFill: string;\n handleBarOpacity: number;\n handleOpacity: number;\n}\n\nexport interface ScrollbarConfig extends ComponentConfig<ScrollbarStyle> {\n x: number;\n y: number;\n width: number;\n zoomMax: number;\n scrollStepNumberOfDivisions: number;\n}\n\nconst configDefault: ScrollbarConfig = {\n ...Constants.POSITION_TOP_LEFT,\n width: 0,\n zoomMax: 1500,\n scrollStepNumberOfDivisions: 10,\n style: {\n height: 20,\n backgroundFill: '#000000',\n backgroundFillOpacity: 0.3,\n handleBarFill: '#01a6f0',\n handleBarOpacity: 1,\n handleOpacity: 1\n }\n}\n\nexport class Scrollbar extends BaseComponent<ScrollbarConfig, ScrollbarStyle, Konva.Group> implements OnMeasurementsChange, HasRectMeasurement {\n protected x: number;\n protected y: number;\n protected width: number;\n protected scrollStepNumberOfDivisions: number;\n protected zoomMax: number;\n\n protected minHandleBarWidth;\n\n // region konva\n private group: Konva.Group;\n private handleGroup: Konva.Group;\n private background: Konva.Rect;\n private handleBar: Konva.Rect;\n private leftZoomHandle: Konva.Circle;\n private rightZoomHandle: Konva.Circle;\n // endregion\n\n public readonly onScroll$: Subject<ScrollbarScrollEvent> = new Subject<ScrollbarScrollEvent>();\n public readonly onZoom$: Subject<ScrollbarZoomEvent> = new Subject<ScrollbarZoomEvent>();\n\n constructor(config: Partial<ComponentConfigStyleComposed<ScrollbarConfig>>) {\n super(composeConfigAndDefault(config, configDefault));\n\n this.x = this.config.x;\n this.y = this.config.y;\n this.width = this.config.width;\n this.zoomMax = this.config.zoomMax;\n this.scrollStepNumberOfDivisions = this.config.scrollStepNumberOfDivisions;\n }\n\n protected createCanvasNode(): Konva.Group {\n this.group = new Konva.Group({\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.style.height\n })\n\n this.background = new Konva.Rect({\n ...Constants.POSITION_TOP_LEFT,\n width: this.group.width(),\n height: this.style.height,\n fill: this.style.backgroundFill,\n opacity: this.style.backgroundFillOpacity\n });\n\n this.handleGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT,\n width: this.group.width(),\n height: this.style.height,\n });\n\n this.handleBar = new Konva.Rect({\n ...Constants.POSITION_TOP_LEFT,\n width: this.handleGroup.width(),\n height: this.style.height,\n fill: this.style.handleBarFill,\n opacity: this.style.handleBarOpacity,\n draggable: true\n });\n\n\n this.leftZoomHandle = new Konva.Circle({\n ...Constants.POSITION_TOP_LEFT,\n fill: this.style.handleBarFill,\n radius: this.style.height / 2,\n y: this.style.height / 2,\n opacity: this.style.handleOpacity,\n draggable: true\n });\n\n this.rightZoomHandle = new Konva.Circle({\n ...Constants.POSITION_TOP_LEFT,\n fill: this.style.handleBarFill,\n radius: this.style.height / 2,\n y: this.style.height / 2,\n opacity: this.style.handleOpacity,\n draggable: true\n });\n\n this.handleGroup.add(this.background);\n this.handleGroup.add(this.handleBar);\n\n this.group.add(this.background);\n this.group.add(this.handleGroup);\n\n this.handleGroup.add(this.leftZoomHandle)\n this.handleGroup.add(this.rightZoomHandle)\n\n return this.group;\n }\n\n protected afterCanvasNodeInit() {\n this.styleAdapter.onChange$.pipe(takeUntil(this.onDestroy$), filter(p => !!p)).subscribe((style) => {\n this.onStyleChange();\n })\n\n this.group.on('click', (event) => {\n this.clickScrollTo(this.group.getRelativePointerPosition().x);\n })\n\n this.handleBar.on('dragstart dragmove dragend', (event) => {\n let newPosition = this.handleBar.getPosition();\n let newX = this.getConstrainedHandleBarX(newPosition.x);\n this.handleBar.setAttrs({\n x: newX,\n y: 0\n })\n this.syncLeftRightHandles();\n\n if (this.handleBar.getRelativePointerPosition().x >= 0 && this.handleBar.getRelativePointerPosition().x <= this.handleBar.width()) {\n this.onScroll$.next({\n scrollPercent: this.getScrollHandlePercent()\n })\n }\n })\n\n let zoomInConfig = {\n scaleX: 1.5,\n scaleY: 1.5,\n duration: 0.1\n }\n\n let zoomOutConfig = {\n scaleX: 1,\n scaleY: 1,\n duration: 0.1\n }\n\n this.leftZoomHandle.on('mouseover', (event) => {\n this.leftZoomHandle.to({\n ...zoomInConfig\n })\n WindowUtil.cursor(\"ew-resize\")\n })\n\n this.leftZoomHandle.on('mouseout', (event) => {\n this.leftZoomHandle.to({\n ...zoomOutConfig\n })\n WindowUtil.cursor(\"default\")\n })\n\n this.rightZoomHandle.on('mouseover', (event) => {\n this.rightZoomHandle.to({\n ...zoomInConfig\n })\n WindowUtil.cursor(\"ew-resize\")\n })\n\n this.rightZoomHandle.on('mouseout', (event) => {\n this.rightZoomHandle.to({\n ...zoomOutConfig\n })\n WindowUtil.cursor(\"default\")\n })\n\n let constrainLeftHandleX = (wantedX: number): number => {\n let newX = wantedX;\n if (newX < 0) {\n newX = 0;\n } else if ((this.rightZoomHandle.x() - wantedX) <= this.minHandleBarWidth) {\n newX = this.rightZoomHandle.x() - this.minHandleBarWidth;\n }\n return newX;\n }\n\n this.leftZoomHandle.on('dragstart dragmove dragend', (event) => {\n let newPosition = this.leftZoomHandle.getPosition();\n let newX = constrainLeftHandleX(newPosition.x);\n this.leftZoomHandle.setAttrs({\n x: newX,\n y: this.style.height / 2\n })\n this.handleBar.setAttrs({\n x: newX,\n width: this.rightZoomHandle.x() - newX\n });\n this.onZoom$.next({\n zoomPercent: this.getZoomPercent()\n })\n })\n\n let constrainRightHandleX = (wantedX: number): number => {\n let newX = wantedX;\n let scrollbarWidth = this.group.width();\n if (newX > scrollbarWidth) {\n newX = scrollbarWidth;\n } else if ((wantedX - this.leftZoomHandle.x()) <= this.minHandleBarWidth) {\n newX = this.leftZoomHandle.x() + this.minHandleBarWidth;\n }\n return newX;\n }\n\n this.rightZoomHandle.on('dragstart dragmove dragend', (event) => {\n let newPosition = this.rightZoomHandle.getPosition();\n let newX = constrainRightHandleX(newPosition.x);\n this.rightZoomHandle.setAttrs({\n x: newX,\n y: this.style.height / 2\n })\n this.handleBar.setAttrs({\n width: newX - this.leftZoomHandle.x()\n });\n this.onZoom$.next({\n zoomPercent: this.getZoomPercent()\n })\n })\n }\n\n onMeasurementsChange() {\n this.group.width(this.width);\n this.background.width(this.group.width());\n this.handleGroup.width(this.group.width());\n this.minHandleBarWidth = this.calculateHandleBarWidthFromZoomRatioPercent(this.zoomMax);\n }\n\n onStyleChange() {\n this.group.setAttrs({\n height: this.style.height\n })\n\n this.background.setAttrs({\n height: this.style.height,\n fill: this.style.backgroundFill,\n opacity: this.style.backgroundFillOpacity\n })\n\n this.handleGroup.setAttrs({\n height: this.style.height,\n })\n\n this.handleBar.setAttrs({\n height: this.style.height,\n fill: this.style.handleBarFill,\n opacity: this.style.handleBarOpacity,\n })\n\n this.leftZoomHandle.setAttrs({\n fill: this.style.handleBarFill,\n radius: this.style.height / 2,\n y: this.style.height / 2,\n opacity: this.style.handleOpacity,\n })\n\n this.rightZoomHandle.setAttrs({\n fill: this.style.handleBarFill,\n radius: this.style.height / 2,\n y: this.style.height / 2,\n opacity: this.style.handleOpacity,\n })\n }\n\n private getScrollHandleMaxX() {\n return this.group.width() - this.handleBar.width();\n }\n\n private getConstrainedHandleBarX(wantedX: number): number {\n let newScrollHandleX = wantedX;\n if (newScrollHandleX < 0) {\n newScrollHandleX = 0;\n } else if ((newScrollHandleX + this.handleBar.width()) > this.group.width()) {\n newScrollHandleX = this.getScrollHandleMaxX();\n }\n return newScrollHandleX;\n }\n\n private clickScrollTo(x: number) {\n let scrollStep = this.group.width() / this.scrollStepNumberOfDivisions;\n if (x >= this.handleBar.x() && x <= (this.handleBar.x() + this.handleBar.width())) {\n // clicked on scroll handle\n } else {\n let isScrollHandleToRight = this.handleBar.x() > x;\n let oneStepMoveX = this.handleBar.x() + scrollStep * (isScrollHandleToRight ? -1 : 1);\n if (isScrollHandleToRight) {\n oneStepMoveX = oneStepMoveX < x ? x : oneStepMoveX;\n } else {\n oneStepMoveX = (oneStepMoveX + this.handleBar.width()) > x ? x - this.handleBar.width() : oneStepMoveX;\n }\n this.scrollToEased(oneStepMoveX);\n }\n }\n\n private scrollTo(x: number) {\n this.handleBar.x(this.getConstrainedHandleBarX(x));\n this.syncLeftRightHandles();\n this.onScroll$.next({\n scrollPercent: this.getScrollHandlePercent()\n })\n }\n\n private scrollToEased(x: number) {\n let currentX = this.handleBar.x();\n let newX = this.getConstrainedHandleBarX(x);\n\n animate({\n layer: this.handleGroup.getLayer(),\n duration: Constants.TIMELINE_SCROLL_EASED_DURATION_MS,\n from: currentX,\n to: newX,\n onUpdateHandler: (frame, value) => {\n this.scrollTo(value);\n }\n })\n }\n\n private calculateHandleBarWidthFromZoomRatioPercent(zoomRatioPercent): number {\n return new Decimal(this.group.width()).mul(100).div(zoomRatioPercent).toNumber();\n }\n\n getZoomPercent(): number {\n return this.group.width() === this.handleBar.width() ? 100 : (new Decimal(this.group.width()).mul(100).div(this.handleBar.width()).toNumber())\n }\n\n getScrollHandlePercent(): number {\n let scrollHandleX = this.handleBar.x();\n return scrollHandleX === 0 ? 0 : new Decimal(this.handleBar.x()).div(this.group.width() - this.handleBar.width()).mul(100).toNumber();\n }\n\n updateScrollHandle(scrollable: ScrollableHorizontally) {\n let horizontalMeasurement = scrollable.getScrollHandleHorizontalMeasurement(this.group.width());\n this.handleBar.setAttrs({\n ...horizontalMeasurement\n });\n this.syncLeftRightHandles()\n }\n\n private syncLeftRightHandles() {\n this.leftZoomHandle.x(this.handleBar.x());\n this.rightZoomHandle.x(this.handleBar.x() + this.handleBar.width());\n }\n\n setWidth(value: number) {\n this.width = value;\n this.onMeasurementsChange();\n }\n\n setPosition(position: Position) {\n this.x = position.x;\n this.y = position.y;\n this.group.setAttrs({\n ...position\n });\n }\n\n getPosition(): Position {\n return this.group.getPosition();\n }\n\n getRect(): RectMeasurement {\n return {\n ...this.group.getPosition(),\n ...this.group.getSize()\n }\n }\n}\n","import {BaseComponent, ComponentConfig, ComponentConfigStyleComposed, composeConfigAndDefault} from \"../common/component\";\nimport Konva from \"konva\";\nimport {Constants} from \"../constants\";\nimport {OnMeasurementsChange} from \"../common/measurement\";\nimport {Timeline} from \"./timeline\";\nimport {filter, takeUntil} from \"rxjs\";\nimport {StylesProvider} from \"../common/styles-provider\";\n\nexport interface PlayheadHoverStyle {\n x: number;\n y: number;\n height: number;\n fill: string;\n fillSnapped: string;\n lineWidth: number;\n symbolY: number;\n symbolHeight: number;\n textFontSize: number;\n textFill: string;\n textSnappedFill: string;\n visible: boolean;\n}\n\nexport interface PlayheadHoverConfig extends ComponentConfig<PlayheadHoverStyle> {\n\n}\n\nconst configDefault: PlayheadHoverConfig = {\n style: {\n ...Constants.POSITION_TOP_LEFT,\n height: 100,\n fill: '#737373',\n fillSnapped: '#ffd500',\n lineWidth: 2,\n symbolY: 0,\n symbolHeight: 15,\n textFontSize: 12,\n textFill: '#0d0f05',\n textSnappedFill: '#f43530',\n visible: false\n }\n}\n\nexport class PlayheadHover extends BaseComponent<PlayheadHoverConfig, PlayheadHoverStyle, Konva.Group> implements OnMeasurementsChange {\n protected readonly stylesProvider: StylesProvider = StylesProvider.instance();\n\n protected group: Konva.Group;\n protected line: Konva.Line;\n protected symbol: Konva.Circle;\n protected label: Konva.Label;\n protected text: Konva.Text;\n\n private timeline: Timeline;\n\n constructor(config: Partial<ComponentConfigStyleComposed<PlayheadHoverConfig>>, timeline: Timeline) {\n super(composeConfigAndDefault(config, configDefault));\n this.timeline = timeline;\n }\n\n protected createCanvasNode(): Konva.Group {\n this.group = new Konva.Group({\n x: this.style.x,\n y: this.style.y,\n visible: this.style.visible,\n listening: false\n });\n\n this.line = new Konva.Line({\n points: [this.style.x, 0, this.style.x, this.style.height],\n stroke: this.style.fill,\n strokeWidth: this.style.lineWidth,\n listening: false\n })\n\n this.symbol = new Konva.Circle({\n y: this.style.symbolY,\n fill: this.style.fill,\n radius: this.style.symbolHeight / 2,\n offsetY: -this.style.symbolHeight / 2\n });\n\n this.group.add(this.symbol);\n this.group.add(this.line);\n\n this.label = new Konva.Label({\n ...Constants.POSITION_TOP_LEFT,\n listening: false\n });\n\n this.text = new Konva.Text({\n fontSize: this.style.textFontSize,\n fontFamily: this.stylesProvider.styles.omakasePlayerStyle.fontFamily,\n fill: this.style.textFill,\n ...Constants.POSITION_TOP_LEFT,\n text: ``,\n listening: false\n });\n\n this.label.y(-this.text.getSelfRect().height);\n\n this.label.add(this.text);\n this.group.add(this.label)\n\n return this.group;\n }\n\n protected afterCanvasNodeInit() {\n this.styleAdapter.onChange$.pipe(takeUntil(this.onDestroy$)).subscribe((style) => {\n this.onMeasurementsChange();\n })\n\n this.stylesProvider.onChange$.pipe(filter(p => !!p), takeUntil(this.onDestroy$)).subscribe((styles) => {\n this.text.setAttrs({\n fontFamily: this.stylesProvider.styles.omakasePlayerStyle.fontFamily\n })\n })\n }\n\n onMeasurementsChange() {\n this.line.points([this.line.x(), 0, this.line.x(), this.style.height])\n }\n\n sync(x: number, isSnapped = false) {\n if (!this.style.visible) {\n this.toggleVisible(true);\n }\n\n let text = this.timeline.timelinePositionToTimeFormatted(x);\n\n let textRect = this.text.getSelfRect();\n let textHalfWidth = textRect.width / 2\n let labelX = -textHalfWidth;\n let horizontalMeasurement = this.timeline.getTimecodedGroupHorizontalMeasurement();\n\n if ((horizontalMeasurement.width - x) < (textHalfWidth)) {\n labelX = -textRect.width + (horizontalMeasurement.width - x);\n } else if (x < textHalfWidth) {\n labelX = -textHalfWidth + (textHalfWidth - x);\n }\n\n this.group.x(x);\n this.text.text(text);\n this.label.x(labelX)\n\n if (isSnapped) {\n this.line.stroke(this.style.fillSnapped)\n this.text.fill(this.style.fillSnapped)\n this.symbol.visible(false);\n } else {\n this.line.stroke(this.style.fill)\n this.text.fill(this.style.fill)\n this.symbol.visible(true);\n }\n }\n\n toggleVisible(visible: boolean) {\n this.style = {\n visible: visible\n }\n this.group.visible(visible);\n }\n\n}\n","import {BaseComponent, ComponentConfig, ComponentConfigStyleComposed, composeConfigAndDefault} from \"../common/component\";\nimport Konva from \"konva\";\nimport {Constants} from \"../constants\";\nimport {OnMeasurementsChange} from \"../common/measurement\";\nimport {Timeline} from \"./timeline\";\nimport {BufferedTimespan, VideoController} from \"../video/video-controller\";\nimport {ShapeUtil} from \"../util/shape-util\";\nimport {takeUntil} from \"rxjs\";\n\nexport interface PlayheadStyle {\n visible: boolean;\n fill: string;\n lineWidth: number;\n symbolHeight: number;\n scrubberHeight: number;\n backgroundFill: string;\n backgroundOpacity: number;\n\n playProgressFill: string;\n playProgressOpacity: number;\n\n bufferedFill: string;\n bufferedOpacity: number;\n}\n\nexport interface PlayheadConfig extends ComponentConfig<PlayheadStyle> {\n\n}\n\nconst configDefault: PlayheadConfig = {\n style: {\n visible: true,\n fill: '#f43530',\n lineWidth: 2,\n symbolHeight: 15,\n scrubberHeight: 15,\n backgroundFill: '#ffffff',\n backgroundOpacity: 0,\n\n playProgressFill: '#008cbc',\n playProgressOpacity: 0.5,\n\n bufferedFill: '#a2a2a2',\n bufferedOpacity: 1,\n }\n}\n\nexport class Playhead extends BaseComponent<PlayheadConfig, PlayheadStyle, Konva.Group> implements OnMeasurementsChange {\n // region config\n\n // endregion\n\n protected timeline: Timeline;\n protected videoController: VideoController;\n\n // region konva\n protected group: Konva.Group;\n protected background: Konva.Rect;\n\n protected playProgressBackground: Konva.Rect;\n\n protected playheadGroup: Konva.Group;\n protected playheadLine: Konva.Line;\n protected playheadSymbol: Konva.Line;\n\n protected bufferedGroup: Konva.Group;\n\n // endregion\n\n constructor(config: Partial<ComponentConfigStyleComposed<PlayheadConfig>>, timeline: Timeline, videoController: VideoController) {\n super(composeConfigAndDefault(config, configDefault));\n\n this.timeline = timeline;\n this.videoController = videoController;\n }\n\n protected createCanvasNode(): Konva.Group {\n this.group = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT,\n listening: false\n });\n\n this.background = new Konva.Rect({\n ...Constants.POSITION_TOP_LEFT,\n height: this.style.scrubberHeight,\n fill: this.style.backgroundFill,\n opacity: this.style.backgroundOpacity,\n listening: false\n });\n\n this.playProgressBackground = new Konva.Rect({\n ...Constants.POSITION_TOP_LEFT,\n height: this.style.scrubberHeight,\n fill: this.style.playProgressFill,\n opacity: this.style.playProgressOpacity,\n listening: false\n })\n\n this.playheadGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT,\n visible: this.style.visible,\n listening: false\n });\n\n this.playheadLine = new Konva.Line({\n points: [0, 0, 0, 0],\n stroke: this.style.fill,\n strokeWidth: this.style.lineWidth,\n listening: false\n })\n\n this.playheadSymbol = ShapeUtil.createTriangle({\n ...Constants.POSITION_TOP_LEFT,\n height: this.style.symbolHeight,\n color: this.style.fill\n });\n\n this.bufferedGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT,\n listening: false\n });\n\n this.group.add(this.background);\n this.group.add(this.bufferedGroup);\n this.group.add(this.playProgressBackground);\n\n this.playheadGroup.add(this.playheadLine)\n this.playheadGroup.add(this.playheadSymbol)\n\n this.group.add(this.playheadGroup);\n\n\n return this.group;\n }\n\n protected afterCanvasNodeInit() {\n this.settleLayout();\n\n // react on timeline zoom\n this.timeline.onZoom$.pipe(takeUntil(this.onDestroy$)).subscribe((event) => {\n this.settleLayout();\n })\n\n this.videoController.onVideoLoading$.pipe(takeUntil(this.onDestroy$)).subscribe((event) => {\n this.group.visible(false);\n })\n\n this.videoController.onVideoLoaded$.pipe(takeUntil(this.onDestroy$)).subscribe((event) => {\n this.group.visible(true);\n this.doPlayProgress()\n this.doBufferingProgress()\n })\n\n this.videoController.onVideoTimeChange$.pipe(takeUntil(this.onDestroy$)).subscribe((event) => {\n this.doPlayProgress()\n })\n\n this.videoController.onSeeking$.pipe(takeUntil(this.onDestroy$)).subscribe((event) => {\n this.doPlayProgress()\n this.doBufferingProgress()\n })\n\n this.videoController.onBuffering$.pipe(takeUntil(this.onDestroy$)).subscribe((event) => {\n this.doBufferingProgress()\n })\n }\n\n onMeasurementsChange() {\n this.settleLayout();\n }\n\n getPlayheadPosition(): number {\n return this.playheadGroup.x();\n }\n\n protected settleLayout() {\n let timecodedGroupDimension = this.timeline.getTimecodedGroupDimension();\n\n [this.group, this.bufferedGroup, this.playheadGroup].forEach(node => {\n node.setAttrs({\n ...timecodedGroupDimension\n })\n });\n\n [this.background].forEach(node => {\n node.setAttrs({\n width: timecodedGroupDimension.width\n })\n })\n\n this.playheadLine.setAttrs({\n points: [0, 0, 0, timecodedGroupDimension.height]\n })\n\n // console.log(this.bufferedGroup.getSize())\n\n this.doPlayProgress()\n this.doBufferingProgress()\n }\n\n private doPlayProgress() {\n let x = this.timeline.timeToTimelinePosition(this.videoController.getCurrentTime());\n\n this.playProgressBackground.width(x);\n this.playheadGroup.x(x);\n }\n\n private doBufferingProgress() {\n let bufferedTimespans = this.videoController.getBufferedTimespans()\n\n if (bufferedTimespans && bufferedTimespans.length > 0) {\n if (this.bufferedGroup.hasChildren()) {\n let numOfBuffers = bufferedTimespans.length;\n let previousNumOfBuffers = this.bufferedGroup.getChildren().length;\n\n if (numOfBuffers === previousNumOfBuffers) {\n // move and resize buffers\n this.bufferedGroup.getChildren().forEach((bufferedRect, i) => {\n let bufferedTimespan = bufferedTimespans[i];\n let startX = this.timeline.timeToTimelinePosition(bufferedTimespan.start);\n let endX = this.timeline.timeToTimelinePosition(bufferedTimespan.end);\n bufferedRect.setAttrs({\n x: startX,\n width: endX - startX\n })\n })\n } else {\n // remove old and recreate\n this.bufferedGroup.getChildren().forEach(child => child.destroy());\n this.createBuffers(bufferedTimespans);\n }\n } else {\n this.createBuffers(bufferedTimespans);\n }\n }\n }\n\n private createBuffers(bufferedTimespans: BufferedTimespan[]) {\n bufferedTimespans.forEach(bufferedTimespan => {\n let startX = this.timeline.timeToTimelinePosition(bufferedTimespan.start);\n let endX = this.timeline.timeToTimelinePosition(bufferedTimespan.end);\n\n let bufferedRect = new Konva.Rect({\n x: startX,\n y: 0,\n width: endX - startX,\n height: this.style.scrubberHeight,\n fill: this.style.bufferedFill,\n opacity: this.style.bufferedOpacity,\n listening: false\n })\n this.bufferedGroup.add(bufferedRect)\n })\n }\n\n}\n","import {BaseComponent, ComponentConfig, ComponentConfigStyleComposed, composeConfigAndDefault} from \"../common/component\";\nimport Konva from \"konva\";\nimport {Constants} from \"../constants\";\nimport {HasRectMeasurement, OnMeasurementsChange, Position, RectMeasurement} from \"../common/measurement\";\nimport {VideoController} from \"../video/video-controller\";\nimport {filter, Subject, takeUntil} from \"rxjs\";\nimport {VideoLoadedEvent} from \"../types\";\nimport {StylesProvider} from \"../common/styles-provider\";\n\nexport interface TimecodeDisplayStyle {\n x: number;\n y: number;\n width: number;\n height: number;\n textFontSize: number;\n textFill: string;\n visible: boolean\n}\n\nexport interface TimecodeDisplayConfig extends ComponentConfig<TimecodeDisplayStyle> {\n\n}\n\nconst configDefault: TimecodeDisplayConfig = {\n style: {\n ...Constants.POSITION_TOP_LEFT,\n width: 150,\n height: 20,\n textFontSize: 20,\n textFill: '#0d0f05',\n visible: true\n }\n}\n\nexport class TimecodeDisplay extends BaseComponent<TimecodeDisplayConfig, TimecodeDisplayStyle, Konva.Group> implements OnMeasurementsChange, HasRectMeasurement {\n protected readonly stylesProvider: StylesProvider = StylesProvider.instance();\n\n // region konva\n private group: Konva.Group;\n private text: Konva.Text;\n // endregion\n\n private videoController: VideoController;\n private videoEventStreamBreaker$ = new Subject<void>();\n\n constructor(config: Partial<ComponentConfigStyleComposed<TimecodeDisplayConfig>>, videoController: VideoController) {\n super(composeConfigAndDefault(config, configDefault));\n\n this.videoController = videoController;\n }\n\n protected createCanvasNode(): Konva.Group {\n this.group = new Konva.Group({\n x: this.style.x,\n y: this.style.y,\n width: this.style.width,\n height: this.style.height,\n listening: false,\n visible: this.style.visible\n });\n\n this.text = new Konva.Text({\n ...Constants.POSITION_TOP_LEFT,\n width: this.group.width(),\n height: this.group.height(),\n text: ``,\n fontSize: this.style.textFontSize,\n fontFamily: this.stylesProvider.styles.omakasePlayerStyle.fontFamily,\n fill: this.style.textFill,\n visible: true,\n align: 'left',\n verticalAlign: 'middle'\n });\n\n this.group.add(this.text);\n\n return this.group;\n }\n\n protected afterCanvasNodeInit() {\n super.afterCanvasNodeInit();\n\n this.stylesProvider.onChange$.pipe(filter(p => !!p), takeUntil(this.onDestroy$)).subscribe((styles) => {\n this.text.setAttrs({\n fontFamily: this.stylesProvider.styles.omakasePlayerStyle.fontFamily\n })\n })\n\n this.videoController.onVideoLoaded$.pipe(filter(p => !!p), takeUntil(this.onDestroy$)).subscribe((event) => {\n this.onVideoLoadedEvent(event);\n })\n }\n\n onMeasurementsChange() {\n this.group.width(this.style.width);\n }\n\n private fireVideoEventStreamBreaker() {\n if (this.videoEventStreamBreaker$) {\n this.videoEventStreamBreaker$.next();\n this.videoEventStreamBreaker$.complete();\n }\n this.videoEventStreamBreaker$ = new Subject<void>();\n }\n\n private onVideoLoadedEvent(event: VideoLoadedEvent) {\n this.fireVideoEventStreamBreaker();\n\n this.text.text(this.videoController.formatTimestamp(0));\n\n this.videoController.onVideoTimeChange$.pipe(takeUntil(this.videoEventStreamBreaker$)).subscribe((event) => {\n this.text.text(this.videoController.formatTimestamp(event.currentTime));\n })\n }\n\n setVisible(visible: boolean) {\n this.style = {\n visible: visible\n }\n if (this.isInitialized()) {\n this.group.visible(visible);\n }\n }\n\n setPosition(position: Position) {\n this.style = {\n ...position\n }\n this.group.setAttrs({\n ...position\n });\n this.onMeasurementsChange();\n }\n\n getRect(): RectMeasurement {\n return this.group.getClientRect();\n }\n\n}\n","import Konva from \"konva\";\nimport {RectMeasurement} from \"../common/measurement\";\nimport {Constants} from \"../constants\";\nimport Decimal from \"decimal.js\";\nimport {BaseTimelineLane, TimelaneLaneConfig, TIMELINE_LANE_STYLE_DEFAULT, TimelineLaneStyle} from \"./timeline-lane\";\nimport {ShapeUtil} from \"../util/shape-util\";\nimport {filter, Subject, takeUntil} from \"rxjs\";\nimport {ClickEvent, MouseEnterEvent, MouseLeaveEvent, MouseMoveEvent, MouseOutEvent, MouseOverEvent} from \"../types\";\nimport {TimecodeDisplay} from \"./timecode-display\";\nimport {VideoController} from \"../video/video-controller\";\nimport {ComponentConfigStyleComposed} from \"../common/component\";\n\nexport interface ScrubberLaneStyle extends TimelineLaneStyle {\n tickDivisor: number;\n tickDivisionMinWidth: number;\n tickFill: string;\n tickHeight: number;\n divisionTickFill: string;\n divisionTickHeight: number;\n timecodeShowFirst: boolean;\n timecodeFontSize: number;\n timecodeFill: string;\n}\n\nconst styleDefault: ScrubberLaneStyle = {\n ...TIMELINE_LANE_STYLE_DEFAULT,\n height: 60,\n tickDivisor: 5,\n tickDivisionMinWidth: 18,\n tickFill: '#0d0f05',\n tickHeight: 12,\n divisionTickFill: '#000000',\n divisionTickHeight: 12 * Constants.GOLDEN_RATIO,\n timecodeShowFirst: true,\n timecodeFontSize: 11,\n timecodeFill: '#0d0f05',\n}\n\nexport interface ScrubberLaneConfig extends TimelaneLaneConfig<ScrubberLaneStyle> {\n\n}\n\nexport class ScrubberLane extends BaseTimelineLane<ScrubberLaneConfig, ScrubberLaneStyle> {\n protected tickDivisionWidth: number;\n protected tickTotalDivisions: number;\n\n protected timecodeDisplay: TimecodeDisplay;\n\n // region konva\n protected timecodedGroup: Konva.Group;\n protected timecodedEventCatcher: Konva.Rect;\n protected ticksGroup: Konva.Group;\n // endregion\n\n protected videoController: VideoController;\n\n public readonly onClick$: Subject<ClickEvent> = new Subject<ClickEvent>();\n public readonly onMouseEnter$: Subject<MouseEnterEvent> = new Subject<MouseEnterEvent>();\n public readonly onMouseOver$: Subject<MouseOverEvent> = new Subject<MouseOverEvent>();\n public readonly onMouseMove$: Subject<MouseMoveEvent> = new Subject<MouseMoveEvent>();\n public readonly onMouseOut$: Subject<MouseOutEvent> = new Subject<MouseOutEvent>();\n public readonly onMouseLeave$: Subject<MouseLeaveEvent> = new Subject<MouseLeaveEvent>();\n\n constructor(config: ComponentConfigStyleComposed<ScrubberLaneConfig>, videoController: VideoController) {\n super({\n ...config,\n style: {\n ...styleDefault,\n ...config.style\n }\n });\n\n this.videoController = videoController;\n }\n\n protected createCanvasNode(): Konva.Group {\n super.createCanvasNode();\n\n this.timecodedGroup = new Konva.Group({\n ...this.timelinePosition,\n width: this.timeline.getTimecodedGroupDimension().width,\n height: this.bodyGroup.height()\n });\n\n this.timecodedEventCatcher = ShapeUtil.createEventCatcher({\n width: this.timecodedGroup.width(),\n height: this.timecodedGroup.height()\n });\n\n this.ticksGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT,\n width: this.timecodedGroup.width(),\n height: this.timecodedGroup.height()\n });\n\n this.timecodedGroup.add(this.timecodedEventCatcher);\n this.timecodedGroup.add(this.ticksGroup);\n\n this.timeline.addToTimecodedBaseGroup(this.timecodedGroup);\n\n this.timecodeDisplay = new TimecodeDisplay({\n style: {\n x: 10,\n y: 0,\n width: this.leftGroup.width(),\n height: this.getRect().height\n }\n }, this.videoController);\n this.leftGroup.add(this.timecodeDisplay.initCanvasNode());\n\n return this.bodyGroup;\n }\n\n protected settleLayout() {\n super.settleLayout();\n\n let horizontalMeasurement = this.timeline.getTimecodedGroupHorizontalMeasurement();\n [this.timecodedGroup, this.timecodedEventCatcher, this.ticksGroup].forEach(node => {\n node.width(horizontalMeasurement.width)\n })\n\n this.refreshTimeDivisions();\n }\n\n protected afterCanvasNodeInit() {\n super.afterCanvasNodeInit();\n\n this.timecodedEventCatcher.on('mousemove', (event) => {\n // console.debug('ScrubberLane emited', event);\n this.onMouseMove$.next({\n evt: event.evt,\n position: this.timecodedGroup.getRelativePointerPosition()\n })\n })\n\n this.timecodedEventCatcher.on('mouseenter', (event) => {\n // console.debug('ScrubberLane emited', event);\n this.onMouseEnter$.next({\n evt: event.evt,\n position: this.timecodedGroup.getRelativePointerPosition()\n })\n })\n\n this.timecodedEventCatcher.on('mouseout', (event) => {\n // console.debug('ScrubberLane emited', event);\n this.onMouseOut$.next({\n evt: event.evt,\n position: this.timecodedGroup.getRelativePointerPosition()\n })\n })\n\n this.timecodedEventCatcher.on('mouseleave', (event) => {\n // console.debug('ScrubberLane emited', event);\n this.onMouseLeave$.next({\n evt: event.evt,\n position: this.timecodedGroup.getRelativePointerPosition()\n })\n })\n\n this.timecodedEventCatcher.on('click', (event) => {\n // console.debug('ScrubberLane emited', event);\n this.onClick$.next({\n evt: event.evt,\n position: this.timecodedGroup.getRelativePointerPosition()\n })\n })\n\n this.videoController.onVideoLoading$.pipe(takeUntil(this.onDestroy$)).subscribe((event) => {\n this.clearContent();\n })\n\n this.videoController.onVideoLoaded$.pipe(takeUntil(this.onDestroy$)).subscribe((event) => {\n this.settleLayout()\n })\n\n }\n\n onStyleChange() {\n super.onStyleChange();\n\n this.refreshTimeDivisions(true)\n\n console.log('IZVRSENO', this.styleAdapter.style)\n }\n\n destroy() {\n super.destroy();\n this.timecodedGroup.destroy();\n }\n\n clearContent() {\n this.ticksGroup.destroyChildren();\n }\n\n refreshTimeDivisions(forceCreate = false) {\n // console.debug('ScrubberLane.refreshTimeDivisions')\n if (!this.isTimelineReady()) {\n // console.debug('Timeline not ready')\n return;\n }\n \n let tickDivisor = this.style.tickDivisor;\n let tickMinDivisionWidth = this.style.tickDivisionMinWidth;\n let timelineWidth = this.timeline.getTimecodedGroupRect().width;\n\n let newDivisionWidth = this.resolveTimeDivisionWidth(timelineWidth, tickMinDivisionWidth, tickDivisor, tickDivisor);\n let newTotalDivisions = new Decimal(timelineWidth).div(newDivisionWidth).round().toNumber();\n\n let moveTicksInsteadOfCreate = !forceCreate && this.tickTotalDivisions === newTotalDivisions && !(this.ticksGroup.getChildren().length < 1);\n if (!moveTicksInsteadOfCreate) {\n this.clearContent();\n }\n\n // console.debug('moveTicksInsteadOfCreate', {\n // 'this.bodyGroup.getSize()': this.bodyGroup.getSize()\n // })\n\n this.tickDivisionWidth = newDivisionWidth;\n this.tickTotalDivisions = newTotalDivisions;\n\n let tickGroupY = 0;\n let firstTextLeftPadding = 2;\n let lastTextRightPadding = 2;\n let textBottomPadding = 5;\n\n let lastGroupRect: RectMeasurement;\n\n for (let i = 0; i < (this.tickTotalDivisions + 1); i++) {\n let isFirstTick = i === 0;\n let isLastTick = i === this.tickTotalDivisions;\n let isDivisionTick = i % tickDivisor === 0;\n let tickGroupX = i * this.tickDivisionWidth;\n let lineHeight = isDivisionTick ? this.style.divisionTickHeight : this.style.tickHeight;\n let lineY = this.ticksGroup.height() - lineHeight\n let textBottomY = this.ticksGroup.height() - this.style.divisionTickHeight - textBottomPadding;\n\n if (moveTicksInsteadOfCreate) {\n let tickGroup = this.ticksGroup.getChildren()[i];\n tickGroup.x(tickGroupX);\n\n // if (tickGroup.fin)\n } else {\n let tickGroup = new Konva.Group({\n x: tickGroupX,\n y: tickGroupY\n });\n\n let lineX = 0;\n let line = new Konva.Line({\n points: [\n lineX, lineY,\n lineX, lineY + lineHeight\n ],\n stroke: this.style.tickFill,\n strokeWidth: 1,\n listening: false\n });\n\n tickGroup.add(line);\n\n let text = new Konva.Text({\n fontSize: this.style.timecodeFontSize,\n fontFamily: this.stylesProvider.styles.omakasePlayerStyle.fontFamily,\n fill: this.style.timecodeFill,\n text: `${this.timeline.timelinePositionToTimeFormatted(tickGroupX)}`,\n listening: false\n })\n\n let textRect: RectMeasurement = text.getSelfRect();\n let x = isFirstTick ? lineX + firstTextLeftPadding : isLastTick ? lineX - textRect.width - lastTextRightPadding : lineX - textRect.width / 2;\n let y = textBottomY - textRect.height;\n text.setAttrs({\n x: x,\n y: y\n })\n\n let showTimecode = isDivisionTick;\n showTimecode = isFirstTick ? this.style.timecodeShowFirst : showTimecode;\n\n if (showTimecode) {\n tickGroup.add(text)\n lastGroupRect = {\n x: tickGroup.x() + (text.x() > 0 ? 0 : text.x()),\n y: tickGroup.y(),\n width: text.width(),\n height: 0\n }\n }\n\n // console.debug(i, {\n // 'this.ticksGroup': {\n // ...this.ticksGroup.getPosition(),\n // ...this.ticksGroup.getSize()\n // }\n // })\n\n // setTimeout(() => {\n // this.ticksGroup.add(ShapeUtil.createDebugRect())\n // }, 0)\n\n this.ticksGroup.add(tickGroup)\n }\n }\n }\n\n private resolveTimeDivisionWidth(width: number, minDivisionWidth: number, initialDivisor: number, divisor: number): number {\n let currentDivisionWidth = new Decimal(width).div(divisor).floor();\n if (currentDivisionWidth.greaterThan(minDivisionWidth)) {\n return this.resolveTimeDivisionWidth(width, minDivisionWidth, initialDivisor, divisor * initialDivisor);\n } else {\n return new Decimal(width).div(divisor / initialDivisor).toNumber();\n }\n }\n}\n","import {BaseComponent, ComponentConfig, ComponentConfigStyleComposed, composeConfigAndDefault} from \"../common/component\";\nimport Konva from \"konva\";\nimport Decimal from \"decimal.js\";\nimport {ScrollableHorizontally, Scrollbar} from \"./scrollbar\";\nimport {Dimension, HasRectMeasurement, HorizontalMeasurement, OnMeasurementsChange, Position, RectMeasurement} from \"../common/measurement\";\nimport {VideoController} from \"../video/video-controller\";\nimport {PlayheadHover} from \"./playhead-hover\";\nimport {animate} from \"../util/animation-util\";\nimport {catchError, filter, fromEvent, map, Observable, of, Subject, takeUntil} from \"rxjs\";\nimport {ThumbnailVttCue, TimelineScrollEvent, TimelineZoomEvent, VideoLoadedEvent} from \"../types\";\nimport {Playhead} from \"./playhead\";\nimport {ThumbnailVttFile} from \"../track/thumbnail-vtt-file\";\nimport {Thumbnail} from \"./thumbnail/thumbnail\";\nimport {GenericTimelaneLane} from \"./timeline-lane\";\nimport {Constants} from \"../constants\";\nimport {ImageUtil} from \"../util/image-util\";\nimport {ShapeUtil} from \"../util/shape-util\";\nimport {WindowUtil} from \"../util/window-util\";\nimport {ScrubberLane} from \"./scrubber-lane\";\nimport {TimecodeDisplay} from \"./timecode-display\";\nimport {TimelineApi} from \"../api/timeline-api\";\nimport {z} from \"zod\";\nimport {MarkerLane} from \"./marker\";\nimport {ThumbnailLane} from \"./thumbnail\";\nimport {SubtitlesLane} from \"./subtitles\";\nimport {AudioTrackLane} from \"./audio-track\";\nimport {MarkerLaneConfig} from \"./marker/marker-lane\";\nimport {ThumbnailLaneConfig} from \"./thumbnail/thumbnail-lane\";\nimport {SubtitlesLaneConfig} from \"./subtitles/subtitles-lane\";\n\nenum ZoomDirection {\n IN = 'IN',\n OUT = 'OUT'\n}\n\nexport interface TimelineStyle {\n stageMinWidth: number;\n\n backgroundFill: string;\n headerBackgroundFill: string;\n footerBackgroundFill: string;\n\n scrollbarHeight: number;\n\n thumbnailHoverWidth: number;\n thumbnailHoverStroke: string;\n thumbnailHoverStrokeWidth: number;\n thumbnailHoverYOffset: number;\n\n headerHeight: number;\n footerHeight: number;\n leftPanelWidth: number;\n // leftPanelLeftGutterWidth: number;\n // leftPanelRightGutterWidth: number;\n rightPanelLeftGutterWidth: number;\n rightPanelRightGutterWidth: number;\n timecodedContainerClipPadding: number;\n\n // playhead\n playheadVisible: boolean;\n playheadFill: string;\n playheadLineWidth: number;\n playheadSymbolHeight: number;\n playheadScrubberHeight: number;\n playheadBackgroundFill: string;\n playheadBackgroundOpacity: number;\n\n playheadPlayProgressFill: string;\n playheadPlayProgressOpacity: number;\n\n playheadBufferedFill: string;\n playheadBufferedOpacity: number;\n}\n\nexport interface TimelineConfig extends ComponentConfig<TimelineStyle> {\n thumbnailVttUrl?: string;\n timelineHTMLElementId: string;\n playheadHoverSnapArea: number;\n zoomScale: number;\n zoomBaseline: number;\n zoomMax: number;\n}\n\nconst configDefault: TimelineConfig = {\n timelineHTMLElementId: 'omakase-timeline',\n playheadHoverSnapArea: 5,\n zoomScale: 1.02,\n zoomBaseline: 100,\n zoomMax: 1500,\n style: {\n stageMinWidth: 700,\n\n backgroundFill: '#f5f5f5',\n headerBackgroundFill: '#f5f5f5',\n footerBackgroundFill: '#f5f5f5',\n\n scrollbarHeight: 15,\n\n thumbnailHoverWidth: 200,\n thumbnailHoverStroke: 'rgba(255,73,145,0.9)',\n thumbnailHoverStrokeWidth: 5,\n thumbnailHoverYOffset: 0,\n\n headerHeight: 50,\n footerHeight: 50,\n leftPanelWidth: 200,\n // leftPanelLeftGutterWidth: 50,\n // leftPanelRightGutterWidth: 50,\n rightPanelLeftGutterWidth: 30,\n rightPanelRightGutterWidth: 30,\n timecodedContainerClipPadding: 20,\n\n // playhead\n playheadVisible: true,\n playheadFill: '#f43530',\n playheadLineWidth: 2,\n playheadSymbolHeight: 15,\n playheadScrubberHeight: 15,\n\n playheadBackgroundFill: '#ffffff',\n playheadBackgroundOpacity: 0,\n\n playheadPlayProgressFill: '#008cbc',\n playheadPlayProgressOpacity: 0.5,\n\n playheadBufferedFill: '#a2a2a2',\n playheadBufferedOpacity: 1,\n }\n}\n\nconst SCRUBBER_LANE_ID = \"omakase_scrubber_lane\";\n\n// noinspection TypeScriptFieldCanBeMadeReadonly\nexport class Timeline extends BaseComponent<TimelineConfig, TimelineStyle, Konva.Stage> implements OnMeasurementsChange, HasRectMeasurement, ScrollableHorizontally, TimelineApi {\n // region config\n private timelineHTMLElementId: string;\n private thumbnailVttUrl: string;\n private width: number;\n private zoomScale: number;\n private zoomBaseline: number;\n private zoomMax: number;\n private playheadHoverSnapArea: number;\n // endregion\n\n private timelineHTMLElement: HTMLElement;\n\n // region konva\n private stage: Konva.Stage;\n private layer: Konva.Layer;\n\n private layoutGroup: Konva.Group;\n private layoutBackground: Konva.Rect;\n\n private headerGroup: Konva.Group;\n private headerBackground: Konva.Rect;\n private bodyGroup: Konva.Group;\n private footerGroup: Konva.Group;\n private footerBackground: Konva.Rect;\n private bodyContentGroup: Konva.Group;\n private leftPanel: Konva.Group;\n private rightPanel: Konva.Group;\n\n private timecodedContainer: Konva.Group;\n private timecodedGroup: Konva.Group;\n private timecodedBaseGroup: Konva.Group;\n private timecodedThumbnailsGroup: Konva.Group;\n private timecodedSubtitlesGroup: Konva.Group;\n private timecodedAudioGroup: Konva.Group;\n private timecodedMarkersGroup: Konva.Group;\n private timecodedSurfaceGroup: Konva.Group;\n private timecodedBackground: Konva.Rect\n private timecodedEventCatcher: Konva.Rect;\n private timecodedGroupNodes: Konva.Node[];\n // endregion\n\n // region component declarations\n private videoController: VideoController;\n private scrollbar: Scrollbar;\n private playheadHover: PlayheadHover;\n private playhead: Playhead;\n private timelaneLanes: GenericTimelaneLane[];\n private timelaneLanesMap: Map<string, GenericTimelaneLane>;\n private scrubberLane: ScrubberLane;\n private thumbnailHover: Thumbnail;\n private headerTimecodeDisplay: TimecodeDisplay;\n // endregion\n\n private maxTimecodedGroupWidth: number;\n private thumbnailVttFile: ThumbnailVttFile;\n\n private scrollWithPlayhead = true;\n private syncTimelineWithPlayheadInProgress = false;\n\n private mouseWheelEnabled = false\n private leftPanelVisible = true;\n\n private videoEventBreaker$ = new Subject<void>();\n\n // region event declarations\n readonly onScroll$: Subject<TimelineScrollEvent> = new Subject<TimelineScrollEvent>();\n readonly onZoom$: Subject<TimelineZoomEvent> = new Subject<TimelineZoomEvent>();\n\n // endregion\n\n constructor(config: Partial<ComponentConfigStyleComposed<TimelineConfig>>, videoController: VideoController) {\n super(composeConfigAndDefault(config, configDefault));\n\n this.timelineHTMLElementId = this.config.timelineHTMLElementId;\n this.thumbnailVttUrl = this.config.thumbnailVttUrl;\n\n this.playheadHoverSnapArea = this.config.playheadHoverSnapArea;\n this.zoomScale = this.config.zoomScale;\n this.zoomBaseline = this.config.zoomBaseline;\n this.zoomMax = this.config.zoomMax;\n\n this.timecodedGroupNodes = [];\n this.timelaneLanes = [];\n this.timelaneLanesMap = new Map<string, GenericTimelaneLane>();\n\n // TODO move to DOM controller\n this.timelineHTMLElement = document.getElementById(this.timelineHTMLElementId) as HTMLVideoElement;\n\n this.videoController = videoController;\n }\n\n protected createCanvasNode(): Konva.Stage {\n let stageDimensions = this.resolveStageDimension();\n this.width = stageDimensions.width;\n\n this.stage = new Konva.Stage({\n container: this.timelineHTMLElementId,\n ...stageDimensions\n });\n this.layer = new Konva.Layer();\n this.stage.add(this.layer);\n\n this.layoutGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT,\n })\n\n this.layer.add(this.layoutGroup);\n\n this.layoutBackground = new Konva.Rect({\n ...Constants.POSITION_TOP_LEFT,\n fill: this.style.backgroundFill\n });\n\n this.headerGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT\n })\n\n this.headerBackground = new Konva.Rect({\n ...Constants.POSITION_TOP_LEFT,\n fill: this.style.headerBackgroundFill\n });\n\n this.footerGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT\n })\n\n this.footerBackground = new Konva.Rect({\n ...Constants.POSITION_TOP_LEFT,\n fill: this.style.footerBackgroundFill,\n });\n\n this.bodyGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT\n })\n\n this.bodyContentGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT\n })\n\n this.leftPanel = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT\n })\n\n this.rightPanel = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT\n })\n\n this.timecodedContainer = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT,\n })\n\n this.timecodedGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT,\n draggable: true\n });\n\n this.timecodedBaseGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT,\n name: 'timecodedBaseGroup'\n });\n\n this.timecodedThumbnailsGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT,\n name: 'timecodedThumbnailsGroup'\n });\n\n this.timecodedSubtitlesGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT,\n name: 'timecodedSubtitlesGroup'\n });\n\n this.timecodedAudioGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT,\n name: 'timecodedAudioGroup'\n });\n\n this.timecodedMarkersGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT,\n name: 'timecodedMarkersGroup'\n });\n\n this.timecodedSurfaceGroup = new Konva.Group({\n ...Constants.POSITION_TOP_LEFT,\n name: 'timecodedSurfaceGroup'\n });\n\n this.timecodedBackground = new Konva.Rect({\n ...Constants.POSITION_TOP_LEFT,\n fill: 'yellow',\n opacity: 0,\n listening: false\n });\n\n this.timecodedEventCatcher = ShapeUtil.createEventCatcher();\n\n this.thumbnailHover = new Thumbnail({\n style: {\n visible: false,\n stroke: this.style.thumbnailHoverStroke,\n strokeWidth: this.style.thumbnailHoverStrokeWidth\n }\n })\n\n this.layoutGroup.add(this.layoutBackground)\n this.layoutGroup.add(this.headerGroup);\n this.layoutGroup.add(this.footerGroup);\n this.layoutGroup.add(this.bodyGroup);\n\n this.headerGroup.add(this.headerBackground);\n this.footerGroup.add(this.footerBackground);\n\n this.bodyGroup.add(this.bodyContentGroup);\n this.bodyGroup.add(this.leftPanel);\n this.bodyGroup.add(this.rightPanel);\n\n this.rightPanel.add(this.timecodedContainer);\n this.timecodedContainer.add(this.timecodedGroup);\n [this.timecodedBackground, this.timecodedEventCatcher,\n this.timecodedBaseGroup, this.timecodedThumbnailsGroup, this.timecodedSubtitlesGroup, this.timecodedAudioGroup, this.timecodedMarkersGroup, this.timecodedSurfaceGroup\n ].forEach(node => {\n this.timecodedGroupNodes.push(node);\n this.timecodedGroup.add(node);\n });\n\n this.scrollbar = new Scrollbar({\n style: {\n height: this.style.scrollbarHeight\n }\n });\n\n this.rightPanel.add(this.scrollbar.initCanvasNode())\n\n this.playhead = new Playhead({\n style: {\n visible: this.style.playheadVisible,\n fill: this.style.playheadFill,\n lineWidth: this.style.playheadLineWidth,\n symbolHeight: this.style.playheadSymbolHeight,\n backgroundFill: this.style.playheadBackgroundFill,\n backgroundOpacity: this.style.playheadBackgroundOpacity,\n scrubberHeight: this.style.playheadScrubberHeight,\n playProgressFill: this.style.playheadPlayProgressFill,\n playProgressOpacity: this.style.playheadPlayProgressOpacity,\n bufferedFill: this.style.playheadBufferedFill,\n bufferedOpacity: this.style.playheadBufferedOpacity\n }\n }, this, this.videoController)\n this.playheadHover = new PlayheadHover({}, this);\n\n [this.playhead, this.playheadHover].forEach(component => {\n this.addToTimecodedSurfaceGroup(component.initCanvasNode())\n });\n\n this.headerTimecodeDisplay = new TimecodeDisplay({\n style: {\n x: 10,\n y: 10,\n visible: false\n }\n }, this.videoController);\n this.headerGroup.add(this.headerTimecodeDisplay.initCanvasNode())\n\n this.settleLayout();\n\n this.addToTimecodedSurfaceGroup(this.thumbnailHover.initCanvasNode())\n\n this.scrubberLane = new ScrubberLane({\n id: SCRUBBER_LANE_ID,\n description: ''\n }, this.videoController);\n\n this.addLanes([\n this.scrubberLane\n ])\n\n return this.stage;\n }\n\n protected afterCanvasNodeInit() {\n\n // console.log('::START new ScrubberLane', {\n // \"this.getLanes()\": this.getLanes(),\n // \"this.calculateHeights()\": this.calculateHeights(),\n // \"width\": this.width,\n // \"this.bodyGroup.getSize()\": this.bodyGroup.getSize(),\n // \"this.layoutGroup.getSize()\": this.layoutGroup.getSize()\n // })\n // this.scrubberLane = new ScrubberLane({\n // id: 'ScrubberLane',\n // description: '',\n // style: {\n // backgroundFill: 'yellow'\n // }\n // }, this.videoController);\n //\n // this.addLanes([\n // this.scrubberLane\n // ])\n\n // console.log('::END new ScrubberLane', {\n // \"this.getLanes()\": this.getLanes(),\n // \"this.calculateHeights()\": this.calculateHeights(),\n // \"width\": this.width,\n // \"this.bodyGroup.getSize()\": this.bodyGroup.getSize(),\n // \"this.layoutGroup.getSize()\": this.layoutGroup.getSize()\n // })\n\n this.videoController.onVideoLoading$.pipe(filter(p => !!p), takeUntil(this.onDestroy$)).subscribe((event) => {\n this.clearContent();\n })\n\n this.videoController.onVideoLoaded$.pipe(filter(p => !!p), takeUntil(this.onDestroy$)).subscribe((event) => {\n this.onVideoLoadedEvent(event);\n })\n\n fromEvent(window, 'resize').pipe(takeUntil(this.onDestroy$)).subscribe((event: UIEvent) => {\n // console.debug('Timeline.fromEvent(window.resize)');\n // setTimeout is needed because window resize event fires a bit late\n setTimeout(() => {\n this.onWindowResize(event);\n }, 200)\n\n })\n\n this.timecodedGroup.on('mouseenter', (event) => {\n this.playheadHover.toggleVisible(this.videoController.isVideoLoaded());\n })\n\n this.timecodedGroup.on('mouseleave', (event) => {\n this.playheadHover.toggleVisible(false);\n })\n\n this.timecodedGroup.on('mousemove', (event) => {\n if (!this.videoController.isVideoLoaded()) {\n return;\n }\n\n let x = this.timecodedGroup.getRelativePointerPosition().x;\n this.playheadHoverMove(x);\n })\n\n this.timecodedMarkersGroup.on('mousemove', (event) => {\n if (!this.videoController.isVideoLoaded()) {\n return;\n }\n\n let x = this.timecodedGroup.getRelativePointerPosition().x;\n this.playheadHoverMove(x);\n })\n\n this.timecodedGroup.on('wheel', (konvaEvent) => {\n if (!this.videoController.isVideoLoaded()) {\n return;\n }\n\n if (this.mouseWheelEnabled) {\n let event = konvaEvent.evt;\n event.preventDefault();\n\n let direction = event.deltaY > 0 ? ZoomDirection.IN : ZoomDirection.OUT;\n if (event.ctrlKey) {\n direction = direction === ZoomDirection.IN ? ZoomDirection.OUT : ZoomDirection.IN;\n }\n\n this.zoomStep(direction, this.timecodedGroup.getRelativePointerPosition().x);\n this.updateScrollWithPlayhead();\n }\n\n let x = this.timecodedGroup.getRelativePointerPosition().x;\n this.playheadHoverMove(x);\n })\n\n this.timecodedGroup.on('dragstart dragmove dragend', (event) => {\n if (!this.videoController.isVideoLoaded()) {\n this.timecodedGroup.setAttrs({\n ...Constants.POSITION_TOP_LEFT\n })\n return;\n }\n\n if (event.target === this.timecodedGroup) {\n let newPosition = this.timecodedGroup.getPosition();\n this.timecodedGroup.setAttrs({\n x: this.getConstrainedTimelineX(newPosition.x),\n y: 0\n })\n\n this.onScroll$.next(this.createScrollEvent())\n\n this.scrollbar.updateScrollHandle(this);\n }\n this.updateScrollWithPlayhead();\n })\n\n this.timecodedGroup.on('dragmove', (event) => {\n WindowUtil.cursor(\"grabbing\")\n })\n\n this.timecodedGroup.on('dragend', (event) => {\n WindowUtil.cursor(\"default\")\n })\n\n this.scrubberLane.onMouseMove$.pipe(takeUntil(this.onDestroy$)).subscribe((event) => {\n if (!this.videoController.isVideoLoaded()) {\n return;\n }\n // console.debug('Timeline catched event', event);\n this.mouseWheelEnabled = true;\n let x = this.timecodedGroup.getRelativePointerPosition().x;\n let time = this.timelinePositionToTime(x);\n if (this.thumbnailVttFile) {\n let thumbnailVttCue = this.thumbnailVttFile.findCue(time);\n this.showThumbnailHover(thumbnailVttCue);\n }\n });\n\n this.scrubberLane.onMouseEnter$.pipe(takeUntil(this.onDestroy$)).subscribe((event) => {\n this.mouseWheelEnabled = true;\n });\n\n this.scrubberLane.onMouseLeave$.pipe(takeUntil(this.onDestroy$)).subscribe((event) => {\n this.hideThumbnailHover();\n this.mouseWheelEnabled = false;\n });\n\n this.scrubberLane.onClick$.pipe(takeUntil(this.onDestroy$)).subscribe((event) => {\n if (!this.videoController.isVideoLoaded()) {\n return;\n }\n\n this.updateScrollWithPlayhead();\n\n let x = this.timecodedGroup.getRelativePointerPosition().x;\n this.playheadHoverMove(x);\n if (this.videoController.isVideoLoaded()) {\n this.videoController.seekToTimestamp(this.timelinePositionToTime(x)).subscribe(() => {\n })\n }\n });\n\n this.scrollbar.onScroll$.pipe(takeUntil(this.onDestroy$)).subscribe((event) => {\n if (!this.videoController.isVideoLoaded()) {\n return;\n }\n\n this.setHorizontalScrollPercent(this.scrollbar.getScrollHandlePercent()) // we should not use timeline easing scrolling here\n\n this.updateScrollWithPlayhead();\n\n this.onScroll$.next(this.createScrollEvent())\n })\n\n this.scrollbar.onZoom$.pipe(takeUntil(this.onDestroy$)).subscribe((event) => {\n if (!this.videoController.isVideoLoaded()) {\n return;\n }\n\n this.zoomByPercent(event.zoomPercent, false);\n this.updateScrollWithPlayhead();\n })\n\n if (this.thumbnailVttUrl) {\n this.fetchThumbnailVttFile().subscribe()\n }\n }\n\n private settleLayout() {\n // console.debug('Timeline.settleLayout', this.resolveStageDimension())\n\n this.stage.setAttrs({\n ...this.resolveStageDimension()\n })\n\n let heights = this.calculateHeights();\n\n this.headerGroup.setAttrs({\n width: this.width,\n height: this.style.headerHeight\n })\n\n this.bodyGroup.setAttrs({\n y: this.headerGroup.y() + this.headerGroup.height(),\n width: this.layoutGroup.width(),\n height: heights.bodyHeight\n });\n\n this.footerGroup.setAttrs({\n y: this.bodyGroup.y() + this.bodyGroup.height(),\n width: this.width,\n height: this.style.footerHeight\n })\n\n this.layoutGroup.setAttrs({\n width: this.width,\n height: heights.layoutHeight\n })\n\n this.layoutBackground.setAttrs({\n ...this.layoutGroup.getSize()\n });\n\n this.headerBackground.setAttrs({\n ...this.headerGroup.getSize()\n });\n\n this.footerBackground.setAttrs({\n ...this.footerGroup.getSize()\n });\n\n [this.bodyContentGroup].forEach(node => {\n node.setAttrs({\n ...this.bodyGroup.getSize()\n })\n });\n\n [this.leftPanel, this.rightPanel].forEach(node => {\n node.setAttrs({\n height: this.bodyGroup.getSize().height\n })\n });\n\n this.leftPanel.setAttrs({\n width: this.leftPanelVisible ? this.style.leftPanelWidth : 0,\n visible: this.leftPanelVisible\n });\n\n this.rightPanel.setAttrs({\n x: this.leftPanel.x() + this.leftPanel.width() + this.style.rightPanelLeftGutterWidth,\n width: this.layoutGroup.width() - (this.leftPanel.width() + this.style.rightPanelLeftGutterWidth + this.style.rightPanelRightGutterWidth)\n });\n\n [this.timecodedContainer, this.timecodedGroup, ...this.timecodedGroupNodes].forEach(node => {\n node.setAttrs({\n ...this.rightPanel.getSize()\n })\n });\n\n this.timecodedContainer.clipFunc((ctx) => {\n ctx.rect(-this.style.timecodedContainerClipPadding, -500, this.timecodedContainer.width() + 2 * this.style.timecodedContainerClipPadding, this.timecodedContainer.height() + 500)\n // ctx.rect(0, -500, this.timecodedContainer.width() , this.timecodedContainer.height() + 500)\n })\n\n this.timecodedThumbnailsGroup.clipFunc((ctx) => {\n ctx.rect(0, 0, this.timecodedThumbnailsGroup.width(), this.timecodedThumbnailsGroup.height())\n })\n\n this.scrollbar.setPosition({\n ...this.scrollbar.getPosition(),\n y: this.leftPanel.getSize().height\n })\n this.scrollbar.setWidth(this.timecodedContainer.width());\n this.scrollbar.updateScrollHandle(this);\n\n this.maxTimecodedGroupWidth = this.calculateWidthFromZoomRatioPercent(this.zoomMax);\n\n this.playheadHover.style = {\n height: this.timecodedContainer.height()\n }\n\n this.timelaneLanes.forEach(timelineLane => {\n timelineLane.onMeasurementsChange() // TODO listen to timeline event?\n })\n this.playhead.onMeasurementsChange(); // TODO listen to timeline event?\n }\n\n onMeasurementsChange() {\n // console.debug('Timeline.onMeasurementsChange')\n this.settleLayout();\n\n let timecodedGroupDimension = this.getTimecodedGroupDimension();\n\n this.timelaneLanes.forEach(timelineLane => {\n timelineLane.onMeasurementsChange()\n });\n\n this.zoomByWidth(timecodedGroupDimension.width, this.resolveZoomFocus());\n\n // scrollbar\n this.scrollbar.updateScrollHandle(this);\n }\n\n private onWindowResize(event: UIEvent) {\n // console.debug('Timeline.onWindowResize')\n let dimensions = this.resolveStageDimension();\n this.width = dimensions.width;\n this.onMeasurementsChange();\n }\n\n private calculateHeights(): { bodyHeight: number, layoutHeight: number } {\n let timelineLanesHeight = this.getLanes()\n .map(p => p.getDimension().height)\n .reduce((acc, current) => acc + current, 0);\n\n let bodyHeight = timelineLanesHeight;\n\n return {\n bodyHeight: bodyHeight,\n layoutHeight: this.style.headerHeight + bodyHeight + this.style.footerHeight\n }\n }\n\n private resolveStageDimension(): Dimension {\n let divElementRect = this.getTimelineHTMLElementRect();\n let heights = this.calculateHeights();\n return {\n width: divElementRect.width >= this.style.stageMinWidth ? divElementRect.width : this.style.stageMinWidth,\n height: heights.layoutHeight\n }\n }\n\n private getTimelineHTMLElementRect(): RectMeasurement {\n return {\n x: this.timelineHTMLElement.offsetLeft,\n y: this.timelineHTMLElement.offsetTop,\n width: this.timelineHTMLElement.offsetWidth,\n height: this.timelineHTMLElement.offsetHeight\n }\n }\n\n\n private showThumbnailHover(thumbnailVttCue: ThumbnailVttCue) {\n if (thumbnailVttCue) {\n this.thumbnailHover.setVisible(true);\n if (this.thumbnailHover.getThumbnailVttCue() === thumbnailVttCue) {\n this.thumbnailHover.setThumbnailVttCue(thumbnailVttCue);\n let position = this.resolveThumbnailPosition(this.thumbnailHover);\n this.thumbnailHover.setPosition(position)\n this.thumbnailHover.getCanvasNode().moveToTop();\n } else {\n ImageUtil.createKonvaImageSizedByWidth(thumbnailVttCue.url, this.style.thumbnailHoverWidth).subscribe(image => {\n this.thumbnailHover.setThumbnailVttCue(thumbnailVttCue);\n this.thumbnailHover.setDimension(image.getSize());\n this.thumbnailHover.setImage(image);\n this.thumbnailHover.setPosition(this.resolveThumbnailPosition(this.thumbnailHover))\n this.thumbnailHover.getCanvasNode().moveToTop();\n })\n }\n }\n }\n\n private hideThumbnailHover() {\n if (this.thumbnailHover) {\n this.thumbnailHover.setVisible(false);\n }\n }\n\n private resolveThumbnailPosition(thumbnail: Thumbnail): Position {\n let pointerPosition = this.timecodedGroup.getRelativePointerPosition();\n let timecodedGroupDimension = this.getTimecodedGroupDimension();\n let imageSize = thumbnail.getImage().getSize();\n let x = pointerPosition.x - imageSize.width / 2; // center thumbnail\n let halfStroke = thumbnail.style.strokeWidth > 0 ? thumbnail.style.strokeWidth / 2 : 0;\n let xWithStroke = x - halfStroke;\n x = xWithStroke < 0 ? halfStroke : (x + imageSize.width + halfStroke) > timecodedGroupDimension.width ? (timecodedGroupDimension.width - imageSize.width - halfStroke) : x;\n let scrubberLaneRect = this.scrubberLane.getRect();\n return {\n x: x,\n y: scrubberLaneRect.y + scrubberLaneRect.height + thumbnail.style.strokeWidth / 2 + this.style.thumbnailHoverYOffset\n }\n }\n\n private createScrollEvent(): TimelineScrollEvent {\n return {\n scrollPercent: this.getHorizontalScrollPercent()\n }\n }\n\n private createZoomEvent(): TimelineZoomEvent {\n return {\n zoomPercent: this.getZoomPercent()\n }\n }\n\n // region scroll\n getHorizontalScrollPercent(): number {\n if (this.isSnappedStart()) {\n return 0;\n } else if (this.isSnappedEnd()) {\n return 100;\n } else {\n let maxScroll = new Decimal(this.getTimecodedContainerDimension().width - this.getTimecodedGroupDimension().width).abs();\n let scrollPercent = new Decimal(this.getTimecodedGroupPosition().x).abs().mul(100).div(maxScroll).toNumber();\n return scrollPercent;\n }\n }\n\n setHorizontalScrollPercent(percent: number) {\n this.setTimelinePosition(this.calculateTimelineXFromScrollPercent(percent));\n }\n\n getScrollHandleHorizontalMeasurement(scrollbarWidth: number): HorizontalMeasurement {\n let timelineWidth = this.getTimecodedGroupDimension().width;\n let timelineX = this.getTimecodedGroupPosition().x;\n\n let measurement: HorizontalMeasurement;\n\n if (timelineWidth <= scrollbarWidth) {\n measurement = {\n width: scrollbarWidth,\n x: 0\n }\n } else {\n let scrollHandleWidthDecimal = new Decimal(scrollbarWidth).mul(scrollbarWidth).div(timelineWidth).round();\n measurement = {\n width: scrollHandleWidthDecimal.toNumber(),\n x: new Decimal(timelineX).abs().mul(scrollbarWidth).div(timelineWidth).toNumber()\n }\n }\n\n return measurement;\n }\n\n scrollTo(percent: number): Observable<number> {\n percent = z.coerce.number()\n .min(0)\n .max(100)\n .parse(percent);\n\n return this.scrollToPercentEased(percent);\n }\n\n scrollToPlayhead(): Observable<number> {\n let newTimelineX = -this.playhead.getPlayheadPosition() + this.getTimecodedContainerDimension().width / 2;\n return this.scrollToEased(newTimelineX);\n }\n\n private scrollToPercent(percent: number) {\n let newX = this.calculateTimelineXFromScrollPercent(percent);\n this.scrollTimeline(newX)\n }\n\n private scrollToPercentEased(percent: number): Observable<number> {\n let newTimelineX = this.calculateTimelineXFromScrollPercent(percent);\n return this.scrollToEased(newTimelineX);\n }\n\n private scrollToEased(newTimelineX: number): Observable<number> {\n return new Observable<number>(o$ => {\n let currentTimelineX = this.getTimecodedGroupPosition().x;\n animate({\n layer: this.timecodedGroup.getLayer(),\n duration: Constants.TIMELINE_SCROLL_EASED_DURATION_MS,\n from: currentTimelineX,\n to: newTimelineX,\n onUpdateHandler: (frame, value) => {\n this.scrollTimeline(value)\n },\n onCompleteHandler: (frame, value) => {\n o$.next(this.getHorizontalScrollPercent());\n o$.complete();\n }\n })\n })\n }\n\n private isPlayheadInTimecodedView(): boolean {\n return this.isInVisiblePositionRange(this.playhead.getPlayheadPosition());\n }\n\n private updateScrollWithPlayhead() {\n // console.log('setting playhead sync to', value)\n let playheadPosition = this.playhead.getPlayheadPosition();\n let isInBeforeTimecodedView = playheadPosition < this.getVisiblePositionRange().start;\n let isInVisiblePositionRange = this.isInVisiblePositionRange(playheadPosition);\n this.scrollWithPlayhead = isInVisiblePositionRange && !isInBeforeTimecodedView; // we scroll with playhead only if playhed slips to right of timecoded view\n }\n\n /***\n * Scrolls timecoded group so that playhead is at left most position\n * @private\n */\n private syncTimelineWithPlayhead(): Observable<number> {\n return new Observable<number>(o$ => {\n this.scrollToEased(-this.playhead.getPlayheadPosition()).pipe(map(result => {\n o$.next(this.getHorizontalScrollPercent());\n o$.complete();\n })).subscribe()\n })\n }\n\n private setTimelinePosition(x: number) {\n let newX = this.getConstrainedTimelineX(x);\n this.timecodedGroup.x(newX);\n }\n\n private scrollTimeline(x: number) {\n let currentX = this.getTimecodedGroupPosition().x;\n this.setTimelinePosition(x);\n let newX = this.getTimecodedGroupPosition().x\n if (newX !== currentX) {\n this.scrollbar.updateScrollHandle(this);\n this.setHorizontalScrollPercent(this.scrollbar.getScrollHandlePercent()) // we should not use timeline easing scrolling here\n this.onScroll$.next(this.createScrollEvent())\n }\n }\n\n private calculateTimelineXFromScrollPercent(percent: number): number {\n percent = this.getConstrainedScrollPercent(percent);\n\n let timecodedGroupDimension = this.getTimecodedGroupDimension();\n let containerDimension = this.getTimecodedContainerDimension();\n\n if (timecodedGroupDimension.width > containerDimension.width) {\n let maxScroll = new Decimal(containerDimension.width - timecodedGroupDimension.width);\n return new Decimal(percent).mul(maxScroll).div(100).toDecimalPlaces(2).toNumber();\n } else {\n return 0;\n }\n }\n\n // endregion\n\n // region zoom\n\n getZoomPercent(): number {\n let timecodedGroupDimension = this.getTimecodedGroupDimension();\n let containerDimension = this.getTimecodedContainerDimension();\n\n if (timecodedGroupDimension.width > containerDimension.width) {\n return new Decimal(timecodedGroupDimension.width).mul(100).div(containerDimension.width).round().toNumber();\n } else {\n return this.zoomBaseline;\n }\n }\n\n zoomTo(percent: number): Observable<number> {\n percent = z.coerce.number()\n .min(this.getZoomBaseline())\n .max(this.getZoomMax())\n .parse(percent);\n\n return this.zoomToEased(percent);\n }\n\n zoomIn(): Observable<number> {\n return new Observable<number>(o$ => {\n this.zoomStep(ZoomDirection.IN, this.timecodedGroup.getRelativePointerPosition().x);\n o$.next(this.getZoomPercent());\n o$.complete();\n })\n }\n\n zoomOut(): Observable<number> {\n return new Observable<number>(o$ => {\n this.zoomStep(ZoomDirection.OUT, this.timecodedGroup.getRelativePointerPosition().x);\n o$.next(this.getZoomPercent());\n o$.complete();\n })\n }\n\n private zoomToEased(percent: number): Observable<number> {\n return new Observable<number>(o$ => {\n percent = this.getConstrainedZoomPercent(percent);\n let currentWidth = this.getTimecodedGroupDimension().width;\n let newWidth = this.calculateWidthFromZoomRatioPercent(percent);\n animate({\n layer: this.timecodedGroup.getLayer(),\n duration: Constants.TIMELINE_ZOOM_EASED_DURATION_MS,\n from: currentWidth,\n to: newWidth,\n onUpdateHandler: (frame, value) => {\n this.zoomByWidth(value, this.resolveZoomFocus());\n },\n onCompleteHandler: (frame, value) => {\n o$.next(this.getZoomPercent());\n o$.complete();\n }\n })\n })\n }\n\n private zoomStep(direction: ZoomDirection, zoomFocus: number) {\n let currentWidthDecimal = new Decimal(this.getTimecodedGroupDimension().width);\n let newWidth = (direction === ZoomDirection.IN ? currentWidthDecimal.mul(this.zoomScale) : currentWidthDecimal.div(this.zoomScale)).round().toNumber();\n this.zoomByWidth(newWidth, zoomFocus);\n }\n\n private zoomByPercent(percent: number, updateScrollbar = true): number {\n percent = this.getConstrainedZoomPercent(percent);\n let newWidth = this.calculateWidthFromZoomRatioPercent(percent);\n this.zoomByWidth(newWidth, this.resolveZoomFocus(), updateScrollbar);\n return this.getZoomPercent();\n }\n\n private zoomByWidth(newWidth: number, zoomFocus: number, updateScrollbar = true) {\n let currentX = this.getTimecodedGroupPosition().x;\n let currentWidth = this.getTimecodedGroupDimension().width;\n\n newWidth = this.getConstrainedWidth(newWidth);\n let newX = this.calculateNewPosition(newWidth, zoomFocus);\n\n this.hideThumbnailHover();\n this.timecodedGroup.setAttrs({\n width: newWidth,\n x: newX\n })\n\n this.timecodedGroupNodes.forEach(node => {\n node.width(newWidth);\n })\n\n let timecodedGroupDimension = this.getTimecodedGroupDimension();\n if (timecodedGroupDimension.width !== currentWidth || this.getTimecodedGroupPosition().x !== currentX) {\n // scrollbar\n if (updateScrollbar) {\n this.scrollbar.updateScrollHandle(this);\n } else {\n // zoom action is most likely coming from scrollbar itself\n this.playheadHover.toggleVisible(false)\n }\n // scroll\n this.setHorizontalScrollPercent(this.scrollbar.getScrollHandlePercent()) // we should not use timeline easing scrolling here\n\n this.onZoom$.next(this.createZoomEvent())\n this.onScroll$.next(this.createScrollEvent())\n }\n }\n\n /***\n * Move group proportionally to reposition focus\n *\n * @param newWidth\n * @param repositionFocus\n * @private\n */\n private calculateNewPosition(newWidth: number, repositionFocus: number = 0): number {\n let currentX = this.getTimecodedGroupPosition().x;\n let currentWidth = this.getTimecodedGroupDimension().width;\n let containerRect = this.getTimecodedContainerRect();\n\n let zoomDirection = newWidth > currentWidth ? ZoomDirection.IN : ZoomDirection.OUT;\n\n // move group proportionally to zoom focus\n let newX = currentX;\n\n // snap start or end if needed\n if (newWidth === containerRect.width) {\n newX = 0; // snap start\n } else if (newWidth > containerRect.width) {\n if (repositionFocus > 0) {\n let zoomFocusRationDecimal = new Decimal(repositionFocus).div(currentWidth);\n if (zoomFocusRationDecimal.greaterThanOrEqualTo(0) && zoomFocusRationDecimal.lessThanOrEqualTo(1)) {\n let totalDelta = newWidth - currentWidth;\n let leftSideDelta = zoomFocusRationDecimal.mul(totalDelta).abs().round().toNumber();\n let x = currentX + leftSideDelta * (zoomDirection === ZoomDirection.IN ? -1 : 1)\n newX = x < 0 ? x : 0;\n }\n }\n\n if (newWidth > containerRect.width) {\n let containerX2 = containerRect.x + containerRect.width;\n let newX2 = newX + newWidth;\n if (newX2 <= containerX2) { // snap end\n newX = containerRect.width - newWidth; // snap end\n }\n }\n }\n\n return newX;\n }\n\n private resolveZoomFocus(): number {\n if (this.videoController.isVideoLoaded()) {\n return this.resolvePlayheadSyncPosition();\n } else {\n return this.isSnappedStart() ? 0 : this.isSnappedEnd() ? this.getTimecodedGroupDimension().width : this.getTimecodedGroupDimension().width / 2;\n }\n }\n\n private calculateWidthFromZoomRatioPercent(zoomRatioPercent): number {\n return new Decimal(this.getTimecodedContainerDimension().width).mul(zoomRatioPercent).div(100).round().toNumber();\n }\n\n private getConstrainedWidth(newWidth: number): number {\n let containerDimension = this.getTimecodedContainerDimension();\n return newWidth >= containerDimension.width ? newWidth <= this.maxTimecodedGroupWidth ? newWidth : this.maxTimecodedGroupWidth : containerDimension.width;\n }\n\n private getConstrainedZoomPercent(percent: number): number {\n return percent < this.zoomBaseline ? this.zoomBaseline : percent > this.zoomMax ? this.zoomMax : percent;\n }\n\n private getConstrainedScrollPercent(scrollPercent: number): number {\n return scrollPercent < 0 ? 0 : scrollPercent > 100 ? 100 : scrollPercent;\n }\n\n // endregion\n\n // region playhead\n\n private playheadHoverMove(x: number) {\n if (this.videoController.isVideoLoaded() && this.playheadHover) {\n let isSnapped = false;\n\n if (!this.videoController.isPlaying()) {\n // check if we need to snap playheadHover to playhead\n let playheadPosition = this.resolvePlayheadSyncPosition();\n if (x > (playheadPosition - this.playheadHoverSnapArea) && x < (playheadPosition + this.playheadHoverSnapArea)) {\n x = playheadPosition;\n isSnapped = true;\n }\n }\n\n this.playheadHover.sync(x, isSnapped);\n }\n }\n\n private resolvePlayheadSyncPosition(): number {\n return this.timeToTimelinePosition(this.videoController.getCurrentTime());\n }\n\n // endregion\n\n // region video\n\n private onVideoLoadedEvent(event: VideoLoadedEvent) {\n this.fireVideoEventBreaker();\n\n // if video was loaded previously, remove all content associated with it\n this.clearContent();\n\n this.syncVideoMetadata();\n\n this.videoController.onVideoTimeChange$.pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n this.syncVideoMetadata();\n })\n\n this.videoController.onPlay$.pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n this.updateScrollWithPlayhead();\n })\n }\n\n private fireVideoEventBreaker() {\n if (this.videoEventBreaker$) {\n this.videoEventBreaker$.next();\n this.videoEventBreaker$.complete();\n }\n this.videoEventBreaker$ = new Subject<void>();\n }\n\n setThumbnailVttFile(thumbnailVttFile: ThumbnailVttFile) {\n this.thumbnailVttFile = thumbnailVttFile;\n }\n\n private syncVideoMetadata() {\n // console.debug('timeline.syncVideoMetadata')\n // follows playhead and scrolls playhead to left if playhead moves out of view\n // console.log(`this.syncTimelineWithPlayheadEnabled=${this.syncTimelineWithPlayheadEnabled} this.isPlayheadInView()=${this.isPlayheadInView()} this.syncTimelineWithPlayheadInProgress=${this.syncTimelineWithPlayheadInProgress}`)\n if (this.scrollWithPlayhead && !this.isPlayheadInTimecodedView() && !this.syncTimelineWithPlayheadInProgress) {\n this.syncTimelineWithPlayheadInProgress = true;\n this.syncTimelineWithPlayhead().subscribe(result => {\n this.syncTimelineWithPlayheadInProgress = false;\n })\n }\n }\n\n // endregion\n\n // region API\n addLane(timelaneLane: GenericTimelaneLane): void {\n if (this.timelaneLanesMap.has(timelaneLane.getId())) {\n throw new Error(`TimelineLane with id=${timelaneLane.getId()} already exist`)\n }\n\n let isFirstLane = this.timelaneLanes.length < 1;\n let position: Position = {\n ...Constants.POSITION_TOP_LEFT\n }\n\n if (!isFirstLane) {\n position.y = this.timelaneLanes\n .map(p => p.getRect().height)\n .reduce((partialSum, height) => partialSum + height, 0);\n }\n\n timelaneLane.setTimeline(this);\n timelaneLane.setVideoController(this.videoController);\n\n timelaneLane.setTimelinePosition(position)\n timelaneLane.initCanvasNode();\n\n this.timelaneLanes.push(timelaneLane);\n this.timelaneLanesMap.set(timelaneLane.getId(), timelaneLane);\n\n this.bodyContentGroup.add(timelaneLane.getCanvasNode());\n\n this.settleLayout();\n }\n\n removeLane(id: string) {\n if (!this.timelaneLanesMap.has(id)) {\n throw new Error(`TimelineLane with id=${id} doesn't exist`)\n }\n\n let timelineLane = this.timelaneLanesMap.get(id);\n\n this.timelaneLanes.splice(this.timelaneLanes.findIndex(p => p.getId() === id), 1);\n this.timelaneLanesMap.delete(id);\n timelineLane.destroy();\n\n // reposition\n let position: Position = {\n ...Constants.POSITION_TOP_LEFT\n }\n\n this.timelaneLanes.forEach(timelineLane => {\n // console.debug(timelineLane.getId())\n // console.debug(timelineLane.getRect())\n\n timelineLane.setTimelinePosition({\n ...position\n })\n position.y = position.y + timelineLane.getRect().height;\n })\n\n this.timelaneLanes.forEach(timelineLane => {\n timelineLane.onMeasurementsChange()\n })\n\n this.settleLayout();\n }\n\n getScrollbar(): Scrollbar {\n return this.scrollbar;\n }\n\n addLanes(timelaneLanes: GenericTimelaneLane[]): void {\n timelaneLanes.forEach(p => this.addLane(p));\n }\n\n getLanes(): GenericTimelaneLane[] {\n return [...this.timelaneLanesMap.values()];\n }\n\n getLane(id: string): GenericTimelaneLane {\n return this.timelaneLanesMap.get(id);\n }\n\n getScrubberLane(): ScrubberLane {\n return this.getLane(SCRUBBER_LANE_ID) as ScrubberLane;\n }\n\n getMarkerLane(id: string): MarkerLane {\n let lane = this.getLane(id);\n return lane instanceof MarkerLane ? lane : void 0;\n }\n\n getThumbnailLane(id: string): ThumbnailLane {\n let lane = this.getLane(id);\n return lane instanceof ThumbnailLane ? lane : void 0;\n }\n\n getSubtitlesLane(id: string): SubtitlesLane {\n let lane = this.getLane(id);\n return lane instanceof SubtitlesLane ? lane : void 0;\n }\n\n getAudioTrackLane(id: string): AudioTrackLane {\n let lane = this.getLane(id);\n return lane instanceof AudioTrackLane ? lane : void 0;\n }\n\n createMarkerLane(config: MarkerLaneConfig): MarkerLane {\n let lane = new MarkerLane(config);\n this.addLane(lane);\n return lane;\n }\n\n createThumbnailLane(config: ThumbnailLaneConfig): ThumbnailLane {\n let lane = new ThumbnailLane(config);\n this.addLane(lane);\n return lane;\n }\n\n createSubtitlesLane(config: SubtitlesLaneConfig): SubtitlesLane {\n let lane = new SubtitlesLane(config);\n this.addLane(lane);\n return lane;\n }\n\n // endregion\n\n isTimelineReady(): boolean {\n return this.videoController.isVideoLoaded();\n }\n\n addToTimecodedBaseGroup(node: Konva.Group | Konva.Shape) {\n this.timecodedBaseGroup.add(node);\n }\n\n addToTimecodedSurfaceGroup(node: Konva.Group | Konva.Shape) {\n this.timecodedSurfaceGroup.add(node);\n }\n\n addToTimecodedMarkersGroup(node: Konva.Group | Konva.Shape) {\n this.timecodedMarkersGroup.add(node);\n }\n\n addToTimecodedThumbnailsGroup(node: Konva.Group | Konva.Shape) {\n this.timecodedThumbnailsGroup.add(node);\n }\n\n addToTimecodedSubtitlesGroup(node: Konva.Group | Konva.Shape) {\n this.timecodedSubtitlesGroup.add(node);\n }\n\n addToTimecodedAudioGroup(node: Konva.Group | Konva.Shape) {\n this.timecodedAudioGroup.add(node);\n }\n\n constrainTimelinePosition(x: number): number {\n let timecodedGroupDimension = this.getTimecodedGroupDimension();\n return x < 0 ? 0 : x > timecodedGroupDimension.width ? timecodedGroupDimension.width : x;\n }\n\n timelinePositionToTime(xOnTimeline: number): number {\n let constrainedX = this.constrainTimelinePosition(xOnTimeline);\n return this.videoController.isVideoLoaded() ? new Decimal(constrainedX).mul(this.videoController.getDuration()).div(this.getTimecodedGroupDimension().width).toNumber() : 0;\n }\n\n timelinePositionToTimeFormatted(x: number): string {\n return this.videoController.isVideoLoaded() ? this.videoController.formatTimestamp(this.timelinePositionToTime(x)) : '';\n }\n\n timelinePositionToFrame(x: number): number {\n return this.videoController.isVideoLoaded() ? this.videoController.calculateTimeToFrame(this.timelinePositionToTime(x)) : 0;\n }\n\n timeToTimelinePosition(time: number): number {\n return new Decimal(time).mul(this.getTimecodedGroupDimension().width).div(this.videoController.getDuration()).toNumber();\n }\n\n private getConstrainedTimelineX(x: number): number {\n let timecodedGroupDimension = this.getTimecodedGroupDimension();\n let containerDimension = this.getTimecodedContainerDimension();\n if (timecodedGroupDimension.width <= containerDimension.width) {\n return 0;\n } else {\n let minX = containerDimension.width - timecodedGroupDimension.width;\n return x < minX ? minX : x > 0 ? 0 : x;\n }\n }\n\n getBodyGroupRect(): RectMeasurement {\n return {\n ...this.bodyGroup.getPosition(),\n ...this.bodyGroup.getSize()\n };\n }\n\n getLeftPanelRect(): RectMeasurement {\n return {\n ...this.leftPanel.getPosition(),\n ...this.leftPanel.getSize()\n };\n }\n\n getLeftPanelVisible(): boolean {\n return this.leftPanelVisible;\n }\n\n getRightPanelRect(): RectMeasurement {\n return {\n ...this.rightPanel.getSize(),\n ...this.rightPanel.getPosition()\n };\n }\n\n getTimecodedContainerDimension(): Dimension {\n return this.timecodedContainer.getSize()\n }\n\n getTimecodedContainerPosition(): Position {\n return this.timecodedContainer.getPosition()\n }\n\n getTimecodedContainerRect(): RectMeasurement {\n return {\n ...this.getTimecodedContainerDimension(),\n ...this.getTimecodedContainerPosition()\n }\n }\n\n getTimecodedGroupDimension(): Dimension {\n return this.timecodedGroup.getSize()\n }\n\n getTimecodedGroupPosition(): Position {\n return this.timecodedGroup.getPosition()\n }\n\n getTimecodedGroupRect(): RectMeasurement {\n return {\n ...this.timecodedGroup.getPosition(),\n ...this.timecodedGroup.getSize()\n };\n }\n\n getTimecodedGroupHorizontalMeasurement(): HorizontalMeasurement {\n return {\n x: this.timecodedGroup.x(),\n width: this.timecodedGroup.width()\n }\n }\n\n getRelativePointerPosition(): Position {\n return this.timecodedGroup.getRelativePointerPosition();\n }\n\n getLayoutGroupDimension(): Dimension {\n return this.layoutGroup.getSize();\n }\n\n getLayoutGroupPosition(): Position {\n return this.layoutGroup.getPosition();\n }\n\n getRect(): RectMeasurement {\n return {\n ...this.getLayoutGroupDimension(),\n ...this.getLayoutGroupPosition()\n }\n }\n\n getVisiblePositionRange(): {start: number, end: number} {\n let start = Math.abs(this.timecodedGroup.x());\n let end = start + this.timecodedContainer.width();\n return {start, end};\n }\n\n isInVisiblePositionRange(x: number): boolean {\n let visiblePosition = this.getVisiblePositionRange();\n return x >= visiblePosition.start && x <= visiblePosition.end;\n }\n\n isSnappedStart(): boolean {\n return this.getTimecodedGroupPosition().x === 0;\n }\n\n isSnappedEnd(): boolean {\n return (this.getTimecodedContainerDimension().width - this.getTimecodedGroupDimension().width) === this.getTimecodedGroupPosition().x;\n }\n\n getVisibleTimeRange(): { start: number, end: number } {\n let positionRange = this.getVisiblePositionRange();\n let start = this.timelinePositionToTime(positionRange.start);\n let end = this.timelinePositionToTime(positionRange.end);\n return {start, end}\n }\n\n private getZoomBaseline(): number {\n return this.zoomBaseline;\n }\n\n private getZoomMax(): number {\n return this.zoomMax;\n }\n\n private fetchThumbnailVttFile(): Observable<ThumbnailVttFile> {\n if (this.thumbnailVttUrl) {\n return ThumbnailVttFile.create(this.thumbnailVttUrl).pipe(map(thumbnailVttFile => {\n this.thumbnailVttFile = thumbnailVttFile;\n return thumbnailVttFile;\n }), catchError((err, caught) => {\n return of(void 0);\n }))\n } else {\n return of(void 0);\n }\n }\n\n toggleLeftPanelVisible(visible: boolean) {\n this.leftPanelVisible = visible;\n this.leftPanel.visible(visible);\n this.settleLayout();\n this.timelaneLanes.forEach(timelineLane => {\n timelineLane.onMeasurementsChange();\n })\n this.headerTimecodeDisplay.setVisible(!visible);\n }\n\n clearContent() {\n this.setThumbnailVttFile(void 0);\n this.timelaneLanes.forEach(timelineLane => {\n timelineLane.clearContent();\n })\n this.zoomByPercent(this.zoomBaseline);\n }\n\n}\n","import Decimal from \"decimal.js\";\n\nexport class FrameUtil {\n\n /***\n * Returns frame number\n *\n * @param time in Seconds\n * @param frameRateDecimal\n */\n static timeToFrame(time: number, frameRateDecimal: Decimal): number {\n return frameRateDecimal.mul(time).floor().toNumber();\n }\n\n /***\n * Returns time in seconds\n *\n * @param framesCount\n * @param frameRateDecimal\n * @param timeCorrection\n */\n static frameToTime(framesCount: number, frameRateDecimal: Decimal): number {\n return new Decimal(framesCount).dividedBy(frameRateDecimal).toNumber();\n }\n}\n","import {Subject} from \"rxjs\";\n\nexport function completeSubject(subject: Subject<void>) {\n subject.next();\n subject.complete();\n}\n","/**\n * Copyright 2023 ByOmakase, LLC (https://byomakase.org)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class BrowserProvider {\n private static _instance: BrowserProvider;\n \n private _userAgent: string;\n\n private _isFirefox;\n private _isEdge;\n private _isChromium;\n private _isChrome;\n private _isAndroid;\n private _isSafari;\n\n private constructor() {\n this.resolveUserAgent();\n }\n\n public static instance(): BrowserProvider {\n if (!BrowserProvider._instance) {\n BrowserProvider._instance = new BrowserProvider();\n }\n return BrowserProvider._instance;\n }\n\n\n private resolveUserAgent() {\n this._userAgent = window.navigator && window.navigator.userAgent || '';\n\n this._isAndroid = (/Android/i).test(this._userAgent);\n this._isFirefox = (/Firefox/i).test(this._userAgent);\n this._isEdge = (/Edg/i).test(this._userAgent);\n this._isChromium = ((/Chrome/i).test(this._userAgent) || (/CriOS/i).test(this._userAgent));\n this._isChrome = !this.isEdge && this.isChromium;\n this._isSafari = (/Safari/i).test(this._userAgent) && !this.isChrome && !this.isAndroid && !this.isEdge;\n }\n\n get isSafari() {\n return this._isSafari;\n }\n\n get isFirefox() {\n return this._isFirefox;\n }\n\n get isEdge() {\n return this._isEdge;\n }\n\n get isChromium() {\n return this._isChromium;\n }\n\n get isChrome() {\n return this._isChrome;\n }\n\n get isAndroid() {\n return this._isAndroid;\n }\n}\n","import Decimal from \"decimal.js\";\nimport {FrameUtil} from \"./frame-util\";\n\nexport class TimeUtil {\n public static readonly VIDEO_ZERO_TIMESTAMP = `${TimeUtil.padZero(0)}:${TimeUtil.padZero(0)}:${TimeUtil.padZero(0)}:${TimeUtil.padZero(0)}`;\n\n static formatVideoTimestamp(time: number, frameRateDecimal: Decimal) {\n if (time <= 0) {\n return TimeUtil.VIDEO_ZERO_TIMESTAMP;\n }\n\n const hours = Math.floor(time / 3600);\n const minutes = Math.floor((time % 3600) / 60);\n const seconds = Math.floor(time % 60);\n\n let frameInSecond = new Decimal(FrameUtil.timeToFrame(time, frameRateDecimal)).mod(frameRateDecimal).toNumber();\n return `${TimeUtil.padZero(hours)}:${TimeUtil.padZero(minutes)}:${TimeUtil.padZero(seconds)}:${TimeUtil.padZero(frameInSecond)}`;\n }\n\n private static padZero(num, length = 2) {\n return num.toString().padStart(length, \"0\");\n }\n}\n","import {BehaviorSubject, Subject} from \"rxjs\";\n\nexport interface PlaybackState {\n playing: boolean;\n paused: boolean;\n waiting: boolean;\n seeking: boolean;\n buffering: boolean;\n ended: boolean;\n}\n\nexport class PlaybackStateMachine {\n public readonly onChange$: Subject<PlaybackState>;\n\n private _state: PlaybackState = {\n playing: false,\n paused: true,\n waiting: false,\n seeking: false,\n buffering: false,\n ended: false\n };\n\n constructor() {\n this.onChange$ = new BehaviorSubject(this._state)\n }\n\n private updateState(partialState: Partial<PlaybackState>) {\n let newState = {\n ...this._state,\n ...partialState\n }\n let isEqual = this.compare(this._state, newState) === 0;\n this._state = newState;\n if (!isEqual) {\n this.onChange$.next(this._state);\n }\n }\n\n private compare(o1: PlaybackState, o2: PlaybackState): number {\n return (o1.playing === o2.playing\n && o1.paused === o2.paused\n && o1.waiting === o2.waiting\n && o1.seeking === o2.seeking\n && o1.buffering === o2.buffering\n && o1.ended === o2.ended\n ) ? 0 : -1;\n }\n\n get state(): PlaybackState {\n return this._state;\n }\n\n setPlaying() {\n this.updateState({\n playing: true,\n paused: false,\n waiting: false,\n seeking: false,\n buffering: false,\n ended: false\n })\n }\n\n setPaused() {\n this.updateState({\n playing: false,\n paused: true,\n waiting: false,\n seeking: false,\n buffering: false,\n ended: false\n })\n }\n\n setEnded() {\n this.updateState({\n playing: false,\n paused: true,\n waiting: false,\n seeking: false,\n buffering: false,\n ended: true\n })\n }\n\n set waiting(value: boolean) {\n this.updateState({\n waiting: value\n })\n }\n\n set seeking(value: boolean) {\n this.updateState({\n seeking: value\n })\n }\n\n set buffering(value: boolean) {\n this.updateState({\n buffering: value\n })\n }\n}\n","import Decimal from \"decimal.js\";\nimport {AudioEvent, VideoBufferingEvent, VideoEndedEvent, VideoLoadedEvent, VideoLoadingEvent, VideoPlayEvent, VideoSeekedEvent, VideoSeekingEvent, VideoTimeChangeEvent} from \"../types/events\";\nimport {BehaviorSubject, delay, first, fromEvent, interval, map, Observable, of, Subject, take, takeUntil} from \"rxjs\";\nimport {FrameUtil} from \"../util/frame-util\";\nimport {completeSubject} from \"../util/observable-util\";\nimport {BrowserProvider} from \"../common/browser-provider\";\nimport {VideoApi} from \"../api/video-api\";\nimport {z} from \"zod\";\nimport {TimeUtil} from \"../util/time-util\";\nimport {Video} from \"./video\";\nimport {DomController} from \"../dom/dom-controller\";\nimport {PlaybackState, PlaybackStateMachine} from \"./playback-state\";\nimport Hls from \"hls.js\";\nimport {Validators} from \"../validators\";\nimport {HelpMenuGroup} from \"../types\";\n\nexport const HTMLVideoElementEventKeys = {\n PAUSE: 'pause',\n WAITING: 'waiting',\n PLAYING: 'playing',\n TIMEUPDATE: 'timeupdate',\n SEEKING: 'seeking',\n SEEKED: 'seeked',\n LOADEDDATA: 'loadeddata',\n LOADEDMETEDATA: 'loadedmetadata',\n ENDED: 'ended',\n PROGRESS: 'progress'\n}\n\nexport interface BufferedTimespan {\n start: number;\n end: number;\n}\n\nexport type HTMLVideoElementCrossorigin = 'anonymous' | 'use-credentials';\n\nenum SeekDirection {\n BACKWARD = 'BACKWARD',\n FORWARD = 'FORWARD'\n}\n\ninterface VideoFrameCallbackData {\n now: DOMHighResTimeStamp;\n metadata: VideoFrameCallbackMetadata;\n}\n\ninterface SyncConditions {\n seekToFrame?: number;\n seekToTimestamp?: number;\n currentTime?: number;\n videoFrameCallbackData?: VideoFrameCallbackData\n}\n\n\nexport abstract class VideoController implements VideoApi {\n protected browserProvider: BrowserProvider = BrowserProvider.instance();\n\n protected domController: DomController;\n protected crossorigin: HTMLVideoElementCrossorigin;\n protected videoElement: HTMLVideoElement;\n protected helpMenuGroups: HelpMenuGroup[] = [];\n\n protected video: Video;\n protected _isVideoLoaded = false;\n protected playbackStateMachine: PlaybackStateMachine;\n\n protected frameRateDecimal: Decimal;\n protected userSetDuration: number = NaN;\n protected frameDurationSpillOverCorrection: number = 0.000001;\n protected syncStepCurrentTimeMediaTime: number;\n protected syncLoopMaxIterations = 20;\n protected videoFrameCallbackHandle: number;\n\n protected seekInProgress: boolean = false;\n\n protected videoStalledCheckIntervalMs = 700;\n protected videoStalledCheckLastCurrentTime: number;\n\n // region internal events\n /***\n * Stream of data provided by videoElement.requestVideoFrameCallback()\n * @protected\n */\n protected readonly videoFrameCallback$ = new BehaviorSubject<VideoFrameCallbackData>(null);\n protected videoEventBreaker$ = new Subject<void>();\n\n /***\n * Cancels previous unfinished seek operation if new seek is requested\n * @protected\n */\n protected seekBreaker$ = new Subject<void>();\n\n // endregion\n\n public readonly onVideoLoaded$: Subject<VideoLoadedEvent> = new BehaviorSubject<VideoLoadedEvent>(void 0);\n public readonly onVideoLoading$: Subject<VideoLoadingEvent> = new Subject<VideoLoadingEvent>();\n public readonly onPlay$: Subject<VideoPlayEvent> = new Subject<VideoPlayEvent>();\n public readonly onPause$: Subject<VideoPlayEvent> = new Subject<VideoPlayEvent>();\n public readonly onVideoTimeChange$: Subject<VideoTimeChangeEvent> = new Subject<VideoTimeChangeEvent>();\n public readonly onSeeking$: Subject<VideoSeekingEvent> = new Subject<VideoSeekingEvent>();\n public readonly onSeeked$: Subject<VideoSeekedEvent> = new Subject<VideoSeekedEvent>();\n public readonly onBuffering$: Subject<VideoBufferingEvent> = new Subject<VideoBufferingEvent>();\n public readonly onEnded$: Subject<VideoEndedEvent> = new Subject<VideoEndedEvent>();\n public readonly onAudioSwitched$: Subject<AudioEvent> = new Subject<AudioEvent>();\n public readonly onPlaybackState$: Subject<PlaybackState> = new Subject<PlaybackState>();\n public readonly onHelpMenuChange$: Subject<void> = new BehaviorSubject<void>(void 0);\n\n protected constructor(domController: DomController, crossorigin: HTMLVideoElementCrossorigin) {\n this.domController = domController;\n this.crossorigin = crossorigin;\n\n this.videoElement = this.domController.videoElement;\n\n this.videoElement.crossOrigin = this.crossorigin;\n\n if (!this.videoElement) {\n throw new Error('VideoController element not set');\n }\n\n this.videoFrameCallback$.subscribe(videoFrameCallbackData => {\n // console.log(videoFrameCallbackData)\n if (videoFrameCallbackData) {\n if (!this.seekInProgress) {\n if (this.isPlaying()) {\n this.videoTimeChangeHandlerExecutor();\n } else if (this.isPaused()) {\n // video time change event occurred but video is paused, sync frames just in case\n // this.syncVideoFrames({}).subscribe(result => {\n // this.videoTimeChangeHandlerExecutor();\n // })\n }\n }\n }\n })\n }\n\n loadVideo(sourceUrl: string, frameRate: number, duration: number): Observable<Video> {\n sourceUrl = Validators.url()(sourceUrl);\n\n if (!isNaN(duration)) {\n this.userSetDuration = duration;\n }\n\n frameRate = z.coerce.number()\n .min(0)\n .max(100)\n .parse(frameRate);\n\n this.onVideoLoading$.next({\n sourceUrl: sourceUrl,\n frameRate: frameRate\n });\n\n this._isVideoLoaded = false;\n this.video = void 0;\n\n this.detachVideoEventListeners();\n\n return this.videoLoad(sourceUrl, frameRate, duration).pipe(map(video => {\n this.video = video;\n\n this.frameRateDecimal = new Decimal(this.video.frameRate);\n this.syncStepCurrentTimeMediaTime = new Decimal(this.video.frameDuration).div(10).toNumber();\n\n this.playbackStateMachine = new PlaybackStateMachine();\n\n this.initEventHandlers();\n this.startVideoFrameCallback();\n\n this._isVideoLoaded = true;\n\n this.onVideoLoaded$.next({\n video: this.video\n });\n\n return video;\n }));\n }\n\n protected abstract videoLoad(sourceUrl: string, frameRate: number, duration: number): Observable<Video>;\n\n protected initEventHandlers() {\n fromEvent(this.videoElement, HTMLVideoElementEventKeys.PAUSE).pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n if (this.browserProvider.isSafari) {\n // if native video is loaded in Safari, we search one control frame forward, because image in video element and currentTime / mediaTime are not in sync\n let currentTimePlusOneFrame = this.getCurrentTime() + this.video.frameDuration;\n this._seekTimeAndSyncNoEmitEvents(currentTimePlusOneFrame).subscribe(result => {\n this.videoTimeChangeHandlerExecutor();\n this.onPause$.next({})\n })\n } else {\n this.syncVideoFrames({}).subscribe(result => {\n this.videoTimeChangeHandlerExecutor();\n this.onPause$.next({})\n })\n }\n })\n\n fromEvent(this.videoElement, HTMLVideoElementEventKeys.WAITING).pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n // console.debug(`videoElement WAITING`, event)\n this.playbackStateMachine.waiting = true;\n })\n\n fromEvent(this.videoElement, HTMLVideoElementEventKeys.PLAYING).pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n // console.debug(`videoElement PLAYING`, event)\n this.playbackStateMachine.setPlaying()\n this.videoStalledCheckLastCurrentTime = void 0;\n })\n\n fromEvent(this.videoElement, HTMLVideoElementEventKeys.PAUSE).pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n // console.debug(`videoElement PAUSE`, event)\n this.playbackStateMachine.setPaused()\n this.videoStalledCheckLastCurrentTime = void 0;\n })\n\n // https://developer.mozilla.org/en-US/docs/Web/Guide/Audio_and_video_delivery/buffering_seeking_time_ranges\n fromEvent(this.videoElement, HTMLVideoElementEventKeys.TIMEUPDATE).pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n // this.videoPlaybackStateHolder.setPlaying()\n // this.lastVideoTime = void 0;\n })\n\n fromEvent(this.videoElement, HTMLVideoElementEventKeys.PROGRESS).pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n this.onBuffering$.next({\n bufferedTimespans: this.getBufferedTimespans()\n })\n })\n\n fromEvent(this.videoElement, HTMLVideoElementEventKeys.ENDED).pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n this.onEnded$.next({})\n })\n\n this.playbackStateMachine.onChange$.pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n this.onPlaybackState$.next(event);\n })\n\n this.onPlay$.pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n this.playbackStateMachine.setPlaying()\n this.videoStalledCheckLastCurrentTime = void 0;\n })\n\n this.onPause$.pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n this.playbackStateMachine.setPaused()\n this.videoStalledCheckLastCurrentTime = void 0;\n })\n\n this.onSeeking$.pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n this.playbackStateMachine.seeking = true;\n })\n\n this.onSeeked$.pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n this.playbackStateMachine.seeking = false;\n })\n\n this.onEnded$.pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n this.playbackStateMachine.setEnded()\n this.videoStalledCheckLastCurrentTime = void 0;\n })\n\n interval(this.videoStalledCheckIntervalMs).pipe(takeUntil(this.videoEventBreaker$)).subscribe((value) => {\n let currentTime = this.getCurrentTime();\n\n if (!this.videoStalledCheckLastCurrentTime) {\n this.videoStalledCheckLastCurrentTime = currentTime;\n return;\n }\n\n if (this.playbackStateMachine.state.playing) {\n let timeOffset = ((this.videoStalledCheckIntervalMs * 0.8) / 1000) * this.getPlaybackRate(); // in seconds\n let comparisonTime = this.videoStalledCheckLastCurrentTime + timeOffset;\n\n let isWaiting = currentTime < comparisonTime;\n\n this.playbackStateMachine.waiting = isWaiting;\n\n this.videoStalledCheckLastCurrentTime = currentTime\n }\n })\n }\n\n getBufferedTimespans(): BufferedTimespan[] {\n if (!this.isVideoLoaded()) {\n return [];\n }\n\n let result: BufferedTimespan[] = [];\n let timeRanges: TimeRanges = this.videoElement.buffered;\n for (let i = 0; i < timeRanges.length; i++) {\n result.push({\n start: timeRanges.start(i),\n end: timeRanges.end(i)\n })\n }\n return result;\n }\n\n protected startVideoFrameCallback() {\n let nextVideoFrameCallback = () => {\n this.videoFrameCallbackHandle = this.videoElement.requestVideoFrameCallback((now, metadata) => {\n onVideoFrameCallback({\n now: now,\n metadata: metadata\n })\n });\n }\n\n let onVideoFrameCallback = (videoFrameCallbackData: VideoFrameCallbackData) => {\n this.videoFrameCallback$.next(videoFrameCallbackData);\n nextVideoFrameCallback();\n }\n\n nextVideoFrameCallback();\n }\n\n private detachVideoEventListeners() {\n if (this.videoEventBreaker$) {\n this.videoEventBreaker$.next();\n this.videoEventBreaker$.complete();\n }\n this.videoEventBreaker$ = new Subject<void>();\n\n if (this.videoElement && this.videoFrameCallbackHandle) {\n this.videoElement.cancelVideoFrameCallback(this.videoFrameCallbackHandle);\n }\n }\n\n private syncVideoFrames(syncConditions: SyncConditions): Observable<boolean> {\n console.debug('syncFrames - START', syncConditions);\n return new Observable<boolean>(o$ => {\n let syncBreaker$ = new BehaviorSubject<boolean>(false);\n let syncLoopVideoCallbackBreaker$ = new Subject<void>();\n let syncLoopIterationsLeft = this.syncLoopMaxIterations;\n\n this.seekBreaker$.pipe(takeUntil(syncLoopVideoCallbackBreaker$)).subscribe(() => {\n console.debug(`%csyncFrames - seek breaker triggered`, 'color: gray')\n syncBreaker$.next(true);\n completeSync();\n })\n\n let completeSync = () => {\n completeSubject(syncLoopVideoCallbackBreaker$)\n o$.next();\n o$.complete();\n console.debug(`%csyncFrames - END`, 'color: gray')\n }\n\n let seek = (time) => {\n syncBreaker$.pipe(take(1)).subscribe((syncBreak) => {\n if (syncBreak) {\n console.debug(`%csyncFrames - seek skipped, breaker already triggered`, 'color: gray')\n } else {\n this._seekTimeFireAndForget(time)\n }\n })\n }\n\n if (this.isPlaying()) {\n console.debug(`%csyncFrames - SKIPPED: video is playing`, 'color: gray')\n completeSync();\n } else {\n let checkIfDone = (videoFrameCallbackData: VideoFrameCallbackData) => {\n let currentTime = this.getCurrentTime();\n let currentTimeFrame = this.calculateTimeToFrame(currentTime);\n let mediaTime = videoFrameCallbackData ? videoFrameCallbackData.metadata.mediaTime : void 0;\n let mediaTimeFrame = mediaTime ? this.calculateTimeToFrame(mediaTime) : void 0;\n\n if (this.isPlaying()) {\n console.debug(`%csyncFrames - UNKNOWN: video is playing`, 'color: gray')\n return true;\n }\n\n if (currentTimeFrame === 0) {\n console.debug(`%csyncFrames - OK: currentTimeFrame[${currentTimeFrame}] === 0`, 'color: green');\n return true;\n }\n\n if (syncConditions.seekToFrame) {\n if (syncConditions.seekToFrame === currentTimeFrame) {\n if ((currentTimeFrame === mediaTimeFrame) || !mediaTimeFrame) {\n console.debug(`%csyncFrames - OK: ((currentTimeFrame[${currentTimeFrame}] === mediaTimeFrame[${mediaTimeFrame}]) || !mediaTimeFrame[${mediaTimeFrame}])`, 'color: green');\n return true;\n }\n }\n } else {\n if ((currentTimeFrame === mediaTimeFrame) || !mediaTimeFrame) {\n console.debug(`%csyncFrames - OK: currentTimeFrame[${currentTimeFrame}] === mediaTimeFrame[${mediaTimeFrame}]`, 'color: green');\n return true;\n }\n }\n\n return false;\n }\n\n let seekToFrameTimeBaseline;\n\n let syncLoop = (videoFrameCallbackData: VideoFrameCallbackData) => {\n console.debug(`syncFrames.syncLoop - START (${this.syncLoopMaxIterations - syncLoopIterationsLeft})`, {\n syncConditions: syncConditions,\n videoFrameCallbackData: videoFrameCallbackData,\n dropped: this.videoElement.getVideoPlaybackQuality()\n });\n\n if (this.isPlaying()) {\n completeSync();\n return;\n }\n\n if (checkIfDone(videoFrameCallbackData)) {\n completeSync();\n return;\n }\n\n let currentTime = this.getCurrentTime();\n let currentTimeFrame = this.calculateTimeToFrame(currentTime);\n let mediaTime = videoFrameCallbackData ? videoFrameCallbackData.metadata.mediaTime : void 0;\n let mediaTimeFrame = mediaTime ? this.calculateTimeToFrame(mediaTime) : void 0;\n\n if (syncLoopIterationsLeft-- <= 0) {\n console.debug(`%csyncFrames - TOO MANY SYNCs, EXITING.. : currentTime[${currentTime}], mediaTime[${mediaTime}], currentTimeFrame[${currentTimeFrame}], mediaTimeFrame[${mediaTimeFrame}]`, 'color: red');\n completeSync();\n return;\n }\n\n console.debug(`syncFrames - currentTime[${currentTime}], mediaTime[${mediaTime}], currentTimeFrame[${currentTimeFrame}], mediaTimeFrame[${mediaTimeFrame}], `)\n\n if (syncConditions.seekToFrame) {\n\n if (!seekToFrameTimeBaseline) {\n seekToFrameTimeBaseline = currentTime;\n }\n\n if (syncConditions.seekToFrame === currentTimeFrame) {\n if ((currentTimeFrame === mediaTimeFrame) || !mediaTimeFrame) {\n console.debug(`%csyncFrames - OK: ((currentTimeFrame[${currentTimeFrame}] === mediaTimeFrame[${mediaTimeFrame}]) || !mediaTimeFrame[${mediaTimeFrame}])`, 'color: green');\n completeSync();\n } else {\n console.debug(`%csyncFrames - CORRECTION SEEK TO FRAME; currentTimeFrame[${currentTimeFrame}] ${currentTimeFrame > mediaTimeFrame ? '>' : '<'} mediaTimeFrame[${mediaTimeFrame}]`, 'color: red');\n\n let frameDiff = Math.abs(currentTimeFrame - mediaTimeFrame);\n console.debug(`%csyncFrames - frameDiff: ${frameDiff}`, 'color: orange');\n\n let frameCorrectionTime = this.syncStepCurrentTimeMediaTime * (currentTimeFrame > mediaTimeFrame ? 1 : -1);\n\n seek(Decimal.add(currentTime, frameCorrectionTime).toNumber())\n }\n } else {\n console.debug(`%csyncFrames - CORRECTION SEEK TO FRAME; syncConditions.seekToFrame[${syncConditions.seekToFrame}] !== currentTimeFrame[${currentTimeFrame}] | seekToFrameTimeBaseline=${seekToFrameTimeBaseline}`, 'color: red');\n\n let frameDiff = Math.abs(syncConditions.seekToFrame - currentTimeFrame);\n let frameCorrectionTime = (frameDiff) * this.video.frameDuration;\n\n let seekToDecimal = syncConditions.seekToFrame >= currentTimeFrame ? Decimal.add(seekToFrameTimeBaseline, frameCorrectionTime) : Decimal.sub(seekToFrameTimeBaseline, frameCorrectionTime);\n let seekTo = seekToDecimal.toNumber();\n\n seekToFrameTimeBaseline = seekTo;\n\n console.debug(`%csyncFrames - frameDiff: ${frameDiff}`, 'color: orange');\n console.debug(`%csyncFrames - frameCorrectionTime: ${frameCorrectionTime}`, 'color: orange');\n console.debug(`%csyncFrames - seekTo: ${seekTo}`, 'color: orange');\n\n seek(seekTo)\n }\n\n } else {\n if ((currentTimeFrame === mediaTimeFrame) || !mediaTimeFrame) {\n console.debug(`%csyncFrames - OK: currentTimeFrame[${currentTimeFrame}] === mediaTimeFrame[${mediaTimeFrame}]`, 'color: green');\n completeSync();\n } else {\n\n // // skip single sync loop if frameDiff is too big\n // if (mediaTimeFrame && currentTimeFrame) {\n // let frameDiff = Math.abs(currentTimeFrame - mediaTimeFrame);\n // if (frameDiff > this.getFrameRate()) {\n // console.debug(`%csyncFrames - SKIPPED syncLoop - frameDiff ${frameDiff}`, 'color: gray')\n // return;\n // }\n // }\n\n console.debug(`%csyncFrames - CORRECTION; currentTimeFrame[${currentTimeFrame}] ${currentTimeFrame > mediaTimeFrame ? '>' : '<'} mediaTimeFrame[${mediaTimeFrame}]`, 'color: red');\n if (currentTimeFrame > mediaTimeFrame) {\n seek(Decimal.add(currentTime, this.syncStepCurrentTimeMediaTime).toNumber())\n } else {\n seek(mediaTime + this.syncStepCurrentTimeMediaTime)\n }\n }\n }\n\n console.debug('syncFrames.syncLoop - END');\n }\n this.videoFrameCallback$.pipe(delay(syncConditions.seekToFrame ? 0 : 0), takeUntil(syncLoopVideoCallbackBreaker$)).subscribe(videoFrameCallbackData => {\n console.debug('syncFrames.syncLoop - videoFrameCallback$ trigger', videoFrameCallbackData);\n syncLoop(videoFrameCallbackData);\n })\n }\n });\n }\n\n private seekTimeAndSync(newTime: number, syncConditions: SyncConditions = {}): Observable<boolean> {\n return new Observable<boolean>(o$ => {\n // do we have seek already in progress\n if (this.seekInProgress) {\n this.seekBreaker$.next();\n this.seekBreaker$.complete();\n this.seekBreaker$ = new Subject<void>();\n }\n this.seekInProgress = true;\n\n if (!isNaN(newTime)) {\n newTime = newTime < 0 ? 0 : newTime > this.getDuration() ? this.getDuration() : newTime;\n\n fromEvent(this.videoElement, HTMLVideoElementEventKeys.SEEKING).pipe(takeUntil(this.seekBreaker$), take(1)).subscribe((event) => {\n // console.debug(`videoElement ${this.debugName.getTime()} ${VideoElementEvents.SEEKING}`, event)\n this.onSeeking$.next({\n newTime: newTime,\n currentTime: this.getCurrentTime()\n })\n })\n\n fromEvent(this.videoElement, HTMLVideoElementEventKeys.SEEKED).pipe(takeUntil(this.seekBreaker$), take(1)).subscribe((event) => {\n // console.debug(`videoElement ${this.debugName.getTime()} ${VideoElementEvents.SEEKED}`, event)\n\n this.syncVideoFrames(syncConditions).subscribe(result => {\n this.onSeeked$.next({\n currentTime: this.getCurrentTime()\n })\n\n this.seekInProgress = false;\n\n o$.next(true);\n o$.complete();\n\n this.videoTimeChangeHandlerExecutor();\n })\n\n })\n\n console.debug(`Seeking to timestamp: ${newTime}`)\n\n this.setCurrentTime(newTime);\n }\n });\n }\n\n private _seekTimeFireAndForget(newTime: number) {\n if (!isNaN(newTime)) {\n let currentTime = this.getCurrentTime();\n newTime = newTime < 0 ? 0 : newTime > this.getDuration() ? this.getDuration() : newTime;\n let seekDirection = newTime > currentTime ? SeekDirection.FORWARD : SeekDirection.BACKWARD;\n let diffDecimal = Decimal.sub(currentTime, newTime).abs();\n console.debug(`Seeking from currentTime[${currentTime}] to newTime[${newTime}], direction: ${seekDirection} ${diffDecimal.toNumber()}`)\n this.setCurrentTime(newTime);\n }\n }\n\n private _seekTimeAndSyncNoEmitEvents(newTime: number) {\n if (this.isPlaying()) {\n return of(false);\n } else {\n return new Observable<boolean>(o$ => {\n if (!isNaN(newTime)) {\n newTime = newTime < 0 ? 0 : newTime > this.getDuration() ? this.getDuration() : newTime;\n\n fromEvent(this.videoElement, HTMLVideoElementEventKeys.SEEKED).pipe(first()).subscribe((event) => {\n // console.debug(`videoElement ${this.debugName.getTime()} ${VideoElementEvents.SEEKED}`, event)\n this.syncVideoFrames({}).subscribe(result => {\n o$.next(true);\n o$.complete();\n this.videoTimeChangeHandlerExecutor();\n })\n\n })\n\n console.debug(`Seeking ${newTime}`)\n this.setCurrentTime(newTime);\n }\n });\n }\n }\n\n /***\n *\n * @param timeOffset Time offset in seconds\n */\n private seekFromCurrentTimeAndSync(timeOffset: number, syncConditions: SyncConditions = {}): Observable<boolean> {\n let currentTime = this.getCurrentTime();\n let newTime = Decimal.add(currentTime, timeOffset).toNumber();\n\n let seekDirection = newTime > currentTime ? SeekDirection.FORWARD : SeekDirection.BACKWARD;\n let diff = Decimal.sub(currentTime, newTime).abs().toNumber();\n console.debug(`Seeking from currentTime ${currentTime} to ${newTime}, direction: ${seekDirection} ${diff}`)\n\n return this.seekTimeAndSync(newTime, syncConditions);\n }\n\n private setCurrentTime(time: number) {\n this.videoElement.currentTime = time;\n }\n\n getFrameRateDecimal(): Decimal {\n return this.frameRateDecimal;\n }\n\n private _seekToFrame(frame: number): Observable<boolean> {\n if (!this.isPlaying() && !isNaN(frame)) {\n console.debug(`Seeking to frame: ${frame}`)\n if (frame <= 0) {\n return this.seekTimeAndSync(0, {});\n } else {\n let newTime = this.calculateFrameToTime(frame) + new Decimal(this.frameDurationSpillOverCorrection).toNumber();\n let frameNumberCheck = this.calculateTimeToFrame(newTime);\n\n if (frameNumberCheck !== frame) {\n console.error(`Frame numbers don't match. Wanted: ${frame}, calculated: ${frameNumberCheck}`)\n return of(false);\n } else {\n return this.seekTimeAndSync(newTime, {seekToFrame: frame, seekToTimestamp: newTime, currentTime: this.getCurrentTime()}).pipe(map((result) => {\n return result;\n }));\n }\n }\n }\n }\n\n /***\n *\n * @param framesCount Positive or negative number of frames. If positive - seek forward, if negative - seek backward.\n */\n private _seekFromCurrentFrame(framesCount: number): Observable<boolean> {\n let currentFrame = this.getCurrentFrame();\n let seekToFrame = currentFrame + framesCount;\n\n console.debug(`seekFromCurrentFrame - Current frame: ${currentFrame}, wanted frame: ${seekToFrame}`)\n\n if (currentFrame !== seekToFrame) {\n if (seekToFrame <= 0) {\n return this._seekToFrame(0);\n } else if (seekToFrame >= this.getTotalFrames()) {\n return this._seekToFrame(this.getTotalFrames());\n } else {\n let timeOffset = this.calculateFrameToTime(framesCount);\n return this.seekFromCurrentTimeAndSync(timeOffset, {seekToFrame: seekToFrame, currentTime: this.getCurrentTime()}).pipe(map(result => {\n return result;\n }));\n }\n } else {\n return of(true);\n }\n }\n\n private videoTimeChangeHandlerExecutor() {\n let currentTime = this.getCurrentTime();\n let frame = this.getCurrentFrame();\n\n this.onVideoTimeChange$.next({\n currentTime: currentTime,\n frame: frame\n });\n }\n\n getPlaybackState(): PlaybackState {\n return this.playbackStateMachine.state;\n }\n\n // region VideoController API\n\n getVideo(): Video {\n return this.isVideoLoaded() ? this.video : undefined;\n }\n\n getHTMLVideoElement(): HTMLVideoElement {\n return this.videoElement;\n }\n\n calculateTimeToFrame(time: number): number {\n return FrameUtil.timeToFrame(time, this.getFrameRateDecimal());\n }\n\n calculateFrameToTime(framesCount: number): number {\n return FrameUtil.frameToTime(framesCount, this.getFrameRateDecimal());\n }\n\n play() {\n if (this.isVideoLoaded() && !this.isPlaying()) {\n // first start request video frame callback cycle\n this.videoElement.play().then(() => {\n this.onPlay$.next({})\n });\n }\n }\n\n pause() {\n if (this.isVideoLoaded() && this.isPlaying()) {\n // stop request video frame callback cycle ?\n this.videoElement.pause();\n }\n }\n\n togglePlayPause() {\n if (this.isPlaying()) {\n this.pause()\n } else {\n this.play();\n }\n }\n\n isPlaying() {\n return this.isVideoLoaded()\n && this.videoElement.currentTime > 0\n && this.videoElement.currentTime < this.getDuration()\n && !this.videoElement.paused // caution: when using default HTML video controls, when seeking while playing - video is actually paused for a moment\n && !this.videoElement.ended\n && (this.videoElement.readyState > this.videoElement.HAVE_CURRENT_DATA)\n ;\n }\n\n isPaused() {\n return !this.isPlaying();\n }\n\n isSeeking(): boolean {\n return this.seekInProgress;\n }\n\n getCurrentTime(): number {\n return this.isVideoLoaded() ? this.videoElement.currentTime : 0;\n }\n\n getPlaybackRate(): number {\n return this.isVideoLoaded() ? this.videoElement.playbackRate : 0;\n }\n\n setPlaybackRate(playbackRate: number) {\n if (!this.isVideoLoaded()) {\n return;\n }\n\n try {\n playbackRate = z.coerce.number()\n .min(0.1)\n .max(16)\n .default(1)\n .parse(playbackRate);\n } catch (e) {\n playbackRate = 1;\n }\n\n this.videoElement.playbackRate = playbackRate;\n }\n\n getVolume(): number {\n return this.isVideoLoaded() ? this.videoElement.volume : 0;\n }\n\n setVolume(volume: number) {\n if (!this.isVideoLoaded()) {\n return;\n }\n\n try {\n volume = z.coerce.number()\n .min(0)\n .max(1)\n .default(1)\n .parse(volume);\n } catch (e) {\n volume = 1;\n }\n\n this.videoElement.volume = volume;\n }\n\n /***\n * return Video duration in seconds\n */\n getDuration(): number {\n if (!isNaN(this.userSetDuration)) {\n return this.userSetDuration\n } else {\n return this.isVideoLoaded() ? this.video.duration : 0;\n }\n }\n\n getFrameRate(): number {\n return this.isVideoLoaded() ? this.video.frameRate : 0;\n }\n\n getTotalFrames(): number {\n return this.isVideoLoaded() ? this.video.totalFrames : 0;\n }\n\n getCurrentFrame(): number {\n return this.isVideoLoaded() ? this.calculateTimeToFrame(this.getCurrentTime()) : 0;\n }\n\n seekToFrame(frame: number): Observable<boolean> {\n if (!this.isVideoLoaded()) {\n return of(false);\n }\n\n frame = z.coerce.number()\n .min(0)\n .max(this.getTotalFrames())\n .parse(frame);\n\n return this._seekToFrame(frame);\n }\n\n seekFromCurrentFrame(framesCount: number): Observable<boolean> {\n if (!this.isVideoLoaded()) {\n return of(false);\n }\n\n framesCount = z.coerce.number()\n .parse(framesCount);\n\n return this._seekFromCurrentFrame(framesCount);\n }\n\n seekPreviousFrame(): Observable<boolean> {\n if (!this.isVideoLoaded()) {\n return of(false);\n }\n return this.seekFromCurrentFrame(-1);\n }\n\n seekNextFrame(): Observable<boolean> {\n if (!this.isVideoLoaded()) {\n return of(false);\n }\n return this.seekFromCurrentFrame(1);\n }\n\n seekToTimestamp(currentTime: number): Observable<boolean> {\n if (!this.isVideoLoaded()) {\n return of(false);\n }\n\n currentTime = z.coerce.number()\n .parse(currentTime);\n\n return this.seekTimeAndSync(currentTime);\n }\n\n formatTimestamp(currentTime: number): string {\n if (!this.isVideoLoaded()) {\n return TimeUtil.VIDEO_ZERO_TIMESTAMP;\n }\n\n currentTime = z.coerce.number()\n .min(0)\n .max(this.getDuration())\n .parse(currentTime);\n\n return TimeUtil.formatVideoTimestamp(currentTime, this.getFrameRateDecimal());\n }\n\n mute() {\n if (!this.isVideoLoaded()) {\n return;\n }\n\n this.videoElement.muted = true;\n }\n\n unmute() {\n if (!this.isVideoLoaded()) {\n return;\n }\n\n this.videoElement.muted = false;\n }\n\n isFullscreen(): boolean {\n if (!this.isVideoLoaded()) {\n return false;\n }\n\n return this.domController.isFullscreen();\n }\n\n toggleFullscreen() {\n if (!this.isVideoLoaded()) {\n return;\n }\n\n this.domController.toggleFullscreen(this.videoElement);\n }\n\n getAudioTracks(): any[] {\n throw new Error('unsupported')\n }\n\n getCurrentAudioTrack(): any {\n throw new Error('unsupported')\n }\n\n setAudioTrack(audioTrackId: number) {\n throw new Error('unsupported')\n }\n\n isVideoLoaded(): boolean {\n return this._isVideoLoaded;\n }\n\n getHls(): Hls {\n throw new Error('Unsupported or video not loaded with Hls.js')\n }\n\n addHelpMenuGroup(helpMenuGroup: HelpMenuGroup) {\n this.helpMenuGroups.push(helpMenuGroup);\n this.onHelpMenuChange$.next();\n }\n\n getHelpMenuGroups(): HelpMenuGroup[] {\n return this.helpMenuGroups;\n }\n\n // endregion\n}\n\n\n// console.log(\"dd1 \" + this.videoElement.duration)\n// this.videoElement.currentTime = this.videoElement.duration + this.getFrameTimeDurationSeconds() * 100\n// setTimeout(() => {\n// this.videoElement.currentTime = this.videoElement.duration + this.getFrameTimeDurationSeconds() * 100\n// }, 100)\n//\n// setTimeout(() => {\n// console.log(\"## \" + this.videoElement.currentTime)\n// this.videoElement.currentTime = 0\n// }, 1000)\n//\n// setTimeout(() => {\n// console.log(\"ct \" + this.videoElement.currentTime)\n// console.log(\"dd2 \" + this.videoElement.duration)\n//\n//\n// // this.videoDuration = this.videoElement.duration\n// //\n// //\n// // this.emit('videoLoadEnd', {\n// // time: TimeUtil.currentTime(),\n// // durationSeconds: this.getDurationSeconds(),\n// // framesCount: this.getFramesCount(),\n// // frameRate: this.getFrameRate()\n// // })\n// //\n// // this.videoElement.addEventListener('pause', (event) => {\n// // console.log('videoElement pause')\n// // this.syncCurrentTimeAndMediaTime();\n// //\n// // setTimeout(() => {\n// // this.videoMetadataChangeHandler();\n// // this.emit('videoPause', {\n// // time: TimeUtil.currentTime()\n// // })\n// // }, 50)\n// // })\n// //\n// // this.videoElement.requestVideoFrameCallback((now, metadata) => {\n// // this.requestVideoFrameCallbackEntry(now, metadata);\n// // })\n//\n// }, 3000)\n","import Decimal from \"decimal.js\";\n\nexport class Video {\n private readonly _element: HTMLVideoElement;\n private readonly _sourceUrl: string;\n private readonly _frameRate: number;\n private readonly _duration: number;\n private readonly _totalFrames: number;\n\n /***\n * Frame duration in seconds\n * @private\n */\n private readonly _frameDuration: number;\n\n constructor(element: HTMLVideoElement, sourceUrl: string, frameRate: number, duration: number) {\n this._element = element;\n this._sourceUrl = sourceUrl;\n this._frameRate = frameRate;\n this._duration = duration;\n this._totalFrames = new Decimal(this._duration).mul(this._frameRate).toNumber();\n this._frameDuration = new Decimal(1).div(this._frameRate).toNumber();\n }\n\n get element(): HTMLVideoElement {\n return this._element;\n }\n\n get sourceUrl(): string {\n return this._sourceUrl;\n }\n\n get frameRate(): number {\n return this._frameRate;\n }\n\n get duration(): number {\n return this._duration;\n }\n\n get totalFrames() {\n return this._totalFrames;\n }\n\n get frameDuration(): number {\n return this._frameDuration;\n }\n}\n","import {HTMLVideoElementCrossorigin, HTMLVideoElementEventKeys, VideoController} from \"./video-controller\";\n// https://github.com/zhw2590582/ArtPlayer/issues/445\n// https://github.com/video-dev/hls.js/issues/5146#issuecomment-1375070955\n// https://github.com/video-dev/hls.js/issues/5107\n// TODO important when building!!!!!!!!!!\n// import Hls from \"hls.js/dist/hls.min\";\nimport Hls, {ErrorData, MediaPlaylist} from \"hls.js\";\n\nimport {first, forkJoin, fromEvent, Observable, takeUntil} from \"rxjs\";\nimport {Video} from \"./video\";\nimport {DomController} from \"../dom/dom-controller\";\nimport {z} from \"zod\";\n\nexport class VideoHlsController extends VideoController {\n protected hls: Hls;\n\n\n constructor(domController: DomController, crossorigin: HTMLVideoElementCrossorigin) {\n super(domController, crossorigin);\n\n if (Hls.isSupported()) {\n console.debug('video load with hls.js')\n } else {\n console.error('hls is not supported through MediaSource extensions')\n }\n\n let config = {\n ...Hls.DefaultConfig,\n enableWorker: false\n // TODO for PROD builds we should remove this property and use hls.js/dist/hls.min | See https://github.com/video-dev/hls.js/issues/5146#issuecomment-1375070955\n };\n\n // config.maxBufferLength = 4000\n // console.debug('hls config: ', Hls.DefaultConfig);\n\n this.hls = new Hls(config);\n }\n\n videoLoad(sourceUrl: string, frameRate: number, duration: number): Observable<Video> {\n return new Observable<Video>(o$ => {\n\n this.hls.once(Hls.Events.ERROR, function (event, data) {\n let errorType = data.type;\n let errorDetails = data.details;\n let errorFatal = data.fatal;\n\n console.error(errorDetails);\n });\n\n let hlsMediaAttached$ = new Observable<boolean>(o$ => {\n // MEDIA_ATTACHED event is fired by hls object once MediaSource is ready\n this.hls.once(Hls.Events.MEDIA_ATTACHED, function (event, mediaAttachedData) {\n console.debug('video element and hls.js are now bound together');\n o$.next(true);\n o$.complete();\n });\n })\n\n let hlsManifestParsed$ = new Observable<boolean>(o$ => {\n this.hls.once(Hls.Events.MANIFEST_PARSED, function (event, manifestParsedData) {\n console.debug('manifest loaded, found ' + manifestParsedData.levels.length + ' quality level');\n o$.next(true);\n o$.complete();\n });\n })\n\n let videoLoadedData$ = fromEvent(this.videoElement, HTMLVideoElementEventKeys.LOADEDDATA).pipe(first());\n\n forkJoin([hlsMediaAttached$, hlsManifestParsed$, videoLoadedData$]).pipe(first()).subscribe(result => {\n let video = new Video(this.videoElement, sourceUrl, frameRate, !isNaN(duration)? duration: this.videoElement.duration)\n\n o$.next(video);\n o$.complete();\n })\n\n this.hls.loadSource(sourceUrl)\n this.hls.attachMedia(this.videoElement);\n })\n }\n\n protected initEventHandlers() {\n super.initEventHandlers();\n\n this.hls.on(Hls.Events.ERROR, function (event, data) {\n let errorType = data.type;\n let errorDetails = data.details;\n let errorFatal = data.fatal;\n\n console.error(event, data);\n\n if (data.details === Hls.ErrorDetails.BUFFER_STALLED_ERROR\n || data.details === Hls.ErrorDetails.BUFFER_APPEND_ERROR\n || data.details === Hls.ErrorDetails.BUFFER_APPENDING_ERROR) {\n\n this.videoPlaybackStateHolder.buffering = true;\n }\n });\n\n this.hls.on(Hls.Events.FRAG_LOADING, function (event, data) {\n // console.log(event, data);\n });\n\n this.hls.on(Hls.Events.FRAG_LOADED, function (event, data) {\n // console.log(event, data);\n });\n\n this.hls.on(Hls.Events.FRAG_BUFFERED, function (event, data) {\n // console.log(event, data);\n // console.error('BUFFERED !!!!!!!!!!!!!')\n });\n }\n\n getAudioTracks(): MediaPlaylist[] {\n if (!this.isVideoLoaded) {\n return null;\n }\n return this.hls.audioTracks;\n }\n\n getCurrentAudioTrack(): any {\n return this.getAudioTracks()[this.hls.audioTrack];\n }\n\n setAudioTrack(audioTrackId: number) {\n if (!this.isVideoLoaded) {\n return null;\n }\n\n let previousIndex: number = this.hls.audioTrack;\n this.hls.audioTrack = audioTrackId;\n let currentIndex: number = this.hls.audioTrack;\n\n if (currentIndex >= 0 && previousIndex !== currentIndex) {\n this.onAudioSwitched$.next({\n audioTrack: this.getCurrentAudioTrack()\n });\n }\n }\n\n getHls(): Hls {\n return this.hls;\n }\n\n\n}\n","import {OmakaseTextTrack, OmakaseTextTrackCue, OmakaseTrackConfig} from \"../types\";\n\nexport abstract class BaseOmakaseTrack<T extends OmakaseTextTrackCue> implements OmakaseTextTrack<T> {\n id: string;\n src: string;\n default: boolean;\n label: string;\n language: string;\n cues: T[];\n hidden: boolean = true;\n element: HTMLTrackElement;\n\n protected constructor(config: OmakaseTrackConfig) {\n this.id = config.id;\n this.src = config.src;\n this.default = config.default;\n this.label = config.label;\n this.language = config.language;\n this.cues = [];\n }\n}\n","import {BaseOmakaseTrack} from \"./track\";\nimport {SubtitlesVttCue, SubtitlesVttTrackConfig} from \"../types\";\n\nexport class SubtitlesVttTrack extends BaseOmakaseTrack<SubtitlesVttCue> {\n constructor(config: SubtitlesVttTrackConfig) {\n super(config);\n }\n}\n","/**\n * Copyright 2023 ByOmakase, LLC (https://byomakase.org)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Includes rxjs <https://github.com/ReactiveX/rxjs>\n * Available under Apache License Version 2.0\n * <https://github.com/ReactiveX/rxjs/blob/master/LICENSE.txt>\n */\n\nimport {SubtitlesVttTrack} from \"../track/subtitles-vtt-track\";\nimport {OmakaseTextTrack, OmakaseTextTrackCue, SubtitlesCreateEvent, SubtitlesEvent, SubtitlesVttTrackConfig} from \"../types\";\nimport {filter, first, fromEvent, Observable, of, Subject} from \"rxjs\";\nimport {VideoController} from \"../video/video-controller\";\nimport {SubtitlesApi} from \"../api/subtitles-api\";\n\nexport class SubtitlesController implements SubtitlesApi {\n protected currentTrack: OmakaseTextTrack<OmakaseTextTrackCue>;\n\n protected videoController: VideoController;\n\n protected subtitlesTracks: Map<string, OmakaseTextTrack<OmakaseTextTrackCue>> = new Map<string, OmakaseTextTrack<OmakaseTextTrackCue>>();\n\n public readonly onCreate$: Subject<SubtitlesCreateEvent> = new Subject<SubtitlesCreateEvent>();\n public readonly onRemove$: Subject<SubtitlesEvent> = new Subject<SubtitlesEvent>();\n public readonly onShow$: Subject<SubtitlesEvent> = new Subject<SubtitlesEvent>();\n public readonly onHide$: Subject<SubtitlesEvent> = new Subject<SubtitlesEvent>();\n\n constructor(videoController: VideoController) {\n this.videoController = videoController;\n\n this.videoController.onVideoLoaded$.pipe(filter(p => !!p)).subscribe((event) => {\n this.removeAllTracks();\n })\n }\n\n private getDomTextTrack(omakaseTextTrack: OmakaseTextTrack<OmakaseTextTrackCue>): TextTrack | undefined {\n let textTrack = this.videoController.getHTMLVideoElement().textTracks.getTrackById(omakaseTextTrack.id);\n if (textTrack.kind === \"subtitles\") {\n return textTrack;\n }\n return void 0;\n }\n\n /***\n * https://github.com/whatwg/html/issues/1921\n * https://github.com/web-platform-tests/wpt/pull/6594\n *\n * @param track\n * @private\n */\n private removeDomTextTrack(track: OmakaseTextTrack<OmakaseTextTrackCue>): boolean {\n // there is not remove track method in HTML TextTrack API, we have to fake it\n let domTextTrack: TextTrack = this.getDomTextTrack(track);\n if (domTextTrack) {\n this.videoController.getHTMLVideoElement().querySelectorAll<'track'>('track').forEach(trackElement => {\n if (trackElement.getAttribute('id') === track.id) {\n trackElement.parentElement.removeChild(trackElement);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n private static createHTMLTrackElement(omakaseTextTrack: OmakaseTextTrack<OmakaseTextTrackCue>): HTMLTrackElement {\n let element: HTMLTrackElement = document.createElement<'track'>(\"track\");\n element.kind = \"subtitles\";\n element.id = omakaseTextTrack.id;\n element.label = omakaseTextTrack.label;\n element.srclang = omakaseTextTrack.language;\n element.src = omakaseTextTrack.src;\n element.default = omakaseTextTrack.default;\n return element;\n }\n\n createVttTrack(config: SubtitlesVttTrackConfig): Observable<SubtitlesVttTrack | undefined> {\n if (!this.videoController.isVideoLoaded) {\n return of(void 0);\n } else {\n return new Observable<SubtitlesVttTrack>(o$ => {\n let track = new SubtitlesVttTrack({...config})\n\n if (this.subtitlesTracks.has(track.id)) {\n this.removeTrack(track.id);\n }\n\n track.element = SubtitlesController.createHTMLTrackElement(track);\n\n fromEvent(track.element, \"load\").pipe(first()).subscribe((event) => {\n this.subtitlesTracks.set(track.id, track);\n o$.next(track);\n o$.complete();\n\n this.onCreate$.next({\n textTrack: track\n });\n })\n\n this.videoController.getHTMLVideoElement().appendChild(track.element);\n let textTrack = this.getDomTextTrack(track);\n textTrack.mode = \"hidden\";\n });\n }\n }\n\n getTracks(): OmakaseTextTrack<OmakaseTextTrackCue>[] {\n if (!this.videoController.isVideoLoaded) {\n return void 0;\n }\n\n return [...this.subtitlesTracks.values()];\n }\n\n removeAllTracks() {\n if (!this.videoController.isVideoLoaded) {\n return;\n }\n\n this.subtitlesTracks.forEach((value, key) => {\n this.removeTrack(value.id);\n })\n }\n\n removeTrack(id: string) {\n if (!this.videoController.isVideoLoaded) {\n return;\n }\n\n let track = this.subtitlesTracks.get(id);\n if (track) {\n // remove existing track\n this.subtitlesTracks.delete(id);\n // remove existing track from HTML DOM\n this.removeDomTextTrack(track);\n\n this.onRemove$.next({});\n }\n }\n\n getCurrentTrack(): OmakaseTextTrack<OmakaseTextTrackCue> | undefined {\n return this.currentTrack;\n }\n\n showTrack(id: string = void 0) {\n if (!this.videoController.isVideoLoaded) {\n return;\n }\n\n id = id ? id : this.getCurrentTrack() ? this.getCurrentTrack().id : void 0;\n\n if (!id) {\n return;\n }\n\n let track = this.subtitlesTracks.get(id);\n\n if (track) {\n let domTextTrack = this.getDomTextTrack(track);\n if (domTextTrack) {\n for (let i = 0; i < this.videoController.getHTMLVideoElement().textTracks.length; i++) {\n let textTrack = this.videoController.getHTMLVideoElement().textTracks[i];\n textTrack.mode = \"hidden\";\n }\n domTextTrack.mode = \"showing\";\n track.hidden = false;\n\n this.currentTrack = track;\n\n this.onShow$.next({});\n }\n }\n }\n\n hideTrack(id: string = void 0) {\n if (!this.videoController.isVideoLoaded) {\n return;\n }\n\n id = id ? id : this.getCurrentTrack() ? this.getCurrentTrack().id : void 0;\n\n if (!id) {\n return;\n }\n\n let track = this.subtitlesTracks.get(id);\n if (track) {\n let domTextTrack = this.getDomTextTrack(track);\n if (domTextTrack) {\n domTextTrack.mode = \"hidden\";\n track.hidden = true;\n\n this.onHide$.next({});\n }\n }\n }\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","import {Position} from \"../common/measurement\";\nimport {MomentObservation, PeriodObservation} from \"./model\";\nimport {Thumbnail} from \"../timeline/thumbnail/thumbnail\";\nimport {Video} from \"../video/video\";\nimport {CamelToSnakeCase} from \"./types\";\nimport {OmakaseTextTrack, OmakaseTextTrackCue} from \"./track\";\nimport {GenericMarker} from \"../timeline/marker/marker\";\n\nexport const OmakasePlayerEvents: OmakasePlayerEventsType = {\n OMAKASE_SUBTITLES_HIDE: \"omakaseSubtitlesHide\",\n OMAKASE_TIMELINE_ZOOM: \"omakaseTimelineZoom\",\n OMAKASE_VIDEO_LOADED: \"omakaseVideoLoaded\",\n OMAKASE_VIDEO_PAUSE: \"omakaseVideoPause\",\n OMAKASE_VIDEO_PLAY: \"omakaseVideoPlay\",\n OMAKASE_VIDEO_SEEKED: \"omakaseVideoSeeked\",\n OMAKASE_VIDEO_SEEKING: \"omakaseVideoSeeking\",\n OMAKASE_VIDEO_BUFFERING: \"omakaseVideoBuffering\",\n OMAKASE_VIDEO_ENDED: \"omakaseVideoEnded\",\n OMAKASE_VIDEO_TIME_CHANGE: \"omakaseVideoTimeChange\",\n OMAKASE_VIDEO_AUDIO_SWITCHED: \"omakaseVideoAudioSwitched\",\n OMAKASE_AUDIO_SWITCHED: \"omakaseAudioSwitched\",\n OMAKASE_SUBTITLES_CREATE: \"omakaseSubtitlesCreate\",\n OMAKASE_SUBTITLES_REMOVE: \"omakaseSubtitlesRemove\",\n OMAKASE_SUBTITLES_SHOW: \"omakaseSubtitlesShow\",\n OMAKASE_TIMELINE_SCROLL: \"omakaseTimelineScroll\"\n}\n\nexport type OmakasePlayerEventsType = OmakasePlayerEventsMappingType<OmakasePlayerEventMap>\n\nexport type OmakasePlayerEventsMappingType<T> = {\n [K in keyof T as Uppercase<CamelToSnakeCase<string & K>>]: K\n}\n\nexport type OmakasePlayerEventMap = VideoEventMap & AudioEventMap & SubtitlesEventMap & TimelineEventMap\n\nexport type VideoEventMap = {\n 'omakaseVideoLoaded': VideoLoadedEvent,\n 'omakaseVideoPlay': VideoPlayEvent,\n 'omakaseVideoPause': VideoPlayEvent,\n 'omakaseVideoTimeChange': VideoTimeChangeEvent,\n 'omakaseVideoSeeking': VideoSeekingEvent,\n 'omakaseVideoSeeked': VideoSeekedEvent,\n 'omakaseVideoEnded': VideoEndedEvent,\n 'omakaseVideoAudioSwitched': AudioEvent,\n 'omakaseVideoBuffering': VideoBufferingEvent\n}\n\nexport type AudioEventMap = {\n 'omakaseAudioSwitched': AudioEvent,\n}\n\nexport type SubtitlesEventMap = {\n 'omakaseSubtitlesCreate': SubtitlesCreateEvent,\n 'omakaseSubtitlesRemove': SubtitlesEvent,\n 'omakaseSubtitlesShow': SubtitlesEvent,\n 'omakaseSubtitlesHide': SubtitlesEvent\n}\n\nexport type TimelineEventMap = {\n 'omakaseTimelineScroll': TimelineScrollEvent,\n 'omakaseTimelineZoom': TimelineZoomEvent\n}\n\nexport interface OmakaseEvent {\n\n}\n\n// region general\n\nexport interface OmakaseMouseEvent extends OmakaseEvent {\n evt: MouseEvent;\n position: Position;\n}\n\nexport interface ClickEvent extends OmakaseMouseEvent {\n\n}\n\nexport interface MouseEnterEvent extends OmakaseMouseEvent {\n\n}\n\nexport interface MouseMoveEvent extends OmakaseMouseEvent {\n\n}\n\nexport interface MouseLeaveEvent extends OmakaseMouseEvent {\n\n}\n\nexport interface MouseOutEvent extends OmakaseMouseEvent {\n\n}\n\nexport interface MouseOverEvent extends OmakaseMouseEvent {\n\n}\n\n// endregion\n\n// region video\n\nexport interface VideoEvent extends OmakaseEvent {\n\n}\n\nexport interface VideoLoadingEvent extends VideoEvent {\n sourceUrl: string;\n frameRate: number;\n}\n\nexport interface VideoLoadedEvent extends VideoEvent {\n video: Video;\n}\n\nexport interface VideoPlayEvent extends VideoEvent {\n\n}\n\nexport interface VideoTimeChangeEvent extends VideoEvent {\n currentTime: number,\n frame: number\n}\n\nexport interface VideoSeekingEvent extends VideoEvent {\n currentTime: number,\n newTime: number\n}\n\nexport interface VideoSeekedEvent extends VideoEvent {\n currentTime: number\n}\n\nexport interface VideoBufferingEvent extends VideoEvent {\n bufferedTimespans: { start: number, end: number }[]\n}\n\nexport interface VideoEndedEvent extends VideoEvent {\n\n}\n\nexport interface AudioEvent extends OmakaseEvent {\n audioTrack: any\n}\n\n// endregion\n\n// region subtitles\n\nexport interface SubtitlesEvent extends OmakaseEvent {\n\n}\n\nexport interface SubtitlesCreateEvent extends OmakaseEvent {\n textTrack: OmakaseTextTrack<OmakaseTextTrackCue>\n}\n\n// endregion\n\n// region timeline\n\nexport interface TimelineEvent extends OmakaseEvent {\n\n}\n\nexport interface TimelineZoomEvent extends TimelineEvent {\n zoomPercent: number;\n}\n\nexport interface TimelineScrollEvent extends TimelineEvent {\n scrollPercent: number;\n}\n\n// endregion\n\n// region scrollbar\n\nexport interface ScrollbarEvent extends OmakaseEvent {\n\n}\n\nexport interface ScrollbarScrollEvent extends ScrollbarEvent {\n scrollPercent: number;\n}\n\nexport interface ScrollbarZoomEvent extends ScrollbarEvent {\n zoomPercent: number;\n}\n\n// endregion\n\n// region thumbnail\n\nexport interface ThumbnailEvent extends OmakaseEvent {\n thumbnail: Thumbnail\n}\n\n// endregion\n\n// region marker\n\nexport interface MarkerEvent extends OmakaseEvent {\n\n}\n\nexport interface MarkerChangeEvent extends MarkerEvent {\n\n}\n\nexport interface MarkerFocusEvent extends MarkerEvent {\n marker: GenericMarker;\n}\n\nexport interface MomentMarkerChangeEvent extends MarkerChangeEvent {\n timeObservation: MomentObservation\n}\n\nexport interface PeriodMarkerChangeEvent extends MarkerChangeEvent {\n timeObservation: PeriodObservation\n}\n\n// endregion\n","/**\n * Copyright 2023 ByOmakase, LLC (https://byomakase.org)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Includes rxjs <https://github.com/ReactiveX/rxjs>\n * Available under Apache License Version 2.0\n * <https://github.com/ReactiveX/rxjs/blob/master/LICENSE.txt>\n *\n */\n\nimport {AudioApi} from \"../api/audio-api\";\nimport {VideoController} from \"../video/video-controller\";\nimport {Subject} from \"rxjs\";\nimport {AudioEvent} from \"../types\";\n\nexport class AudioController implements AudioApi {\n protected videoController: VideoController;\n\n public readonly onAudioSwitched$: Subject<AudioEvent> = new Subject<AudioEvent>();\n\n constructor(videoController: VideoController) {\n this.videoController = videoController;\n }\n\n getAudioTracks(): any[] {\n return this.videoController.getAudioTracks();\n }\n\n getCurrentAudioTrack(): any {\n return this.videoController.getCurrentAudioTrack();\n }\n\n setAudioTrack(audioTrackId: number) {\n let previous = this.getCurrentAudioTrack();\n this.videoController.setAudioTrack(audioTrackId);\n let current = this.getCurrentAudioTrack();\n if (previous !== current) {\n this.onAudioSwitched$.next({\n audioTrack: current\n });\n }\n }\n\n\n}\n","/***\n * https://github.com/imbhargav5/rooks/blob/main/packages/rooks/src/hooks/useFullscreen.ts\n */\n\nexport interface FullscreenElement {\n requestFullscreen?: Element[\"requestFullscreen\"];\n webkitRequestFullscreen?: Element[\"requestFullscreen\"];\n webkitRequestFullScreen?: Element[\"requestFullscreen\"];\n mozRequestFullScreen?: Element[\"requestFullscreen\"];\n msRequestFullscreen?: Element[\"requestFullscreen\"];\n}\n\nexport interface FullscreenDocument {\n fullscreenEnabled?: Document[\"fullscreenEnabled\"];\n webkitFullscreenEnabled?: Document[\"fullscreenEnabled\"];\n mozFullScreenEnabled?: Document[\"fullscreenEnabled\"];\n msFullscreenEnabled?: Document[\"fullscreenEnabled\"];\n\n fullscreenElement?: Document[\"fullscreenElement\"];\n webkitFullscreenElement?: Document[\"fullscreenElement\"];\n webkitCurrentFullScreenElement?: Document[\"fullscreenElement\"];\n mozFullScreenElement?: Document[\"fullscreenElement\"];\n msFullscreenElement?: Document[\"fullscreenElement\"];\n\n exitFullscreen?: Document[\"exitFullscreen\"];\n webkitExitFullscreen?: Document[\"exitFullscreen\"];\n webkitCancelFullScreen?: Document[\"exitFullscreen\"];\n mozCancelFullScreen?: Document[\"exitFullscreen\"];\n msExitFullscreen?: Document[\"exitFullscreen\"];\n}\n\nexport class Fullscreen {\n public static isFullscreenEnabled() {\n const _document = document as FullscreenDocument;\n return (\n _document.fullscreenEnabled ||\n _document.webkitFullscreenEnabled ||\n !!_document.webkitCancelFullScreen ||\n _document.mozFullScreenEnabled ||\n _document.msFullscreenEnabled ||\n false\n );\n }\n\n public static isFullscreen(): boolean {\n const _document = document as FullscreenDocument;\n return !!(\n _document.fullscreenElement ||\n _document.webkitFullscreenElement ||\n _document.webkitCurrentFullScreenElement ||\n _document.mozFullScreenElement ||\n _document.msFullscreenElement ||\n null\n )\n }\n\n public static requestFullscreen(element: Element | null, options?: FullscreenOptions | undefined): Promise<void> {\n const target = (element ?? document.documentElement) as FullscreenElement;\n const method =\n target.requestFullscreen ||\n target.webkitRequestFullscreen ||\n target.webkitRequestFullScreen ||\n target.mozRequestFullScreen ||\n target.msRequestFullscreen;\n\n if (!method) {\n throw new Error('Unsupported')\n }\n\n return method.call(target, options);\n }\n\n public static exitFullscreen(): Promise<void> {\n const _document = document as FullscreenDocument;\n const method =\n _document.exitFullscreen ||\n _document.webkitExitFullscreen ||\n _document.webkitCancelFullScreen ||\n _document.mozCancelFullScreen ||\n _document.msExitFullscreen;\n\n if (!method) {\n throw new Error('Unsupported')\n }\n\n return method.call(_document);\n }\n}\n","/**\n * Copyright 2023 ByOmakase, LLC (https://byomakase.org)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Includes rxjs <https://github.com/ReactiveX/rxjs>\n * Available under Apache License Version 2.0\n * <https://github.com/ReactiveX/rxjs/blob/master/LICENSE.txt>\n */\n\nimport {Fullscreen} from \"./fullscreen\";\nimport {VideoController} from \"../video/video-controller\";\nimport {fromEvent, Subject, takeUntil} from \"rxjs\";\nimport {Timeline} from \"../timeline/timeline\";\n\nconst omakaseClasses = {\n player: 'omakase-player',\n playerWrapper: 'omakase-player-wrapper',\n video: 'omakase-video',\n videoControls: 'omakase-video-controls',\n buttonPlay: 'omakase-button-play',\n buttonPause: 'omakase-button-pause',\n buttonLoading: 'omakase-button-loading',\n buttonReplay: 'omakase-button-replay',\n buttonHelp: 'omakase-help-button',\n help: 'omakase-help',\n helpMenu: 'omakase-help-menu'\n}\n\nexport class DomController {\n private readonly _playerHTMLElementId: string;\n\n private _videoElement: HTMLVideoElement;\n private _timelineElement: HTMLElement;\n\n private _videoController: VideoController;\n private videoEventBreaker$: Subject<void>;\n\n private showTemporaryOnMouseMoveTimeoutId: ReturnType<typeof setTimeout>;\n\n private readonly divPlayer: HTMLElement;\n private divPlayerWrapper: HTMLElement;\n private divButtonPlay: HTMLElement;\n private divButtonPause: HTMLElement;\n private divButtonLoading: HTMLElement;\n private divButtonReplay: HTMLElement;\n\n private divButtonHelp: HTMLElement;\n private divHelp: HTMLElement;\n private divHelpMenu: HTMLElement;\n\n private _timeline: Timeline;\n\n constructor(playerHTMLElementId: string) {\n this._playerHTMLElementId = playerHTMLElementId;\n this.divPlayer = this.getElementById<HTMLElement>(this._playerHTMLElementId);\n this.createDom();\n }\n\n private createDom() {\n this.divPlayer.classList.add(`${omakaseClasses.player}`);\n\n this.divPlayer.innerHTML =\n `<div class=\"${omakaseClasses.playerWrapper}\">\n <video class=\"${omakaseClasses.video}\"></video>\n \n <div class=\"${omakaseClasses.help} d-none\">\n <div class=\"omakase-help-dropdown\">\n <button class=\"omakase-help-button d-none\"></button>\n <div class=\"${omakaseClasses.helpMenu} d-none\">\n </div>\n </div>\n </div>\n \n <div class=\"${omakaseClasses.videoControls}\">\n <div class=\"omakase-overlay-buttons\">\n <div class=\"${omakaseClasses.buttonPlay} omakase-video-overlay-button d-none\"></div>\n <div class=\"${omakaseClasses.buttonPause} omakase-video-overlay-button d-none\"></div>\n <div class=\"${omakaseClasses.buttonReplay} omakase-video-overlay-button d-none\"></div>\n <div class=\"${omakaseClasses.buttonLoading} omakase-video-overlay-button d-none\"></div>\n </div>\n </div>\n</div>`\n\n this._videoElement = this.getPlayerElement<HTMLVideoElement>(omakaseClasses.video);\n\n this.divPlayerWrapper = this.getPlayerElement<HTMLElement>(omakaseClasses.playerWrapper);\n this.divButtonPlay = this.getPlayerElement<HTMLElement>(omakaseClasses.buttonPlay);\n this.divButtonPause = this.getPlayerElement<HTMLElement>(omakaseClasses.buttonPause);\n this.divButtonLoading = this.getPlayerElement<HTMLElement>(omakaseClasses.buttonLoading);\n this.divButtonReplay = this.getPlayerElement<HTMLElement>(omakaseClasses.buttonReplay);\n this.divButtonHelp = this.getPlayerElement<HTMLElement>(omakaseClasses.buttonHelp);\n this.divHelp = this.getPlayerElement<HTMLElement>(omakaseClasses.help);\n this.divHelpMenu = this.getPlayerElement<HTMLElement>(omakaseClasses.helpMenu);\n }\n\n private getElementById<T>(elementId: string): T {\n return document.getElementById(elementId) as T;\n }\n\n private getPlayerElement<T>(className: string): T {\n return this.getPlayerElements<T>(className)[0];\n }\n\n private getPlayerElements<T>(className: string): T[] {\n return Array.from(this.getElementById<HTMLElement>(this._playerHTMLElementId).querySelectorAll(`.${className}`)) as T[];\n }\n\n private showElements(...element: HTMLElement[]): DomController {\n element.forEach(element => {\n element.classList.remove('d-none')\n element.classList.add('d-block')\n })\n return this;\n }\n\n private isShown(element: HTMLElement) {\n return element.classList.contains('d-block');\n }\n\n private hideElements(...element: HTMLElement[]): DomController {\n element.forEach(element => {\n element.classList.remove('d-block')\n element.classList.add('d-none')\n })\n return this;\n }\n\n private helpChangeHandler() {\n let helpMenuGroups = this._videoController.getHelpMenuGroups();\n\n if (helpMenuGroups.length > 0) {\n this.showElements(this.divHelp)\n this.divHelpMenu.innerHTML = this._videoController.getHelpMenuGroups().map(helpMenuGroup => {\n let items = `${helpMenuGroup.items.map(helpMenuItem => `<div class=\"omakase-help-item\"><span class=\"float-start\">${helpMenuItem.name}</span><span class=\"float-end\">${helpMenuItem.description}</span></div>`).join('')}`\n return `<div class=\"omakase-help-group\">\n <span class=\"omakase-help-group-title\">${helpMenuGroup.name}</span>\n ${items}\n </div>\n `\n }).join('');\n } else {\n this.hideElements(this.divHelp)\n }\n }\n\n isFullscreen(): boolean {\n if (Fullscreen.isFullscreenEnabled()) {\n return Fullscreen.isFullscreen();\n }\n return false;\n }\n\n toggleFullscreen(videoElement: HTMLVideoElement) {\n try {\n if (Fullscreen.isFullscreenEnabled()) {\n if (this.isFullscreen()) {\n Fullscreen.exitFullscreen().then(() => {\n })\n } else {\n Fullscreen.requestFullscreen(videoElement).then(() => {\n })\n }\n }\n } catch (e) {\n console.trace(e);\n }\n }\n\n set videoController(value: VideoController) {\n this._videoController = value;\n\n // clean previous subscribers and listeners\n if (this.videoEventBreaker$) {\n this.videoEventBreaker$.next();\n this.videoEventBreaker$.complete();\n }\n this.videoEventBreaker$ = new Subject<void>();\n\n let allOverlayButtons = [this.divButtonPlay, this.divButtonPause, this.divButtonLoading, this.divButtonReplay];\n let clearShowTemporaryOnMouseMoveTimeoutId = () => {\n if (this.showTemporaryOnMouseMoveTimeoutId) {\n clearTimeout(this.showTemporaryOnMouseMoveTimeoutId);\n }\n }\n\n fromEvent<MouseEvent>(this.divPlayerWrapper, 'mousemove').pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n if (this._videoController.isVideoLoaded() && !(this._videoController.getPlaybackState().ended || this._videoController.getPlaybackState().waiting || this._videoController.getPlaybackState().seeking)) {\n let playControlToShow = this._videoController.isPlaying() ? this.divButtonPause : this.divButtonPlay;\n clearShowTemporaryOnMouseMoveTimeoutId();\n this.hideElements(this.divButtonPause, this.divButtonPlay)\n .showElements(playControlToShow, this.divButtonHelp)\n\n this.showTemporaryOnMouseMoveTimeoutId = setTimeout(() => {\n this.hideElements(playControlToShow)\n if (!this.isShown(this.divHelpMenu)) {\n this.hideElements(this.divButtonHelp, this.divHelpMenu)\n }\n }, 1000)\n }\n })\n\n fromEvent<MouseEvent>(this.divPlayerWrapper, 'mouseleave').pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n this.hideElements(this.divButtonPlay, this.divButtonPause)\n this.hideElements(this.divButtonHelp, this.divHelpMenu)\n })\n\n fromEvent<MouseEvent>(this.divPlayerWrapper, 'click').pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n if (event.target === this._videoElement || event.target === this.divButtonPlay || event.target === this.divButtonPause || event.target === this.divButtonReplay || event.target === this.divButtonLoading) {\n this._videoController.togglePlayPause()\n }\n })\n\n // prevents video context menu\n fromEvent<MouseEvent>(this._videoElement, 'contextmenu').pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n console.log(event)\n event.preventDefault();\n })\n this._videoElement.controls = false;\n\n this._videoController.onVideoLoading$.pipe(takeUntil(this.videoEventBreaker$)).subscribe(videoLoaded => {\n this.hideElements(...allOverlayButtons)\n .showElements(this.divButtonLoading)\n })\n\n this._videoController.onVideoLoaded$.pipe(takeUntil(this.videoEventBreaker$)).subscribe(videoLoaded => {\n this.hideElements(...allOverlayButtons)\n if (!videoLoaded) {\n this.showElements(this.divButtonLoading)\n }\n })\n\n this._videoController.onPlaybackState$.pipe(takeUntil(this.videoEventBreaker$)).subscribe(state => {\n // console.log(state)\n clearShowTemporaryOnMouseMoveTimeoutId();\n if (state.waiting && state.playing) {\n this.hideElements(...allOverlayButtons)\n .showElements(this.divButtonLoading)\n } else if (state.playing) {\n this.hideElements(...allOverlayButtons)\n if (state.seeking && state.waiting) {\n this.showElements(this.divButtonLoading)\n }\n } else if (state.paused) {\n this.hideElements(...allOverlayButtons)\n if (state.seeking && state.waiting) {\n this.showElements(this.divButtonLoading)\n } else if (state.ended) {\n this.showElements(this.divButtonReplay)\n }\n } else if (state.seeking && state.waiting) {\n this.hideElements(...allOverlayButtons)\n .showElements(this.divButtonLoading)\n }\n })\n\n // help menu\n fromEvent<MouseEvent>(this.divButtonHelp, 'click').pipe(takeUntil(this.videoEventBreaker$)).subscribe((event) => {\n if (event.target === this.divButtonHelp) {\n if (this.isShown(this.divHelpMenu)) {\n this.hideElements(this.divHelpMenu)\n } else {\n this.showElements(this.divHelpMenu)\n }\n }\n })\n\n this._videoController.onHelpMenuChange$.pipe(takeUntil(this.videoEventBreaker$)).subscribe(() => {\n this.helpChangeHandler()\n })\n }\n\n set timeline(value: Timeline) {\n this._timeline = value;\n }\n\n get videoElement(): HTMLVideoElement {\n return this._videoElement;\n }\n}\n","import {Timeline, TimelineConfig} from \"./timeline/timeline\";\nimport {filter, first, Observable} from \"rxjs\";\nimport {HTMLVideoElementCrossorigin, VideoController} from \"./video/video-controller\";\nimport {OmakasePlayerApi} from \"./api/omakase-player-api\";\nimport {VideoHlsController} from \"./video/video-hls-controller\";\nimport {SubtitlesController} from \"./subtitles/subtitles-controller\";\nimport {SubtitlesApi} from \"./api/subtitles-api\";\nimport {VideoApi} from \"./api/video-api\";\nimport {Video} from \"./video/video\";\nimport EventEmitter from \"eventemitter3\";\nimport {OmakaseEventKey, OmakaseEventListener} from \"./events\";\nimport {OmakasePlayerEventMap, OmakasePlayerEvents, OmakasePlayerEventsType} from \"./types\";\nimport {AudioController} from \"./audio/audio-controller\";\nimport {AudioApi} from \"./api/audio-api\";\nimport {StyleAdapter} from \"./common/style-adapter\";\nimport {StylesProvider} from \"./common/styles-provider\";\nimport {DomController} from \"./dom/dom-controller\";\nimport {ComponentConfigStyleComposed} from \"./common/component\";\nimport {WithOptionalPartial} from \"./types/types\";\n// needed for styles compilation\nimport './../style/omakase-player.scss'\n\nexport interface OmakasePlayerStyle {\n fontFamily: string\n}\n\nexport const OMAKASE_PLAYER_STYLE_DEFAULT: OmakasePlayerStyle = {\n fontFamily: 'Arial'\n}\n\nexport interface OmakasePlayerConfig {\n playerHTMLElementId: string;\n crossorigin: HTMLVideoElementCrossorigin,\n style: OmakasePlayerStyle\n}\n\nconst configDefault: OmakasePlayerConfig = {\n playerHTMLElementId: 'omakase-player',\n crossorigin: 'anonymous',\n style: {\n ...OMAKASE_PLAYER_STYLE_DEFAULT\n }\n}\n\nexport class OmakasePlayer implements OmakasePlayerApi {\n private readonly stylesProvider: StylesProvider = StylesProvider.instance();\n\n // controllers\n private readonly domController: DomController;\n private readonly videoController: VideoController;\n private readonly audioController: AudioController;\n private readonly subtitlesController: SubtitlesController;\n\n private readonly config: OmakasePlayerConfig;\n private readonly playerHTMLElementId: string;\n\n private readonly eventEmitter = new EventEmitter();\n\n private styleAdapter: StyleAdapter<OmakasePlayerStyle>;\n private _timeline: Timeline;\n\n constructor(config: WithOptionalPartial<OmakasePlayerConfig, 'style'>) {\n this.config = {\n ...configDefault,\n ...config,\n style: {\n ...configDefault.style,\n ...config.style,\n }\n };\n\n this.styleAdapter = new StyleAdapter<OmakasePlayerStyle>({\n ...OMAKASE_PLAYER_STYLE_DEFAULT,\n ...this.config.style\n })\n\n // set initial style to provider\n this.stylesProvider.styles = {\n omakasePlayerStyle: this.style\n }\n\n this.styleAdapter.onChange$.subscribe((style) => {\n this.stylesProvider.styles = {\n omakasePlayerStyle: this.style\n }\n })\n\n this.playerHTMLElementId = this.config.playerHTMLElementId;\n\n this.domController = new DomController(this.playerHTMLElementId);\n this.videoController = new VideoHlsController(this.domController, this.config.crossorigin);\n this.audioController = new AudioController(this.videoController);\n this.subtitlesController = new SubtitlesController(this.videoController);\n\n this.domController.videoController = this.videoController;\n\n\n this.bindEventHandlers();\n }\n\n loadVideo(videoSourceUrl: string, videoFrameRate: number, duration: number = NaN) : Observable<Video> {\n return new Observable<Video>(o$ => {\n this.videoController.loadVideo(videoSourceUrl, videoFrameRate, duration).pipe(first()).subscribe(video => {\n o$.next(video);\n o$.complete();\n })\n })\n }\n\n createTimeline(config: Partial<ComponentConfigStyleComposed<TimelineConfig>>): Observable<Timeline> {\n return new Observable<Timeline>(o$ => {\n let createTimeline = () => {\n console.debug('Creating timeline')\n\n this._timeline = new Timeline(config, this.videoController);\n\n this.domController.timeline = this.timeline;\n\n this._timeline.initCanvasNode();\n\n // bind timeline event handlers\n this._timeline.onScroll$.subscribe((event) => {\n this.emit('omakaseTimelineScroll', event);\n })\n\n this._timeline.onZoom$.subscribe((event) => {\n this.emit('omakaseTimelineZoom', event);\n })\n }\n\n if (!this.timeline) {\n // wait for video to load and then create Timeline\n // stay subscribed, every next change of video will trigger setVideo\n console.debug('Timeline creation in progress, checking video load status..')\n\n if (this.videoController.isVideoLoaded()) {\n console.debug('Video is already loaded')\n createTimeline();\n\n o$.next(this._timeline);\n o$.complete();\n } else {\n console.debug('Waiting video to load..')\n this.videoController.onVideoLoaded$.pipe(filter(p => !!p), first()).subscribe(video => {\n console.debug('Video just loaded')\n createTimeline();\n\n o$.next(this._timeline);\n o$.complete();\n })\n }\n\n } else {\n // cannot create Timeline twice, just return current instance\n o$.next(this._timeline);\n o$.complete();\n }\n })\n }\n\n private bindEventHandlers() {\n // video\n this.videoController.onPlay$.subscribe((event) => {\n this.emit('omakaseVideoPlay', event);\n })\n\n this.videoController.onPause$.subscribe((event) => {\n this.emit('omakaseVideoPause', event);\n })\n\n this.videoController.onVideoLoaded$.pipe(filter(p => !!p)).subscribe((event) => {\n this.emit('omakaseVideoLoaded', event);\n })\n\n this.videoController.onVideoTimeChange$.subscribe((event) => {\n this.emit('omakaseVideoTimeChange', event);\n })\n\n this.videoController.onSeeking$.subscribe((event) => {\n this.emit('omakaseVideoSeeking', event);\n })\n\n this.videoController.onSeeked$.subscribe((event) => {\n this.emit('omakaseVideoSeeked', event);\n })\n\n this.videoController.onBuffering$.subscribe((event) => {\n this.emit('omakaseVideoBuffering', event);\n })\n\n this.videoController.onEnded$.subscribe((event) => {\n this.emit('omakaseVideoEnded', event);\n })\n\n this.videoController.onAudioSwitched$.subscribe((event) => {\n this.emit('omakaseVideoAudioSwitched', event);\n })\n\n // audio\n this.audioController.onAudioSwitched$.subscribe((event) => {\n this.emit('omakaseAudioSwitched', event);\n })\n\n // subtitles\n this.subtitlesController.onCreate$.subscribe((event) => {\n this.emit('omakaseSubtitlesCreate', event);\n })\n\n this.subtitlesController.onRemove$.subscribe((event) => {\n this.emit('omakaseSubtitlesRemove', event);\n })\n\n this.subtitlesController.onShow$.subscribe((event) => {\n this.emit('omakaseSubtitlesShow', event);\n })\n\n this.subtitlesController.onHide$.subscribe((event) => {\n this.emit('omakaseSubtitlesHide', event);\n })\n }\n\n // region eventemmiter\n\n emit<K extends OmakaseEventKey<OmakasePlayerEventMap>>(eventKey: K, event: OmakasePlayerEventMap[K]): void {\n this.eventEmitter.emit(eventKey, event);\n }\n\n off<K extends OmakaseEventKey<OmakasePlayerEventMap>>(eventKey: K, handler: OmakaseEventListener<OmakasePlayerEventMap[K]>): void {\n this.eventEmitter.off(eventKey, handler);\n }\n\n on<K extends OmakaseEventKey<OmakasePlayerEventMap>>(eventKey: K, handler: OmakaseEventListener<OmakasePlayerEventMap[K]>): void {\n this.eventEmitter.on(eventKey, handler);\n }\n\n listenerCount<K extends OmakaseEventKey<OmakasePlayerEventMap>>(eventKey: K): void {\n this.eventEmitter.listenerCount(eventKey);\n }\n\n listeners<K extends OmakaseEventKey<OmakasePlayerEventMap>>(eventKey: K): OmakaseEventListener<OmakasePlayerEventMap[K]>[] {\n return this.eventEmitter.listeners(eventKey);\n }\n\n once<K extends OmakaseEventKey<OmakasePlayerEventMap>>(eventKey: K, handler: OmakaseEventListener<OmakasePlayerEventMap[K]>): void {\n this.eventEmitter.once(eventKey, handler);\n }\n\n removeAllListeners<K extends OmakaseEventKey<OmakasePlayerEventMap>>(eventKey?: K): void {\n this.eventEmitter.removeAllListeners(eventKey);\n }\n\n // endregion\n\n get style(): OmakasePlayerStyle {\n return this.styleAdapter.style;\n }\n\n set style(value: Partial<OmakasePlayerStyle>) {\n this.styleAdapter.style = value;\n }\n\n get timeline(): Timeline {\n return this._timeline;\n }\n\n get video(): VideoApi {\n return this.videoController;\n }\n\n get audio(): AudioApi {\n return this.audioController;\n }\n\n get subtitles(): SubtitlesApi {\n return this.subtitlesController;\n }\n\n get EVENTS(): OmakasePlayerEventsType {\n return OmakasePlayerEvents;\n }\n}\n"],"names":["PI_OVER_180","detectBrowser","glob","Konva","param","angle","_registerNode","NodeClass","Transform","m","tr","point","x","y","sx","sy","rad","c","s","m11","m12","m21","m22","matrix","dx","dy","d","m0","m1","m2","m3","m4","m5","a","b","e","f","delta","result","r","Util","OBJECT_ARRAY","OBJECT_NUMBER","OBJECT_STRING","OBJECT_BOOLEAN","PI_OVER_DEG180","DEG180_OVER_PI","HASH","EMPTY_STRING","ZERO","KONVA_WARNING","KONVA_ERROR","RGB_PAREN","COLORS","RGB_REGEX","animQueue","req","obj","val","selector","firstChar","number","callback","queue","cb","canvas","el","url","imageObj","g","hex","bigint","randColor","color","rgb","str","parts","n","index","_","hsl","h","l","t2","t3","t1","i","r1","r2","retObj","key","arr","deg","radians","func","left","right","x1","y1","x2","y2","x3","y3","dist","pd2","u","pt","line","isClosed","pc","p1","p2","proj","px","py","pdist","startArray","endArray","start","end","temp","newStart","pr","desc","target","source","evt","canvases","_formatValue","RGBComponent","getNumberValidator","attr","getNumberOrArrayOfNumbersValidator","noOfElements","isNumber","isValidArray","getNumberOrAutoValidator","isAuto","getStringValidator","getStringOrGradientValidator","isString","isGradient","getNumberArrayValidator","TypedArray","item","getBooleanValidator","isBool","getComponentValidator","components","GET","SET","Factory","constructor","def","validator","after","method","len","capitalize","getter","setter","component","ret","basicValidator","oldVal","capitalizedAttr","message","methods","oldMethodName","newMethodName","oldGetter","oldSetter","deprecated","simplifyArray","retArr","util","COMMA","OPEN_PAREN","CLOSE_PAREN","OPEN_PAREN_BRACKET","CLOSE_BRACKET_PAREN","SEMICOLON","DOUBLE_PAREN","EQUALS","CONTEXT_METHODS","CONTEXT_PROPERTIES","traceArrMax","Context","shape","relaxed","rounded","traceArr","trace","args","pixelRatio","bounds","lineCap","absOpacity","lineJoin","a0","a1","a2","a3","a4","a5","a6","a7","a8","_context","path2d","width","height","text","maxWidth","that","origSetter","methodName","origMethod","prop","node","op","SceneContext","fill","grd","hasColor","fillPriority","hasPattern","hasLinearGradient","hasRadialGradient","colorStops","dash","strokeScaleEnabled","_a","_b","_c","blur","offset","scale","ratio","scaleX","scaleY","HitContext","hitStrokeWidth","strokeWidth","_pixelRatio","getDevicePixelRatio","context","devicePixelRatio","backingStoreRatio","Canvas","config","conf","previousRatio","mimeType","quality","err","SceneCanvas","HitCanvas","DD","flag","elem","nodesToFireEvents","stage","pos","dragDistance","distance","drawNodes","drawNode","ABSOLUTE_OPACITY","ALL_LISTENERS","ABSOLUTE_TRANSFORM","ABSOLUTE_SCALE","CANVAS","CHANGE","CHILDREN","KONVA","LISTENING","MOUSEENTER","MOUSELEAVE","SHAPE","SPACE","STAGE","TRANSFORM","UPPER_STAGE","VISIBLE","TRANSFORM_CHANGE_STR","idCounter","Node","privateGetter","cache","isTransform","invalid","name","deps","depsString","dep","scene","filter","hit","rect","drawBorder","hitCanvasPixelRatio","cachedSceneCanvas","cachedFilterCanvas","cachedHitCanvas","sceneContext","hitContext","top","points","minX","minY","maxX","maxY","trans","transformed","canvasCache","cacheCanvas","hitCanvas","filters","cachedCanvas","sceneCanvas","filterCanvas","filterContext","imageData","evtStr","handler","events","event","baseEvent","t","type","stopNode","targets","parent","ancestors","relativeTo","skipDragCheck","layer","layerUnderDrag","dragSkip","depth","nodes","child","addChildren","children","transform","haveCachedParent","absoluteMatrix","absoluteTransform","origTrans","it","change","changeX","changeY","family","theta","zIndex","newContainer","attrs","defaultValue","nonPlainObject","includeSelf","res","ancestor","selectorArr","sel","eventType","bubble","at","transformsEnabled","offsetX","offsetY","rotation","skewX","skewY","allListeners","listener","box","resolve","reject","img","blob","size","evtListeners","evtName","newVal","oldName","newName","fullName","names","compareShape","shouldStop","stopBubble","listeners","newEvents","oldEvents","topListeners","selfListeners","pointerId","ap","bubbleEvent","newNodePos","dbf","bounded","draggable","shouldCheckButton","canDrag","hasDraggingChild","dragElement","isDragging","isReady","margin","screenRect","data","container","className","no","Class","addGetterSetter","Container","filterFunc","results","findOne","valid","fn","can","caching","drawMethod","clipWidth","clipHeight","clipFunc","hasClip","selfCache","clipX","clipY","hasComposition","skipTransform","selfRect","shapes","hasVisible","Captures","SUPPORT_POINTER_EVENTS","getCapturedShape","createEvent","hasPointerCapture","setPointerCapture","releaseCapture","STRING","PX","MOUSEOUT","MOUSEOVER","MOUSEMOVE","MOUSEDOWN","MOUSEUP","POINTERMOVE","POINTERDOWN","POINTERUP","POINTERCANCEL","LOSTPOINTERCAPTURE","POINTEROUT","POINTERLEAVE","POINTEROVER","POINTERENTER","CONTEXTMENU","TOUCHSTART","TOUCHEND","TOUCHMOVE","TOUCHCANCEL","WHEEL","MAX_LAYERS_NUMBER","EVENTS","EVENTS_MAP","getEventType","getEventsMap","checkNoClip","NO_POINTERS_MESSAGE","stages","Stage","isLayer","isFastLayer","style","id","layers","content","p","layerCanvas","rest","length","PointerEvents.hasPointerCapture","PointerEvents.setPointerCapture","PointerEvents.releaseCapture","evenType","targetShape","eventsEnabled","triggeredOnShape","isTouch","processedShapesIds","PointerEvents.getCapturedShape","differentTarget","clickStartShape","clickEndShape","fireDblClick","PointerEvents.createEvent","contentPosition","touch","HAS_SHADOW","SHADOW_RGBA","patternImage","linearGradient","radialGradient","dummyContext","getDummyContext","_fillFunc","_strokeFunc","_fillFuncHit","_strokeFuncHit","_clearHasShadowCache","_clearGetShadowRGBACache","_clearFillPatternCache","_clearLinearGradientCache","_clearRadialGradientCache","Shape","ctx","pattern","rgba","bufferHitCanvas","forceFill","hasFill","hasStroke","isTransparent","hasShadow","strokeForShadow","fillRect","fillAndStrokeWidth","fillAndStrokeHeight","applyShadow","shadowOffsetX","shadowOffsetY","preWidth","preHeight","blurRadius","drawFunc","bufferCanvas","bufferContext","skipBuffer","cachingSelf","o","alphaThreshold","hitWidth","hitHeight","hitImageData","hitData","rgbColorKey","alpha","BEFORE_DRAW","DRAW","INTERSECTION_OFFSETS","INTERSECTION_OFFSETS_LEN","Layer","moved","_canvas","spiralSearchDistance","continueSearch","intersectionOffset","p3","colorKey","added","FastLayer","Group","now","Animation","lays","animations","time","anim","layerHash","layersLen","needRedraw","Anim","blacklist","PAUSED","PLAYING","REVERSING","colorAttrs","TweenEngine","propFunc","begin","finish","duration","yoyo","Tween","nodeId","easing","Easings","diff","tweenId","trueEnd","trueStart","endRGBA","startRGBA","thisId","params","onFinish","tween","Global","Arc","clockwise","innerRadius","outerRadius","boundLeftRatio","boundRightRatio","boundTopRatio","boundBottomRatio","boundLeft","boundRight","boundTop","boundBottom","getControlPoints","x0","y0","d01","d12","fa","fb","p1x","p1y","p2x","p2y","expandPoints","tension","allPoints","cp","Line","closed","bezier","tp","firstControlPoints","lastControlPoints","middle","Path","ca","cx","cy","rx","ry","dTheta","psi","fs","inc","ii","P1x","P1y","P2x","P2y","fromX","fromY","run","rise","ix","iy","pRise","pRun","pct","P3x","P3y","P4x","P4y","CB1","CB2","CB3","CB4","QB1","QB2","QB3","cosPsi","sinPsi","cs","cc","coords","cpx","cpy","re","match","j","jlen","parsed","cmd","startX","startY","prevCmd","ctlPtx","ctlPty","idx","path","psiDeg","xp","yp","lambda","cxp","cyp","vMag","v","vRatio","vAngle","Arrow","PI2","fromTension","lp","lastLength","previous","isDashEnabled","lineRect","Circle","Ellipse","Image","image","cropWidth","cropHeight","onError","ATTR_CHANGE_LIST","CHANGE_KONVA","NONE","UP","RIGHT","DOWN","LEFT","attrChangeListLen","Label","tag","pointerDirection","pointerWidth","pointerHeight","Tag","cornerRadius","topLeft","topRight","bottomLeft","bottomRight","direction","Rect","RegularPolygon","sides","radius","PIx2","Ring","Sprite","updated","ix4","set","offsets","ix2","animation","Star","numPoints","stringToArray","string","AUTO","CENTER","JUSTIFY","CONTEXT_2D","DASH","TEXT","TEXT_UPPER","TOP","BOTTOM","MIDDLE","NORMAL","PX_SPACE","WORD","CHAR","ELLIPSIS","normalizeFontFamily","fontFamily","hasSpace","hasQuotes","checkDefaultFill","Text","textArr","textArrLen","padding","fontSize","lineHeightPx","verticalAlign","alignY","align","totalWidth","letterSpacing","textDecoration","shouldUnderline","shouldLineThrough","translateY","lineTranslateX","lineTranslateY","lastLine","spacesNumber","oneWord","lineWidth","array","li","letter","metrics","lines","textWidth","fixedWidth","fixedHeight","maxHeightPx","currentHeightPx","wrap","shouldWrap","wrapAtWord","shouldAddEllipsis","additionalWidth","max","low","high","matchWidth","mid","substr","substrWidth","wrapIndex","nextChar","nextIsSpaceOrDash","shouldHandleEllipsis","haveSpace","TextPath","glyphInfo","p0","dummyCanvas","kerningFunc","textFullWidth","fullPathWidth","charArr","pathCmd","pIndex","currentT","getNextPathSegment","pathData","findSegmentToFitCharacter","glyphWidth","currLen","attempts","cumulativePathLength","needNewSegment","testChar","lettersInOffset","k","kern","midpoint","info","EVENTS_NAME","NODES_RECT","ANGLES","TOUCH_DEVICE","getCursor","anchorName","ANCHORS_NAMES","MAX_SAFE_INTEGER","getCenter","rotateAroundPoint","angleRad","rotateAroundCenter","deltaRad","center","getSnap","snaps","newRotationRad","tol","snapped","absDiff","Transformer","onChange","additionalEvents","elementsCreated","lastPos","abs","otherNode","otherAbs","rot","relative","absScale","absPos","totalPoints","anchor","self","cursor","back","hypotenuse","newHypotenuse","anchorNode","pp","oldAbs","newAbs","oldRotation","newRotation","keepProportion","centeredScaling","comparePoint","reverseX","reverseY","topOffsetX","topOffsetY","bottomOffsetX","bottomOffsetY","newAttrs","oldAttrs","minSize","allowNegativeScale","baseSize","oldTr","newTr","parentTransform","localTransform","newLocalTransform","enabledAnchors","resizeEnabled","anchorSize","validateAnchors","Wedge","BlurStack","mul_table","shg_table","filterGaussBlurRGBA","pixels","yi","yw","r_sum","g_sum","b_sum","a_sum","r_out_sum","g_out_sum","b_out_sum","a_out_sum","r_in_sum","g_in_sum","b_in_sum","a_in_sum","pg","pb","pa","rbs","div","widthMinus1","heightMinus1","radiusPlus1","sumFactor","stackStart","stackEnd","stack","stackIn","stackOut","mul_sum","shg_sum","Blur","Brighten","brightness","Contrast","adjust","nPixels","red","green","blue","Emboss","strength","greyLevel","blend","dirY","dirX","w","w4","otherY","offsetYOther","otherX","offsetOther","dR","dG","dB","dif","absDif","absG","absB","grey","remap","fromValue","fromMin","fromMax","toMin","toMax","fromRange","toRange","toValue","Enhance","nSubPixels","rMin","rMax","gMin","gMax","bMin","bMax","enhanceAmount","rMid","rGoalMax","rGoalMin","gMid","gGoalMax","gGoalMin","bMid","bGoalMax","bGoalMin","Grayscale","HSL","vsu","vsw","rr","rg","rb","gr","gg","gb","br","bg","bb","HSV","Invert","ToPolar","src","dst","opt","srcPixels","dstPixels","xSize","ySize","xMid","yMid","rSize","tSize","conversion","sin","cos","FromPolar","phaseShift","Kaleidoscope","xoff","srcPos","dstPos","power","tempCanvas","scratchData","minSectionSize","sectionSize","xStart","xEnd","xDelta","pixelAt","idata","rgbDistance","rgbMean","pTab","backgroundMask","threshold","rgbv_no","rgbv_ne","rgbv_so","rgbv_se","thres","mean","mask","applyMask","erodeMask","sw","sh","weights","side","halfSide","maskResult","so","scy","scx","srcOff","wt","dilateMask","smoothEdgeMask","Mask","Noise","amount","half","Pixelate","pixelSize","nBinsX","nBinsY","xBinStart","xBinEnd","yBinStart","yBinEnd","xBin","yBin","pixelsInBin","Posterize","levels","RGB","RGBA","ia","Sepia","Solarize","Threshold","level","Core","extendStatics","__extends","__","__awaiter","thisArg","_arguments","P","generator","adopt","value","fulfilled","step","rejected","__generator","body","verb","__values","__read","ar","error","__spreadArray","to","from","pack","__await","__asyncGenerator","q","resume","settle","fulfill","__asyncValues","isFunction","createErrorClass","createImpl","_super","instance","ctorFunc","UnsubscriptionError","errors","arrRemove","Subscription","initialTeardown","e_1","e_2","_parentage","_parentage_1","_parentage_1_1","parent_1","e_1_1","initialFinalizer","_finalizers","_finalizers_1","_finalizers_1_1","finalizer","execFinalizer","e_2_1","teardown","empty","EMPTY_SUBSCRIPTION","isSubscription","timeoutProvider","timeout","_i","delegate","handle","reportUnhandledError","noop","errorContext","Subscriber","destination","_this","EMPTY_OBSERVER","next","complete","SafeSubscriber","_bind","bind","ConsumerObserver","partialObserver","handleUnhandledError","observerOrNext","context_1","defaultErrorHandler","observable","identity","pipeFromArray","fns","input","prev","Observable","subscribe","operator","subscriber","isSubscriber","sink","promiseCtor","getPromiseCtor","Symbol_observable","operations","isObserver","hasLift","operate","init","liftedSource","createOperatorSubscriber","onNext","onComplete","onFinalize","OperatorSubscriber","shouldUnsubscribe","closed_1","ObjectUnsubscribedError","Subject","subject","AnonymousSubject","observer","observers","hasError","isStopped","thrownError","BehaviorSubject","_value","subscription","dateTimestampProvider","Action","scheduler","work","state","delay","intervalProvider","AsyncAction","_id","_scheduler","_delay","errored","errorValue","actions","Scheduler","schedulerActionCtor","AsyncScheduler","SchedulerAction","action","asyncScheduler","async","EMPTY","isScheduler","last","popResultSelector","popScheduler","isArrayLike","isPromise","isInteropObservable","isAsyncIterable","createInvalidObservableTypeError","getSymbolIterator","iterator","isIterable","Symbol_iterator","readableStreamLikeToAsyncGenerator","readableStream","reader","done","isReadableStreamLike","innerFrom","fromInteropObservable","fromArrayLike","fromPromise","fromAsyncIterable","fromIterable","fromReadableStreamLike","obs","promise","iterable","iterable_1","iterable_1_1","asyncIterable","process","asyncIterable_1","asyncIterable_1_1","executeSchedule","parentSubscription","repeat","scheduleSubscription","observeOn","subscribeOn","scheduleObservable","schedulePromise","scheduleArray","scheduleIterable","scheduleAsyncIterable","scheduleReadableStreamLike","scheduled","of","EmptyError","isValidDate","map","project","isArray","callOrApply","mapOneOrManyArgs","getPrototypeOf","objectProto","getKeys","argsArgArrayOrObject","first_1","isPOJO","keys","createObject","values","combineLatest","resultSelector","observables","combineLatestInit","valueTransform","maybeSchedule","active","remainingFirstValues","_loop_1","hasFirstValue","execute","mergeInternals","concurrent","onBeforeNext","expand","innerSubScheduler","additionalFinalizer","buffer","isComplete","checkComplete","outerNext","doInnerSub","innerComplete","innerValue","bufferedValue","mergeMap","mergeAll","concatAll","concat","forkJoin","sources","remainingCompletions","remainingEmissions","sourceIndex","hasValue","nodeEventEmitterMethods","eventTargetMethods","jqueryMethods","fromEvent","eventName","options","isEventTarget","isNodeStyleEventEmitter","toCommonHandlerRegistry","isJQueryStyleEventEmitter","add","remove","subTarget","timer","dueTime","intervalOrScheduler","intervalDuration","due","interval","period","predicate","catchError","innerSub","syncUnsub","handledResult","debounceTime","activeTask","lastValue","lastTime","emit","emitWhenIdle","targetTime","defaultIfEmpty","take","count","seen","ignoreElements","mapTo","delayWhen","delayDurationSelector","subscriptionDelay","throwIfEmpty","errorFactory","defaultErrorFactory","first","hasDefaultValue","switchMap","innerSubscriber","innerIndex","outerIndex","takeUntil","notifier","StyleAdapter","composeConfigAndDefault","configDefault","BaseComponent","konvaNode","Constants","assertIs","_arg","assertNever","_x","items","validKeys","filtered","object","checker","joinValues","separator","ZodParsedType","getParsedType","ZodIssueCode","quotelessJson","ZodError","issues","sub","subs","actualProto","_mapper","mapper","issue","fieldErrors","processError","curr","formErrors","errorMap","_ctx","overrideErrorMap","setErrorMap","getErrorMap","makeIssue","errorMaps","issueData","fullPath","fullIssue","errorMessage","maps","EMPTY_PATH","addIssueToContext","ParseStatus","status","arrayValue","INVALID","pairs","syncPairs","pair","finalObject","DIRTY","OK","isAborted","isDirty","isValid","isAsync","errorUtil","ParseInputLazyPath","handleResult","processCreateParams","invalid_type_error","required_error","description","iss","ZodType","maybeAsyncResult","check","getIssueProperties","setError","refinementData","refinement","ZodEffects","ZodFirstPartyTypeKind","ZodOptional","ZodNullable","ZodArray","ZodPromise","option","ZodUnion","incoming","ZodIntersection","defaultValueFunc","ZodDefault","ZodBranded","catchValueFunc","ZodCatch","This","ZodPipeline","cuidRegex","cuid2Regex","uuidRegex","emailRegex","datetimeRegex","ZodString","regex","validation","tooBig","tooSmall","minLength","maxLength","ch","min","floatSafeRemainder","valDecCount","stepDecCount","decCount","valInt","stepInt","ZodNumber","kind","inclusive","ZodBigInt","ZodBoolean","ZodDate","minDate","maxDate","ZodSymbol","ZodUndefined","ZodNull","ZodAny","ZodUnknown","ZodNever","ZodVoid","schema","objectUtil","second","deepPartialify","ZodObject","newShape","fieldSchema","ZodTuple","shapeKeys","extraKeys","keyValidator","unknownKeys","catchall","_d","defaultError","augmentation","merging","newField","createZodEnum","handleResults","unionErrors","childCtx","dirty","types","getDiscriminator","ZodLazy","ZodLiteral","ZodEnum","ZodNativeEnum","ZodDiscriminatedUnion","discriminator","discriminatorValue","optionsMap","discriminatorValues","mergeValues","aType","bType","bKeys","sharedKeys","newObj","sharedValue","newArray","itemA","itemB","handleParsed","parsedLeft","parsedRight","merged","itemIndex","schemas","ZodRecord","keyType","valueType","third","ZodMap","finalMap","ZodSet","finalizeSet","elements","parsedSet","element","maxSize","ZodFunction","makeArgsIssue","makeReturnsIssue","returns","parsedArgs","parsedReturns","returnType","expectedValues","enumValues","nativeEnumValues","promisified","effect","processed","checkCtx","arg","executeRefinement","acc","inner","base","preprocess","ZodNaN","BRAND","inResult","custom","fatal","late","instanceOfType","cls","stringType","numberType","nanType","bigIntType","booleanType","dateType","symbolType","undefinedType","nullType","anyType","unknownType","neverType","voidType","arrayType","objectType","strictObjectType","unionType","discriminatedUnionType","intersectionType","tupleType","recordType","mapType","setType","functionType","lazyType","literalType","enumType","nativeEnumType","promiseType","effectsType","optionalType","nullableType","preprocessType","pipelineType","ostring","onumber","oboolean","coerce","NEVER","mod","Validators","z","StylesProvider","TIMELINE_LANE_STYLE_DEFAULT","BaseTimelineLane","styles","timeline","videoController","position","MARKER_STYLE_DEFAULT","BaseMarker","markerLane","timeObservation","editable","WindowUtil","MARKER_HANDLE_STYLE_DEFAULT","BaseMarkerHandle","markerHandleGroup","verticalMeasurement","newX","EXP_LIMIT","MAX_DIGITS","NUMERALS","LN10","PI","DEFAULTS","inexact","quadrant","external","decimalError","invalidArgument","precisionLimitExceeded","cryptoUnavailable","mathfloor","mathpow","isBinary","isHex","isOctal","isDecimal","BASE","LOG_BASE","LN10_PRECISION","PI_PRECISION","finalise","Ctor","xdL","ydL","xd","yd","xs","ys","rm","cosine","toLessThanHalfPi","rep","sd","t3plusx","digitsToString","divide","one","tinyPow","taylorSeries","cosh2_x","d8","sinh2_x","d5","d16","d20","halfPi","getPi","wpr","xsd","isBase10","denominator","inf","num","guard","naturalLogarithm","getLn10","checkRoundingDigits","xe","xLTy","getBase10Exponent","naturalExponential","carry","getPrecision","sine","rL","toStringBinary","dp","checkInt32","finiteToString","maxD","d0","d1","d2","n0","n1","yn","intPow","ws","indexOfLastWord","getZeroString","repeating","di","rd","convertBase","baseIn","baseOut","arrL","strL","cos2x","multiplyInteger","compare","aL","bL","subtract","cmp","logBase","more","prod","prodL","qd","rem","remL","rem0","xi","xL","yd0","yL","yz","sign","isTruncated","digits","roundUp","xdi","out","isExp","nonFiniteToString","zs","truncate","isOdd","maxOrMin","ltgt","pow","sum","c0","numerator","parseDecimal","parseOther","divisor","isFloat","Decimal","sin2_x","isHyperbolic","isNeg","pi","acos","acosh","asin","asinh","atan","atanh","atan2","cbrt","ceil","clamp","useDefaults","ps","cosh","clone","isDecimalInstance","exp","floor","hypot","ln","log","log10","log2","mul","random","round","sinh","sqrt","tan","tanh","trunc","markerHandleConfigDefault","PeriodMarkerHandle","halfDiagonal","markerConfigDefault","PeriodMarker","markerHandleVerticalMeasurement","endX","newTime","MomentMarkerHandle","MomentMarker","styleDefault","MarkerLane","horizontalMeasurement","marker","ColorUtil","ShapeUtil","halfWidth","toString","kindOf","thing","kindOfTest","typeOfTest","isUndefined","isBuffer","isArrayBuffer","isArrayBufferView","isObject","isBoolean","isPlainObject","prototype","isDate","isFile","isBlob","isFileList","isStream","isFormData","isURLSearchParams","trim","forEach","allOwnKeys","findKey","_key","_global","isContextDefined","merge","caseless","assignValue","targetKey","extend","stripBOM","inherits","superConstructor","props","descriptors","toFlatObject","sourceObj","destObj","propFilter","endsWith","searchString","lastIndex","toArray","isTypedArray","forEachEntry","matchAll","regExp","matches","isHTMLForm","toCamelCase","hasOwnProperty","isRegExp","reduceDescriptors","reducer","reducedDescriptors","descriptor","freezeMethods","toObjectSet","arrayOrString","delimiter","define","toFiniteNumber","ALPHA","DIGIT","ALPHABET","generateString","alphabet","isSpecCompliantForm","toJSONObject","visit","reducedValue","utils","AxiosError","code","request","response","customProps","axiosError","httpAdapter","isVisitable","removeBrackets","renderKey","dots","token","isFlatArray","predicates","toFormData","formData","metaTokens","visitor","defaultVisitor","indexes","useBlob","convertValue","exposedHelpers","build","encode","charMap","AxiosURLSearchParams","encoder","_encode","buildURL","serializeFn","serializedParams","hashmarkIndex","InterceptorManager","InterceptorManager$1","transitionalDefaults","URLSearchParams$1","FormData$1","isStandardBrowserEnv","product","isStandardBrowserWebWorkerEnv","platform","URLSearchParams","FormData","toURLEncodedForm","helpers","parsePropPath","arrayToObject","formDataToJSON","buildPath","isNumericKey","isLast","DEFAULT_CONTENT_TYPE","stringifySafely","rawValue","parser","defaults","headers","contentType","hasJSONContentType","isObjectPayload","_FormData","transitional","forcedJSONParsing","JSONRequested","strictJSONParsing","defaults$1","ignoreDuplicateOf","parseHeaders","rawHeaders","$internals","normalizeHeader","header","normalizeValue","parseTokens","tokens","tokensRE","isValidHeaderName","matchHeaderValue","isHeaderNameFilter","formatHeader","char","buildAccessors","accessorName","arg1","arg2","arg3","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_header","_rewrite","lHeader","setHeaders","matcher","deleted","deleteHeader","format","normalized","asStrings","computed","accessors","defineAccessor","AxiosHeaders$1","transformData","isCancel","CanceledError","validateStatus","cookies","expires","domain","secure","cookie","isAbsoluteURL","combineURLs","baseURL","relativeURL","buildFullPath","requestedURL","isURLSameOrigin","msie","urlParsingNode","originURL","resolveURL","href","requestURL","parseProtocol","speedometer","samplesCount","bytes","timestamps","head","tail","firstSampleTS","chunkLength","startedAt","bytesCount","passed","progressEventReducer","isDownloadStream","bytesNotified","_speedometer","loaded","total","progressBytes","rate","inRange","isXHRAdapterSupported","xhrAdapter","requestData","requestHeaders","responseType","onCanceled","username","password","onloadend","responseHeaders","timeoutErrorMessage","xsrfValue","cancel","protocol","knownAdapters","adapters","nameOrAdapter","adapter","throwIfCancellationRequested","dispatchRequest","reason","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","configValue","VERSION","validators","deprecatedWarnings","version","formatMessage","opts","assertOptions","allowUnknown","Axios","instanceConfig","configOrUrl","paramsSerializer","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","chain","newConfig","onFulfilled","onRejected","generateHTTPMethod","isForm","Axios$1","CancelToken","executor","resolvePromise","onfulfilled","_resolve","CancelToken$1","spread","isAxiosError","payload","HttpStatusCode","HttpStatusCode$1","createInstance","defaultConfig","axios","promises","axios$1","httpGet","ParserError","TIMESTAMP_REGEXP","parse","meta","strict","headerParts","headerComments","cues","parseCues","headerMeta","parseMeta","splitIdx","cue","parseCue","identifier","msg","times","validTimestamp","parseTimestamp","timestamp","secs","CompilerError","compile","output","compileCue","startTimestamp","convertTimestamp","endTimestamp","hours","pad","calculateHours","minutes","calculateMinutes","seconds","calculateSeconds","milliseconds","calculateMs","zeroes","compiler","require$$0","segment","segmentLength","segments","queuedCue","currentSegmentDuration","totalSegmentsDuration","firstCue","lastCue","nextStart","cueLength","silence","shouldQueue","shouldSegment","segmentDuration","alignToSegmentLength","currentSegment","totalSegments","segmenter","hlsSegment","startOffset","seg","printableCues","filename","generateSegmentFilename","hlsSegmentPlaylist","segmented","printable","printableSegments","findLongestSegment","printableCue","printableTimestamp","ms","mins","hls","require$$1","require$$2","require$$3","nodeWebvtt","BaseOmakaseVttFile","vttFileText","webvtt","parsedCue","startTime","endTime","startIndex","endIndex","SubtitlesVttFile","vttCueParsed","SubtitlesLaneItem","subtitlesLane","currentMeasurement","visible","textTrackCue","SubtitlesLane","subtitlesLaneItem","startTimeX","endTimeX","subtitlesVttFile","caught","Thumbnail","dimension","thumbnailVttCue","ThumbnailVttFile","relativePath","ImageUtil","o$","ThumbnailLane","thumbnail","mostRecentVisible","lastThumbnailBoundary","timecodedRect","thumbnailHoverImageSize","halfStroke","thumbnailHeight","thumbnailVttFile","thumbnailWidth","AudioVttFile","splitted","minSample","maxSample","AudioTrackLaneItem","barMaxHeight","maxSampleBarHeight","minSampleBarHeight","audioVttCue","AudioTrackLane","timeRange","timecodedContainerWidth","numOfCuesPerInterpolation","cuesInterpolations","itemPosition","audioTrackLaneItem","cuesLength","interpolatedCuesSurplus","sliceEndIndex","interpolationLength","sliceStartIndex","cuesForInterpolation","minSampleSum","maxSampleSum","audioVttFile","audioTrackVttFile","animate","isRising","maxValue","frame","newValue","updatedValue","Scrollbar","newPosition","zoomInConfig","zoomOutConfig","constrainLeftHandleX","wantedX","constrainRightHandleX","scrollbarWidth","newScrollHandleX","scrollStep","isScrollHandleToRight","oneStepMoveX","currentX","zoomRatioPercent","scrollable","PlayheadHover","isSnapped","textRect","textHalfWidth","labelX","Playhead","timecodedGroupDimension","bufferedTimespans","numOfBuffers","previousNumOfBuffers","bufferedRect","bufferedTimespan","TimecodeDisplay","ScrubberLane","forceCreate","tickDivisor","tickMinDivisionWidth","timelineWidth","newDivisionWidth","newTotalDivisions","moveTicksInsteadOfCreate","tickGroupY","firstTextLeftPadding","lastTextRightPadding","textBottomPadding","isFirstTick","isLastTick","isDivisionTick","tickGroupX","lineHeight","lineY","textBottomY","tickGroup","lineX","showTimecode","minDivisionWidth","initialDivisor","SCRUBBER_LANE_ID","Timeline","stageDimensions","konvaEvent","heights","timelineLane","dimensions","bodyHeight","current","divElementRect","pointerPosition","imageSize","scrubberLaneRect","maxScroll","percent","timelineX","measurement","newTimelineX","currentTimelineX","playheadPosition","isInBeforeTimecodedView","isInVisiblePositionRange","containerDimension","currentWidth","newWidth","zoomFocus","currentWidthDecimal","updateScrollbar","repositionFocus","containerRect","zoomDirection","zoomFocusRationDecimal","totalDelta","leftSideDelta","containerX2","scrollPercent","timelaneLane","isFirstLane","partialSum","timelaneLanes","lane","xOnTimeline","constrainedX","visiblePosition","positionRange","FrameUtil","frameRateDecimal","framesCount","completeSubject","BrowserProvider","_TimeUtil","frameInSecond","TimeUtil","PlaybackStateMachine","partialState","newState","isEqual","o1","o2","HTMLVideoElementEventKeys","VideoController","domController","crossorigin","videoFrameCallbackData","sourceUrl","frameRate","video","currentTimePlusOneFrame","currentTime","timeOffset","comparisonTime","isWaiting","timeRanges","nextVideoFrameCallback","metadata","onVideoFrameCallback","syncConditions","syncBreaker$","syncLoopVideoCallbackBreaker$","syncLoopIterationsLeft","completeSync","seek","syncBreak","checkIfDone","currentTimeFrame","mediaTime","mediaTimeFrame","seekToFrameTimeBaseline","syncLoop","frameDiff","frameCorrectionTime","seekTo","seekDirection","diffDecimal","frameNumberCheck","currentFrame","seekToFrame","playbackRate","volume","audioTrackId","helpMenuGroup","Video","VideoHlsController","Hls","errorDetails","hlsMediaAttached$","mediaAttachedData","hlsManifestParsed$","manifestParsedData","videoLoadedData$","previousIndex","currentIndex","BaseOmakaseTrack","SubtitlesVttTrack","SubtitlesController","omakaseTextTrack","textTrack","track","trackElement","domTextTrack","has","prefix","Events","EE","once","addListener","emitter","clearEvent","EventEmitter","handlers","ee","module","OmakasePlayerEvents","AudioController","Fullscreen","_document","omakaseClasses","DomController","playerHTMLElementId","elementId","helpMenuItem","videoElement","allOverlayButtons","clearShowTemporaryOnMouseMoveTimeoutId","playControlToShow","videoLoaded","OMAKASE_PLAYER_STYLE_DEFAULT","OmakasePlayer","videoSourceUrl","videoFrameRate","createTimeline","eventKey"],"mappings":"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ACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GACIC,KAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AACA,SAASC,GAAoBtlB,GAAWma,GAAQ;AAC5C,MAAIoL,IAASvlB,EA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"}