{"version":3,"file":"static/js/52.d2d71f9a.chunk.js","mappings":"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","sources":["../node_modules/@react-google-maps/api/node_modules/invariant/invariant.js","../node_modules/@react-google-maps/api/src/map-context.ts","../node_modules/@react-google-maps/api/src/utils/helper.ts","../node_modules/@react-google-maps/api/src/utils/foreach.ts","../node_modules/@react-google-maps/api/src/utils/reduce.ts","../node_modules/@react-google-maps/api/src/GoogleMap.tsx","../node_modules/@react-google-maps/api/node_modules/tslib/tslib.es6.js","../node_modules/@react-google-maps/api/src/utils/isbrowser.ts","../node_modules/@react-google-maps/api/src/utils/injectscript.ts","../node_modules/@react-google-maps/api/src/utils/prevent-google-fonts.ts","../node_modules/@react-google-maps/api/src/utils/make-load-script-url.ts","../node_modules/@react-google-maps/api/src/LoadScript.tsx","../node_modules/@react-google-maps/api/src/useLoadScript.tsx","../node_modules/@react-google-maps/api/src/LoadScriptNext.tsx","../node_modules/@react-google-maps/api/src/components/maps/TrafficLayer.tsx","../node_modules/@react-google-maps/api/src/components/maps/BicyclingLayer.tsx","../node_modules/@react-google-maps/api/src/components/maps/TransitLayer.tsx","../node_modules/@react-google-maps/api/src/components/drawing/DrawingManager.tsx","../node_modules/@react-google-maps/api/src/components/drawing/Marker.tsx","../node_modules/@react-google-maps/api/node_modules/@react-google-maps/marker-clusterer/dist/esm.js","../node_modules/@react-google-maps/api/src/components/addons/MarkerClusterer.tsx","../node_modules/@react-google-maps/api/node_modules/@react-google-maps/infobox/dist/esm.js","../node_modules/@react-google-maps/api/src/components/addons/InfoBox.tsx","../node_modules/@react-google-maps/api/node_modules/density-clustering/lib/DBSCAN.js","../node_modules/@react-google-maps/api/node_modules/density-clustering/lib/KMEANS.js","../node_modules/@react-google-maps/api/node_modules/density-clustering/lib/PriorityQueue.js","../node_modules/@react-google-maps/api/node_modules/density-clustering/lib/OPTICS.js","../node_modules/@react-google-maps/api/node_modules/density-clustering/lib/index.js","../node_modules/@react-google-maps/api/node_modules/supercluster/dist/supercluster.js","../node_modules/@react-google-maps/api/node_modules/@googlemaps/markerclusterer/dist/index.esm.js","../node_modules/@react-google-maps/api/src/components/drawing/InfoWindow.tsx","../node_modules/@react-google-maps/api/src/components/drawing/Polyline.tsx","../node_modules/@react-google-maps/api/src/components/drawing/Polygon.tsx","../node_modules/@react-google-maps/api/src/components/drawing/Rectangle.tsx","../node_modules/@react-google-maps/api/src/components/drawing/Circle.tsx","../node_modules/@react-google-maps/api/src/components/drawing/Data.tsx","../node_modules/@react-google-maps/api/src/components/kml/KmlLayer.tsx","../node_modules/@react-google-maps/api/src/components/dom/dom-helper.ts","../node_modules/@react-google-maps/api/src/components/dom/OverlayView.tsx","../node_modules/@react-google-maps/api/src/components/overlays/GroundOverlay.tsx","../node_modules/@react-google-maps/api/src/components/heatmap/HeatmapLayer.tsx","../node_modules/@react-google-maps/api/src/components/streetview/StreetViewPanorama.tsx","../node_modules/@react-google-maps/api/src/components/streetview/StreetViewService.tsx","../node_modules/@react-google-maps/api/src/components/directions/DirectionsService.tsx","../node_modules/@react-google-maps/api/src/components/directions/DirectionsRenderer.tsx","../node_modules/@react-google-maps/api/src/components/distance-matrix/DistanceMatrixService.tsx","../node_modules/@react-google-maps/api/src/components/places/StandaloneSearchBox.tsx","../node_modules/@react-google-maps/api/src/components/places/Autocomplete.tsx","../node_modules/add-px-to-style/index.js","../node_modules/dom-css/index.js","../node_modules/lottie-react/compiled/hooks/useLottie.js","../node_modules/lottie-react/compiled/hooks/useLottieInteractivity.js","../node_modules/lottie-react/compiled/components/Lottie.js","../node_modules/lottie-react/compiled/index.js","../node_modules/lottie-web/build/player/lottie.js","../node_modules/moment/moment.js","../node_modules/performance-now/src/performance-now.coffee","../node_modules/prefix-style/index.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/raf/index.js","../node_modules/react-custom-scrollbars/lib/Scrollbars/defaultRenderElements.js","../node_modules/react-custom-scrollbars/lib/Scrollbars/index.js","../node_modules/react-custom-scrollbars/lib/Scrollbars/styles.js","../node_modules/react-custom-scrollbars/lib/index.js","../node_modules/react-custom-scrollbars/lib/utils/getInnerHeight.js","../node_modules/react-custom-scrollbars/lib/utils/getInnerWidth.js","../node_modules/react-custom-scrollbars/lib/utils/getScrollbarWidth.js","../node_modules/react-custom-scrollbars/lib/utils/isString.js","../node_modules/react-custom-scrollbars/lib/utils/returnFalse.js","../node_modules/to-camel-case/index.js","../node_modules/to-no-case/index.js","../node_modules/to-space-case/index.js","../javascript/esm|/home/runner/work/imapp-api-deploy-test/imapp-api-deploy-test/react-imapp-panel/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../javascript/esm|/home/runner/work/imapp-api-deploy-test/imapp-api-deploy-test/react-imapp-panel/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","../javascript/esm|/home/runner/work/imapp-api-deploy-test/imapp-api-deploy-test/react-imapp-panel/node_modules/@babel/runtime/helpers/esm/createSuper.js","../javascript/esm|/home/runner/work/imapp-api-deploy-test/imapp-api-deploy-test/react-imapp-panel/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../javascript/esm|/home/runner/work/imapp-api-deploy-test/imapp-api-deploy-test/react-imapp-panel/node_modules/@babel/runtime/helpers/esm/inherits.js","../javascript/esm|/home/runner/work/imapp-api-deploy-test/imapp-api-deploy-test/react-imapp-panel/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../javascript/esm|/home/runner/work/imapp-api-deploy-test/imapp-api-deploy-test/react-imapp-panel/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../javascript/esm|/home/runner/work/imapp-api-deploy-test/imapp-api-deploy-test/react-imapp-panel/node_modules/@babel/runtime/helpers/esm/typeof.js","../javascript/esm|/home/runner/work/imapp-api-deploy-test/imapp-api-deploy-test/react-imapp-panel/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../javascript/esm|/home/runner/work/imapp-api-deploy-test/imapp-api-deploy-test/react-imapp-panel/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../javascript/esm|/home/runner/work/imapp-api-deploy-test/imapp-api-deploy-test/react-imapp-panel/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../javascript/esm|/home/runner/work/imapp-api-deploy-test/imapp-api-deploy-test/react-imapp-panel/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../javascript/esm|/home/runner/work/imapp-api-deploy-test/imapp-api-deploy-test/react-imapp-panel/node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../javascript/esm|/home/runner/work/imapp-api-deploy-test/imapp-api-deploy-test/react-imapp-panel/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../javascript/esm|/home/runner/work/imapp-api-deploy-test/imapp-api-deploy-test/react-imapp-panel/node_modules/@babel/runtime/helpers/esm/construct.js","../javascript/esm|/home/runner/work/imapp-api-deploy-test/imapp-api-deploy-test/react-imapp-panel/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../javascript/esm|/home/runner/work/imapp-api-deploy-test/imapp-api-deploy-test/react-imapp-panel/node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","../node_modules/swiper/react/utils.js","../node_modules/swiper/react/params-list.js","../node_modules/swiper/react/loop.js","../node_modules/swiper/react/get-children.js","../node_modules/swiper/react/update-swiper.js","../node_modules/swiper/react/use-isomorphic-layout-effect.js","../node_modules/swiper/react/context.js","../node_modules/swiper/react/swiper.js","../node_modules/swiper/react/get-params.js","../node_modules/swiper/react/mount-swiper.js","../node_modules/swiper/react/get-changed-params.js","../node_modules/swiper/react/virtual.js","../node_modules/swiper/react/swiper-slide.js","../node_modules/ssr-window/ssr-window.esm.js","../node_modules/dom7/dom7.esm.js","../node_modules/swiper/shared/dom.js","../node_modules/swiper/shared/get-support.js","../node_modules/swiper/shared/get-device.js","../node_modules/swiper/shared/get-browser.js","../node_modules/swiper/shared/utils.js","../node_modules/swiper/core/events-emitter.js","../node_modules/swiper/core/update/index.js","../node_modules/swiper/core/update/updateSize.js","../node_modules/swiper/core/update/updateSlides.js","../node_modules/swiper/core/update/updateAutoHeight.js","../node_modules/swiper/core/update/updateSlidesOffset.js","../node_modules/swiper/core/update/updateSlidesProgress.js","../node_modules/swiper/core/update/updateProgress.js","../node_modules/swiper/core/update/updateSlidesClasses.js","../node_modules/swiper/core/update/updateActiveIndex.js","../node_modules/swiper/core/update/updateClickedSlide.js","../node_modules/swiper/core/translate/index.js","../node_modules/swiper/core/translate/getTranslate.js","../node_modules/swiper/core/translate/setTranslate.js","../node_modules/swiper/core/translate/minTranslate.js","../node_modules/swiper/core/translate/maxTranslate.js","../node_modules/swiper/core/translate/translateTo.js","../node_modules/swiper/core/transition/transitionEmit.js","../node_modules/swiper/core/slide/index.js","../node_modules/swiper/core/slide/slideTo.js","../node_modules/swiper/core/slide/slideToLoop.js","../node_modules/swiper/core/slide/slideNext.js","../node_modules/swiper/core/slide/slidePrev.js","../node_modules/swiper/core/slide/slideReset.js","../node_modules/swiper/core/slide/slideToClosest.js","../node_modules/swiper/core/slide/slideToClickedSlide.js","../node_modules/swiper/core/loop/index.js","../node_modules/swiper/core/loop/loopCreate.js","../node_modules/swiper/core/loop/loopFix.js","../node_modules/swiper/core/loop/loopDestroy.js","../node_modules/swiper/core/events/onTouchStart.js","../node_modules/swiper/core/events/onTouchMove.js","../node_modules/swiper/core/events/onTouchEnd.js","../node_modules/swiper/core/events/onResize.js","../node_modules/swiper/core/events/onClick.js","../node_modules/swiper/core/events/onScroll.js","../node_modules/swiper/core/events/index.js","../node_modules/swiper/core/breakpoints/setBreakpoint.js","../node_modules/swiper/core/breakpoints/index.js","../node_modules/swiper/core/breakpoints/getBreakpoint.js","../node_modules/swiper/core/classes/index.js","../node_modules/swiper/core/classes/addClasses.js","../node_modules/swiper/core/classes/removeClasses.js","../node_modules/swiper/core/check-overflow/index.js","../node_modules/swiper/core/defaults.js","../node_modules/swiper/core/moduleExtendParams.js","../node_modules/swiper/core/core.js","../node_modules/swiper/core/transition/index.js","../node_modules/swiper/core/transition/setTransition.js","../node_modules/swiper/core/transition/transitionStart.js","../node_modules/swiper/core/transition/transitionEnd.js","../node_modules/swiper/core/grab-cursor/index.js","../node_modules/swiper/core/grab-cursor/setGrabCursor.js","../node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","../node_modules/swiper/core/images/index.js","../node_modules/swiper/core/images/loadImage.js","../node_modules/swiper/core/images/preloadImages.js","../node_modules/swiper/core/modules/resize/resize.js","../node_modules/swiper/core/modules/observer/observer.js","../node_modules/swiper/modules/navigation/navigation.js","../node_modules/swiper/shared/create-element-if-not-defined.js"],"sourcesContent":["/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar NODE_ENV = process.env.NODE_ENV;\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","import { useContext, createContext } from 'react'\nimport invariant from 'invariant'\n\nconst MapContext = createContext(null)\n\nexport function useGoogleMap(): google.maps.Map | null {\n invariant(!!useContext, 'useGoogleMap is React hook and requires React version 16.8+')\n\n const map = useContext(MapContext)\n\n invariant(!!map, 'useGoogleMap needs a GoogleMap available up in the tree')\n\n return map\n}\n\nexport default MapContext\n","/* global google */\n/* eslint-disable filenames/match-regex */\nimport { reduce } from './reduce'\nimport { forEach } from './foreach'\n\nexport const applyUpdaterToNextProps = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n updaterMap: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevProps: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n nextProps: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n instance: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const map: any = {}\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const iter = (fn: any, key: string): void => {\n const nextValue = nextProps[key]\n\n if (nextValue !== prevProps[key]) {\n map[key] = nextValue\n fn(instance, nextValue)\n }\n }\n\n forEach(updaterMap, iter)\n\n return map\n}\n\nexport function registerEvents(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n props: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n instance: any,\n eventMap: Record\n): google.maps.MapsEventListener[] {\n const registeredList = reduce(\n eventMap,\n function reducer(\n acc: google.maps.MapsEventListener[],\n googleEventName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onEventName: any\n ): google.maps.MapsEventListener[] {\n if (typeof props[onEventName] === 'function') {\n acc.push(google.maps.event.addListener(instance, googleEventName, props[onEventName]))\n }\n\n return acc\n },\n []\n )\n\n return registeredList\n}\nfunction unregisterEvent(registered: google.maps.MapsEventListener): void {\n google.maps.event.removeListener(registered)\n}\n\nexport function unregisterEvents(events: google.maps.MapsEventListener[] = []): void {\n events.forEach(unregisterEvent)\n}\n\nexport function applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps,\n instance,\n}: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n updaterMap: any\n eventMap: Record\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevProps: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n nextProps: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n instance: any\n}): google.maps.MapsEventListener[] {\n const registeredEvents = registerEvents(nextProps, instance, eventMap)\n applyUpdaterToNextProps(updaterMap, prevProps, nextProps, instance)\n return registeredEvents\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function forEach(obj: any, fn: any): any {\n Object.keys(obj).forEach(function iterator(key) {\n return fn(obj[key], key)\n })\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const reduce = (obj: any, fn: any, acc: any): any => {\n return Object.keys(obj).reduce(function reducer(newAcc, key) {\n return fn(newAcc, obj[key], key)\n }, acc)\n}\n","import * as React from 'react'\n\nimport MapContext from './map-context'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from './utils/helper'\n\nconst eventMap = {\n onDblClick: 'dblclick',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMapTypeIdChanged: 'maptypeid_changed',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseDown: 'mousedown',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick',\n onTilesLoaded: 'tilesloaded',\n onBoundsChanged: 'bounds_changed',\n onCenterChanged: 'center_changed',\n onClick: 'click',\n onDrag: 'drag',\n onHeadingChanged: 'heading_changed',\n onIdle: 'idle',\n onProjectionChanged: 'projection_changed',\n onResize: 'resize',\n onTiltChanged: 'tilt_changed',\n onZoomChanged: 'zoom_changed',\n}\n\nconst updaterMap = {\n extraMapTypes(map: google.maps.Map, extra: google.maps.MapType[]): void {\n extra.forEach(function forEachExtra(it, i) {\n map.mapTypes.set(String(i), it)\n })\n },\n center(map: google.maps.Map, center: google.maps.LatLng | google.maps.LatLngLiteral): void {\n map.setCenter(center)\n },\n clickableIcons(map: google.maps.Map, clickable: boolean): void {\n map.setClickableIcons(clickable)\n },\n heading(map: google.maps.Map, heading: number): void {\n map.setHeading(heading)\n },\n mapTypeId(map: google.maps.Map, mapTypeId: string): void {\n map.setMapTypeId(mapTypeId)\n },\n options(map: google.maps.Map, options: google.maps.MapOptions): void {\n map.setOptions(options)\n },\n streetView(map: google.maps.Map, streetView: google.maps.StreetViewPanorama): void {\n map.setStreetView(streetView)\n },\n tilt(map: google.maps.Map, tilt: number): void {\n map.setTilt(tilt)\n },\n zoom(map: google.maps.Map, zoom: number): void {\n map.setZoom(zoom)\n },\n}\n\ninterface GoogleMapState {\n map: google.maps.Map | null\n}\n\nexport interface GoogleMapProps {\n children?: React.ReactNode\n id?: string\n mapContainerStyle?: React.CSSProperties\n mapContainerClassName?: string\n options?: google.maps.MapOptions\n /** Additional map types to overlay. Overlay map types will display on top of the base map they are attached to, in the order in which they appear in the overlayMapTypes array (overlays with higher index values are displayed in front of overlays with lower index values). */\n extraMapTypes?: google.maps.MapType[]\n /** The initial Map center. */\n center?: google.maps.LatLng | google.maps.LatLngLiteral\n /** When false, map icons are not clickable. A map icon represents a point of interest, also known as a POI. By default map icons are clickable. */\n clickableIcons?: boolean\n /** The heading for aerial imagery in degrees measured clockwise from cardinal direction North. Headings are snapped to the nearest available angle for which imagery is available. */\n heading?: number\n /** The initial Map mapTypeId. Defaults to ROADMAP. */\n mapTypeId?: string\n /** A StreetViewPanorama to display when the Street View pegman is dropped on the map. If no panorama is specified, a default StreetViewPanorama will be displayed in the map's div when the pegman is dropped. */\n streetView?: google.maps.StreetViewPanorama\n /** Controls the automatic switching behavior for the angle of incidence of the map. The only allowed values are 0 and 45. The value 0 causes the map to always use a 0° overhead view regardless of the zoom level and viewport. The value 45 causes the tilt angle to automatically switch to 45 whenever 45° imagery is available for the current zoom level and viewport, and switch back to 0 whenever 45° imagery is not available (this is the default behavior). 45° imagery is only available for satellite and hybrid map types, within some locations, and at some zoom levels. Note: getTilt returns the current tilt angle, not the value specified by this option. Because getTilt and this option refer to different things, do not bind() the tilt property; doing so may yield unpredictable effects. */\n tilt?: number\n /** The initial Map zoom level. Required. Valid values: Integers between zero, and up to the supported maximum zoom level. */\n zoom?: number\n /** This event is fired when the user clicks on the map. An ApiMouseEvent with properties for the clicked location is returned unless a place icon was clicked, in which case an IconMouseEvent with a placeId is returned. IconMouseEvent and ApiMouseEvent are identical, except that IconMouseEvent has the placeId field. The event can always be treated as an ApiMouseEvent when the placeId is not important. The click event is not fired if a Marker or InfoWindow was clicked. */\n onClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the user double-clicks on the map. Note that the click event will also fire, right before this one. */\n onDblClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is repeatedly fired while the user drags the map. */\n onDrag?: () => void\n /** This event is fired when the user stops dragging the map. */\n onDragEnd?: () => void\n /** This event is fired when the user starts dragging the map. */\n onDragStart?: () => void\n /** This event is fired when the mapTypeId property changes. */\n onMapTypeIdChanged?: () => void\n /** This event is fired whenever the user's mouse moves over the map container. */\n onMouseMove?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the user's mouse exits the map container. */\n onMouseOut?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the user's mouse enters the map container. */\n onMouseOver?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the DOM contextmenu event is fired on the map container. */\n onRightClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the visible tiles have finished loading. */\n onTilesLoaded?: () => void\n /** This event is fired when the viewport bounds have changed. */\n onBoundsChanged?: () => void\n /** This event is fired when the map center property changes. */\n onCenterChanged?: () => void\n /** This event is fired when the map heading property changes. */\n onHeadingChanged?: () => void\n /** This event is fired when the map becomes idle after panning or zooming. */\n onIdle?: () => void\n /** This event is fired when the projection has changed. */\n onProjectionChanged?: () => void\n /** This event is fired when the map size has changed. */\n onResize?: () => void\n /** This event is fired when the map tilt property changes. */\n onTiltChanged?: () => void\n /** This event is fired when the map zoom property changes. */\n onZoomChanged?: () => void\n /** This callback is called when the map instance has loaded. It is called with the map instance. */\n onLoad?: (map: google.maps.Map) => void | Promise\n /** This callback is called when the component unmounts. It is called with the map instance. */\n onUnmount?: (map: google.maps.Map) => void | Promise\n}\n\n// function GoogleMapFunctional({ children, options, id, mapContainerStyle, center, clickableIcons, extraMapTypes, heading, mapContainerClassName, mapTypeId, onBoundsChanged, onCenterChanged, onClick, onDblClick, onDrag, onDragEnd, onDragStart, onHeadingChanged, onIdle, onProjectionChanged, onResize, onTiltChanged, onLoad }: GoogleMapProps): JSX.Element {\n// const [map, setMap] = React.useState(null)\n// const ref = React.useRef(null)\n\n// const getInstance = React.useCallback(() => {\n// if (ref.current === null) {\n// return null\n// }\n\n// return new google.maps.Map(ref.current, options)\n// }, [options])\n\n// React.useEffect(() => {\n\n// }, [])\n\n// const panTo = React.useCallback((latLng: google.maps.LatLng | google.maps.LatLngLiteral): void => {\n// const map = getInstance()\n// if (map) {\n// map.panTo(latLng)\n// }\n// }, [])\n\n// React.useEffect(() => {\n// const map = getInstance()\n\n\n\n// }, [])\n\n// return (\n// \n// \n// {map !== null ? children : <>}\n// \n// \n// )\n// }\n\nexport class GoogleMap extends React.PureComponent {\n state: GoogleMapState = {\n map: null,\n }\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n mapRef: Element | null = null\n\n getInstance = (): google.maps.Map | null => {\n if (this.mapRef === null) {\n return null\n }\n\n return new google.maps.Map(this.mapRef, this.props.options)\n }\n\n panTo = (latLng: google.maps.LatLng | google.maps.LatLngLiteral): void => {\n const map = this.getInstance()\n if (map) {\n map.panTo(latLng)\n }\n }\n\n setMapCallback = (): void => {\n if (this.state.map !== null) {\n if (this.props.onLoad) {\n this.props.onLoad(this.state.map)\n }\n }\n }\n\n componentDidMount(): void {\n const map = this.getInstance()\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: map,\n })\n\n this.setState(function setMap() {\n return {\n map,\n }\n }, this.setMapCallback)\n }\n\n componentDidUpdate(prevProps: GoogleMapProps): void {\n if (this.state.map !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.map,\n })\n }\n }\n\n componentWillUnmount(): void {\n if (this.state.map !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.map)\n }\n\n unregisterEvents(this.registeredEvents)\n }\n }\n\n getRef = (ref: HTMLDivElement | null): void => {\n this.mapRef = ref\n }\n\n render(): React.ReactNode {\n return (\n \n \n {this.state.map !== null ? this.props.children : <>}\n \n \n )\n }\n}\n\nexport default GoogleMap\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 (_) 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 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\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","export const isBrowser: boolean = typeof document !== 'undefined'\n","import { isBrowser } from './isbrowser'\n\ninterface WindowWithGoogleMap extends Window {\n initMap?: () => void\n}\n\ninterface InjectScriptArg {\n url: string\n id: string\n nonce?: string\n}\n\nexport const injectScript = ({ url, id, nonce }: InjectScriptArg): Promise => {\n if (!isBrowser) {\n return Promise.reject(new Error('document is undefined'))\n }\n\n return new Promise(function injectScriptCallback(resolve, reject) {\n const existingScript = document.getElementById(id) as HTMLScriptElement | undefined\n const windowWithGoogleMap: WindowWithGoogleMap = window\n if (existingScript) {\n // Same script id/url: keep same script\n const dataStateAttribute = existingScript.getAttribute('data-state')\n if (existingScript.src === url && dataStateAttribute !== 'error') {\n if (dataStateAttribute === 'ready') {\n return resolve(id)\n } else {\n const originalInitMap = windowWithGoogleMap.initMap\n const originalErrorCallback = existingScript.onerror\n\n windowWithGoogleMap.initMap = function initMap(): void {\n if (originalInitMap) {\n originalInitMap()\n }\n resolve(id)\n }\n\n existingScript.onerror = function(err): void {\n if (originalErrorCallback) {\n originalErrorCallback(err)\n }\n reject(err)\n }\n\n return\n }\n }\n // Same script id, but either\n // 1. requested URL is different\n // 2. script failed to load\n else {\n existingScript.remove()\n }\n }\n\n const script = document.createElement('script')\n\n script.type = 'text/javascript'\n script.src = url\n script.id = id\n script.async = true\n script.nonce = nonce\n script.onerror = function onerror(err): void {\n script.setAttribute('data-state', 'error')\n reject(err)\n }\n\n windowWithGoogleMap.initMap = function onload(): void {\n script.setAttribute('data-state', 'ready')\n resolve(id)\n }\n\n document.head.appendChild(script)\n }).catch(err => {\n console.error('injectScript error: ', err)\n throw err\n })\n}\n","const isRobotoStyle = (element: HTMLElement): boolean => {\n // roboto font download\n if (\n (element as HTMLLinkElement).href &&\n (element as HTMLLinkElement).href.indexOf('https://fonts.googleapis.com/css?family=Roboto') ===\n 0\n ) {\n return true\n }\n // roboto style elements\n if (\n element.tagName.toLowerCase() === 'style' &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n element.styleSheet &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n element.styleSheet.cssText &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n element.styleSheet.cssText.replace('\\r\\n', '').indexOf('.gm-style') === 0\n ) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n element.styleSheet.cssText = ''\n return true\n }\n // roboto style elements for other browsers\n if (\n element.tagName.toLowerCase() === 'style' &&\n element.innerHTML &&\n element.innerHTML.replace('\\r\\n', '').indexOf('.gm-style') === 0\n ) {\n element.innerHTML = ''\n return true\n }\n // when google tries to add empty style\n if (\n element.tagName.toLowerCase() === 'style' &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n !element.styleSheet &&\n !element.innerHTML\n ) {\n return true\n }\n\n return false\n}\n\n// Preventing the Google Maps library from downloading an extra font\nexport const preventGoogleFonts = (): void => {\n // we override these methods only for one particular head element\n // default methods for other elements are not affected\n const head = document.getElementsByTagName('head')[0]\n\n const trueInsertBefore = head.insertBefore.bind(head)\n\n // TODO: adding return before reflect solves the TS issue\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n head.insertBefore = function insertBefore(\n newElement: HTMLElement,\n referenceElement: HTMLElement\n ): void {\n if (!isRobotoStyle(newElement)) {\n Reflect.apply(trueInsertBefore, head, [newElement, referenceElement])\n }\n }\n\n const trueAppend = head.appendChild.bind(head)\n\n // TODO: adding return before reflect solves the TS issue\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n head.appendChild = function appendChild(textNode: HTMLElement): void {\n if (!isRobotoStyle(textNode)) {\n Reflect.apply(trueAppend, head, [textNode])\n }\n }\n}\n","import invariant from 'invariant'\n\nexport type Libraries = (\"drawing\" | \"geometry\" | \"localContext\" | \"places\" | \"visualization\")[]\n\nexport interface LoadScriptUrlOptions {\n googleMapsApiKey: string | \"\"\n googleMapsClientId?: string\n version?: string\n language?: string\n region?: string\n libraries?: Libraries\n channel?: string\n mapIds?: string[]\n}\n\nexport function makeLoadScriptUrl({\n googleMapsApiKey,\n googleMapsClientId,\n version = 'weekly',\n language,\n region,\n libraries,\n channel,\n mapIds\n}: LoadScriptUrlOptions): string {\n const params = []\n\n invariant(\n (googleMapsApiKey && googleMapsClientId) || !(googleMapsApiKey && googleMapsClientId),\n 'You need to specify either googleMapsApiKey or googleMapsClientId for @react-google-maps/api load script to work. You cannot use both at the same time.'\n )\n\n if (googleMapsApiKey) {\n params.push(`key=${googleMapsApiKey}`)\n } else if (googleMapsClientId) {\n params.push(`client=${googleMapsClientId}`)\n }\n\n if (version) {\n params.push(`v=${version}`)\n }\n\n if (language) {\n params.push(`language=${language}`)\n }\n\n if (region) {\n params.push(`region=${region}`)\n }\n\n if (libraries && libraries.length) {\n params.push(`libraries=${libraries.sort().join(',')}`)\n }\n\n if (channel) {\n params.push(`channel=${channel}`)\n }\n\n if (mapIds && mapIds.length) {\n params.push(`map_ids=${mapIds.join(',')}`)\n }\n\n params.push('callback=initMap')\n\n return `https://maps.googleapis.com/maps/api/js?${params.join('&')}`\n}\n","import * as React from 'react'\nimport invariant from 'invariant'\n\nimport { injectScript } from './utils/injectscript'\nimport { preventGoogleFonts } from './utils/prevent-google-fonts'\n\nimport { isBrowser } from './utils/isbrowser'\nimport { LoadScriptUrlOptions, makeLoadScriptUrl } from './utils/make-load-script-url'\n\nlet cleaningUp = false\n\ninterface LoadScriptState {\n loaded: boolean\n}\n\nexport interface LoadScriptProps extends LoadScriptUrlOptions {\n id: string\n nonce?: string\n loadingElement?: React.ReactNode\n onLoad?: () => void\n onError?: (error: Error) => void\n onUnmount?: () => void\n preventGoogleFontsLoading?: boolean\n}\n\nexport function DefaultLoadingElement(): JSX.Element {\n return
{`Loading...`}
\n}\n\nexport const defaultLoadScriptProps = {\n id: 'script-loader',\n version: 'weekly',\n}\n\nclass LoadScript extends React.PureComponent {\n public static defaultProps = defaultLoadScriptProps\n\n check: React.RefObject = React.createRef()\n\n state = {\n loaded: false,\n }\n\n cleanupCallback = (): void => {\n // @ts-ignore\n delete window.google.maps\n\n this.injectScript()\n }\n\n componentDidMount(): void {\n if (isBrowser) {\n if (window.google && window.google.maps && !cleaningUp) {\n console.error('google api is already presented')\n\n return\n }\n\n this.isCleaningUp()\n .then(this.injectScript)\n .catch(function error(err) {\n console.error('Error at injecting script after cleaning up: ', err)\n })\n }\n }\n\n componentDidUpdate(prevProps: LoadScriptProps): void {\n if (this.props.libraries !== prevProps.libraries) {\n console.warn(\n 'Performance warning! LoadScript has been reloaded unintentionally! You should not pass `libraries` prop as new array. Please keep an array of libraries as static class property for Components and PureComponents, or just a const variable outside of component, or somewhere in config files or ENV variables'\n )\n }\n\n if (isBrowser && prevProps.language !== this.props.language) {\n this.cleanup()\n // TODO: refactor to use gDSFP maybe... wait for hooks refactoring.\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState(function setLoaded() {\n return {\n loaded: false,\n }\n }, this.cleanupCallback)\n }\n }\n\n componentWillUnmount(): void {\n if (isBrowser) {\n this.cleanup()\n\n const timeoutCallback = (): void => {\n if (!this.check.current) {\n // @ts-ignore\n delete window.google\n cleaningUp = false\n }\n }\n\n window.setTimeout(timeoutCallback, 1)\n\n if (this.props.onUnmount) {\n this.props.onUnmount()\n }\n }\n }\n\n isCleaningUp = async (): Promise => {\n function promiseCallback(resolve: () => void): void {\n if (!cleaningUp) {\n resolve()\n } else {\n if (isBrowser) {\n const timer = window.setInterval(function interval() {\n if (!cleaningUp) {\n window.clearInterval(timer)\n\n resolve()\n }\n }, 1)\n }\n }\n\n return\n }\n\n return new Promise(promiseCallback)\n }\n\n cleanup = (): void => {\n cleaningUp = true\n const script = document.getElementById(this.props.id)\n\n if (script && script.parentNode) {\n script.parentNode.removeChild(script)\n }\n\n Array.prototype.slice\n .call(document.getElementsByTagName('script'))\n .filter(function filter(script: HTMLScriptElement): boolean {\n return typeof script.src === 'string' && script.src.includes('maps.googleapis')\n })\n .forEach(function forEach(script: HTMLScriptElement): void {\n if (script.parentNode) {\n script.parentNode.removeChild(script)\n }\n })\n\n Array.prototype.slice\n .call(document.getElementsByTagName('link'))\n .filter(function filter(link: HTMLLinkElement): boolean {\n return (\n link.href === 'https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Google+Sans'\n )\n })\n .forEach(function forEach(link: HTMLLinkElement) {\n if (link.parentNode) {\n link.parentNode.removeChild(link)\n }\n })\n\n Array.prototype.slice\n .call(document.getElementsByTagName('style'))\n .filter(function filter(style: HTMLStyleElement): boolean {\n return (\n style.innerText !== undefined &&\n style.innerText.length > 0 &&\n style.innerText.includes('.gm-')\n )\n })\n .forEach(function forEach(style: HTMLStyleElement) {\n if (style.parentNode) {\n style.parentNode.removeChild(style)\n }\n })\n }\n\n injectScript = (): void => {\n if (this.props.preventGoogleFontsLoading) {\n preventGoogleFonts()\n }\n\n invariant(!!this.props.id, 'LoadScript requires \"id\" prop to be a string: %s', this.props.id)\n\n const injectScriptOptions = {\n id: this.props.id,\n nonce: this.props.nonce,\n url: makeLoadScriptUrl(this.props),\n }\n\n injectScript(injectScriptOptions)\n .then(() => {\n if (this.props.onLoad) {\n this.props.onLoad()\n }\n\n this.setState(function setLoaded() {\n return {\n loaded: true,\n }\n })\n\n return\n })\n .catch(err => {\n if (this.props.onError) {\n this.props.onError(err)\n }\n\n console.error(`\n There has been an Error with loading Google Maps API script, please check that you provided correct google API key (${this\n .props.googleMapsApiKey || '-'}) or Client ID (${this.props.googleMapsClientId ||\n '-'}) to \n Otherwise it is a Network issue.\n `)\n })\n }\n\n render(): React.ReactNode {\n return (\n <>\n
\n\n {this.state.loaded\n ? this.props.children\n : this.props.loadingElement || }\n \n )\n }\n}\n\nexport default LoadScript\n","/* eslint-disable filenames/match-regex */\nimport * as React from 'react'\nimport invariant from 'invariant'\n\nimport { isBrowser } from './utils/isbrowser'\nimport { injectScript } from './utils/injectscript'\nimport { preventGoogleFonts } from './utils/prevent-google-fonts'\nimport { makeLoadScriptUrl, LoadScriptUrlOptions } from './utils/make-load-script-url'\n\nimport { defaultLoadScriptProps } from './LoadScript'\n\nexport interface UseLoadScriptOptions extends LoadScriptUrlOptions {\n id?: string\n nonce?: string\n preventGoogleFontsLoading?: boolean\n}\n\nlet previouslyLoadedUrl: string\n\nexport function useLoadScript({\n id = defaultLoadScriptProps.id,\n version = defaultLoadScriptProps.version,\n nonce,\n googleMapsApiKey,\n googleMapsClientId,\n language,\n region,\n libraries,\n preventGoogleFontsLoading,\n channel,\n mapIds,\n}: UseLoadScriptOptions): {\n isLoaded: boolean\n loadError: Error | undefined\n url: string\n} {\n const isMounted = React.useRef(false)\n const [isLoaded, setLoaded] = React.useState(false)\n const [loadError, setLoadError] = React.useState(undefined)\n\n React.useEffect(function trackMountedState() {\n isMounted.current = true\n return (): void => {\n isMounted.current = false\n }\n }, [])\n\n React.useEffect(\n function applyPreventGoogleFonts() {\n if (isBrowser && preventGoogleFontsLoading) {\n preventGoogleFonts()\n }\n },\n [preventGoogleFontsLoading]\n )\n\n React.useEffect(\n function validateLoadedState() {\n if (isLoaded) {\n invariant(\n !!window.google,\n 'useLoadScript was marked as loaded, but window.google is not present. Something went wrong.'\n )\n }\n },\n [isLoaded]\n )\n\n const url = makeLoadScriptUrl({\n version,\n googleMapsApiKey,\n googleMapsClientId,\n language,\n region,\n libraries,\n channel,\n mapIds\n })\n\n React.useEffect(\n function loadScriptAndModifyLoadedState() {\n if (!isBrowser) {\n return\n }\n\n function setLoadedIfMounted(): void {\n if (isMounted.current) {\n setLoaded(true)\n previouslyLoadedUrl = url\n }\n }\n\n if (window.google && window.google.maps && previouslyLoadedUrl === url) {\n setLoadedIfMounted()\n return\n }\n\n injectScript({ id, url, nonce })\n .then(setLoadedIfMounted)\n .catch(function handleInjectError(err) {\n if (isMounted.current) {\n setLoadError(err)\n }\n console.warn(`\n There has been an Error with loading Google Maps API script, please check that you provided correct google API key (${googleMapsApiKey ||\n '-'}) or Client ID (${googleMapsClientId || '-'})\n Otherwise it is a Network issue.\n `)\n console.error(err)\n })\n },\n [id, url, nonce]\n )\n\n const prevLibraries = React.useRef()\n\n React.useEffect(\n function checkPerformance() {\n if (prevLibraries.current && libraries !== prevLibraries.current) {\n console.warn(\n 'Performance warning! LoadScript has been reloaded unintentionally! You should not pass `libraries` prop as new array. Please keep an array of libraries as static class property for Components and PureComponents, or just a const variable outside of component, or somewhere in config files or ENV variables'\n )\n }\n prevLibraries.current = libraries\n },\n [libraries]\n )\n\n return { isLoaded, loadError, url }\n}\n","import * as React from 'react'\n\nimport { DefaultLoadingElement } from './LoadScript'\nimport { useLoadScript, UseLoadScriptOptions } from './useLoadScript'\n\nexport interface LoadScriptNextProps extends UseLoadScriptOptions {\n loadingElement?: React.ReactElement\n onLoad?: () => void\n onError?: (error: Error) => void\n onUnmount?: () => void\n children: React.ReactElement\n}\n\nconst defaultLoadingElement = \n\nfunction LoadScriptNext({\n loadingElement,\n onLoad,\n onError,\n onUnmount,\n children,\n ...hookOptions\n}: LoadScriptNextProps): JSX.Element {\n const { isLoaded, loadError } = useLoadScript(hookOptions)\n\n React.useEffect(\n function handleOnLoad() {\n if (isLoaded && typeof onLoad === 'function') {\n onLoad()\n }\n },\n [isLoaded, onLoad]\n )\n\n React.useEffect(\n function handleOnError() {\n if (loadError && typeof onError === 'function') {\n onError(loadError)\n }\n },\n [loadError, onError]\n )\n\n React.useEffect(\n function handleOnUnmount() {\n return () => {\n if (onUnmount) {\n onUnmount()\n }\n }\n },\n [onUnmount]\n )\n\n return isLoaded ? children : loadingElement || defaultLoadingElement\n}\n\nexport default React.memo(LoadScriptNext)\n","import { PureComponent } from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\nimport MapContext from '../../map-context'\n\nconst eventMap = {}\n\nconst updaterMap = {\n options(instance: google.maps.TrafficLayer, options: google.maps.TrafficLayerOptions): void {\n instance.setOptions(options)\n },\n}\n\ninterface TrafficLayerState {\n trafficLayer: google.maps.TrafficLayer | null\n}\n\nexport interface TrafficLayerProps {\n options?: google.maps.TrafficLayerOptions\n /** This callback is called when the trafficLayer instance has loaded. It is called with the trafficLayer instance. */\n onLoad?: (trafficLayer: google.maps.TrafficLayer) => void\n /** This callback is called when the component unmounts. It is called with the trafficLayer instance. */\n onUnmount?: (trafficLayer: google.maps.TrafficLayer) => void\n}\n\nexport class TrafficLayer extends PureComponent {\n static contextType = MapContext\n\n state = {\n trafficLayer: null,\n }\n\n setTrafficLayerCallback = () => {\n if (this.state.trafficLayer !== null) {\n if (this.props.onLoad) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.props.onLoad(this.state.trafficLayer)\n }\n }\n }\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n componentDidMount(): void {\n const trafficLayer = new google.maps.TrafficLayer({\n ...(this.props.options || {}),\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: trafficLayer,\n })\n\n this.setState(function setTrafficLayer() {\n return {\n trafficLayer,\n }\n }, this.setTrafficLayerCallback)\n }\n\n componentDidUpdate(prevProps: TrafficLayerProps): void {\n if (this.state.trafficLayer !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.trafficLayer,\n })\n }\n }\n\n componentWillUnmount(): void {\n if (this.state.trafficLayer !== null) {\n if (this.props.onUnmount) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.props.onUnmount(this.state.trafficLayer)\n }\n\n unregisterEvents(this.registeredEvents)\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.state.trafficLayer.setMap(null)\n }\n }\n\n render() {\n return null\n }\n}\n\nexport default TrafficLayer\n","import * as React from 'react'\n\nimport MapContext from '../../map-context'\n\ninterface BicyclingLayerState {\n bicyclingLayer: google.maps.BicyclingLayer | null\n}\n\nexport interface BicyclingLayerProps {\n /** This callback is called when the bicyclingLayer instance has loaded. It is called with the bicyclingLayer instance. */\n onLoad?: (bicyclingLayer: google.maps.BicyclingLayer) => void\n /** This callback is called when the component unmounts. It is called with the bicyclingLayer instance. */\n onUnmount?: (bicyclingLayer: google.maps.BicyclingLayer) => void\n}\n\nexport class BicyclingLayer extends React.PureComponent {\n static contextType = MapContext\n\n state = {\n bicyclingLayer: null,\n }\n\n setBicyclingLayerCallback = (): void => {\n if (this.state.bicyclingLayer !== null) {\n // TODO: how is this possibly null if we're doing a null check\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.state.bicyclingLayer.setMap(this.context)\n\n if (this.props.onLoad) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.props.onLoad(this.state.bicyclingLayer)\n }\n }\n }\n\n componentDidMount(): void {\n const bicyclingLayer = new google.maps.BicyclingLayer()\n\n this.setState(function setBicyclingLayer() {\n return {\n bicyclingLayer,\n }\n }, this.setBicyclingLayerCallback)\n }\n\n componentWillUnmount(): void {\n if (this.state.bicyclingLayer !== null) {\n if (this.props.onUnmount) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.props.onUnmount(this.state.bicyclingLayer)\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.state.bicyclingLayer.setMap(null)\n }\n }\n\n render(): React.ReactNode {\n return null\n }\n}\n\nexport default BicyclingLayer\n","import * as React from 'react'\n\nimport MapContext from '../../map-context'\n\ninterface TransitLayerState {\n transitLayer: google.maps.TransitLayer | null\n}\n\nexport interface TransitLayerProps {\n /** This callback is called when the transitLayer instance has loaded. It is called with the transitLayer instance. */\n onLoad?: (transitLayer: google.maps.TransitLayer) => void\n /** This callback is called when the component unmounts. It is called with the transitLayer instance. */\n onUnmount?: (transitLayer: google.maps.TransitLayer) => void\n}\n\nexport class TransitLayer extends React.PureComponent {\n static contextType = MapContext\n\n state = {\n transitLayer: null,\n }\n\n setTransitLayerCallback = (): void => {\n if (this.state.transitLayer !== null) {\n // TODO: how is this possibly null if we're doing a null check\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.state.transitLayer.setMap(this.context)\n\n if (this.props.onLoad) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.props.onLoad(this.state.transitLayer)\n }\n }\n }\n\n componentDidMount(): void {\n const transitLayer = new google.maps.TransitLayer()\n\n this.setState(function setTransitLayer() {\n return {\n transitLayer,\n }\n }, this.setTransitLayerCallback)\n }\n\n componentWillUnmount(): void {\n if (this.state.transitLayer !== null) {\n if (this.props.onUnmount) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.props.onUnmount(this.state.transitLayer)\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.state.transitLayer.setMap(null)\n }\n }\n\n render(): React.ReactNode {\n return null\n }\n}\n\nexport default TransitLayer\n","/* globals google */\nimport * as React from 'react'\n\nimport invariant from 'invariant'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onCircleComplete: 'circlecomplete',\n onMarkerComplete: 'markercomplete',\n onOverlayComplete: 'overlaycomplete',\n onPolygonComplete: 'polygoncomplete',\n onPolylineComplete: 'polylinecomplete',\n onRectangleComplete: 'rectanglecomplete',\n}\n\nconst updaterMap = {\n drawingMode(\n instance: google.maps.drawing.DrawingManager,\n drawingMode: google.maps.drawing.OverlayType | null\n ): void {\n instance.setDrawingMode(drawingMode)\n },\n options(\n instance: google.maps.drawing.DrawingManager,\n options: google.maps.drawing.DrawingManagerOptions\n ): void {\n instance.setOptions(options)\n },\n}\n\ninterface DrawingManagerState {\n drawingManager: google.maps.drawing.DrawingManager | null\n}\n\nexport interface DrawingManagerProps {\n options?: google.maps.drawing.DrawingManagerOptions\n /** Changes the DrawingManager's drawing mode, which defines the type of overlay to be added on the map. Accepted values are 'marker', 'polygon', 'polyline', 'rectangle', 'circle', or null. A drawing mode of null means that the user can interact with the map as normal, and clicks do not draw anything. */\n drawingMode?: google.maps.drawing.OverlayType | null\n /** This event is fired when the user has finished drawing a circle. */\n onCircleComplete?: (circle: google.maps.Circle) => void\n /** This event is fired when the user has finished drawing a marker. */\n onMarkerComplete?: (marker: google.maps.Marker) => void\n /** This event is fired when the user has finished drawing an overlay of any type. */\n onOverlayComplete?: (e: google.maps.drawing.OverlayCompleteEvent) => void\n /** This event is fired when the user has finished drawing a polygon. */\n onPolygonComplete?: (polygon: google.maps.Polygon) => void\n /** This event is fired when the user has finished drawing a polyline. */\n onPolylineComplete?: (polyline: google.maps.Polyline) => void\n /** This event is fired when the user has finished drawing a rectangle. */\n onRectangleComplete?: (rectangle: google.maps.Rectangle) => void\n /** This callback is called when the drawingManager instance has loaded. It is called with the drawingManager instance. */\n onLoad?: (drawingManager: google.maps.drawing.DrawingManager) => void\n /** This callback is called when the component unmounts. It is called with the drawingManager instance. */\n onUnmount?: (drawingManager: google.maps.drawing.DrawingManager) => void\n}\n\nexport class DrawingManager extends React.PureComponent {\n static contextType = MapContext\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n state: DrawingManagerState = {\n drawingManager: null,\n }\n\n constructor(props: DrawingManagerProps) {\n super(props)\n\n invariant(\n !!google.maps.drawing,\n `Did you include prop libraries={['drawing']} in the URL? %s`,\n google.maps.drawing\n )\n }\n\n setDrawingManagerCallback = (): void => {\n if (this.state.drawingManager !== null && this.props.onLoad) {\n this.props.onLoad(this.state.drawingManager)\n }\n }\n\n componentDidMount(): void {\n const drawingManager = new google.maps.drawing.DrawingManager({\n ...(this.props.options || {}),\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: drawingManager,\n })\n\n this.setState(function setDrawingManager() {\n return {\n drawingManager,\n }\n }, this.setDrawingManagerCallback)\n }\n\n componentDidUpdate(prevProps: DrawingManagerProps): void {\n if (this.state.drawingManager !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.drawingManager,\n })\n }\n }\n\n componentWillUnmount(): void {\n if (this.state.drawingManager !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.drawingManager)\n }\n\n unregisterEvents(this.registeredEvents)\n\n this.state.drawingManager.setMap(null)\n }\n }\n\n render(): JSX.Element {\n return <>\n }\n}\n\nexport default DrawingManager\n","import * as React from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\nimport { HasMarkerAnchor } from '../../types'\n\nimport { Clusterer } from '@react-google-maps/marker-clusterer'\nimport { MarkerClusterer as GoogleClusterer} from '@googlemaps/markerclusterer'\nimport { ReactNode } from 'react'\n\nconst eventMap = {\n onAnimationChanged: 'animation_changed',\n onClick: 'click',\n onClickableChanged: 'clickable_changed',\n onCursorChanged: 'cursor_changed',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDraggableChanged: 'draggable_changed',\n onDragStart: 'dragstart',\n onFlatChanged: 'flat_changed',\n onIconChanged: 'icon_changed',\n onMouseDown: 'mousedown',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onPositionChanged: 'position_changed',\n onRightClick: 'rightclick',\n onShapeChanged: 'shape_changed',\n onTitleChanged: 'title_changed',\n onVisibleChanged: 'visible_changed',\n onZindexChanged: 'zindex_changed',\n}\n\nconst updaterMap = {\n animation(instance: google.maps.Marker, animation: google.maps.Animation): void {\n instance.setAnimation(animation)\n },\n clickable(instance: google.maps.Marker, clickable: boolean): void {\n instance.setClickable(clickable)\n },\n cursor(instance: google.maps.Marker, cursor: string): void {\n instance.setCursor(cursor)\n },\n draggable(instance: google.maps.Marker, draggable: boolean): void {\n instance.setDraggable(draggable)\n },\n icon(instance: google.maps.Marker, icon: string | google.maps.Icon | google.maps.Symbol): void {\n instance.setIcon(icon)\n },\n label(instance: google.maps.Marker, label: string | google.maps.MarkerLabel): void {\n instance.setLabel(label)\n },\n map(instance: google.maps.Marker, map: google.maps.Map): void {\n instance.setMap(map)\n },\n opacity(instance: google.maps.Marker, opacity: number): void {\n instance.setOpacity(opacity)\n },\n options(instance: google.maps.Marker, options: google.maps.MarkerOptions): void {\n instance.setOptions(options)\n },\n position(\n instance: google.maps.Marker,\n position: google.maps.LatLng | google.maps.LatLngLiteral\n ): void {\n instance.setPosition(position)\n },\n shape(instance: google.maps.Marker, shape: google.maps.MarkerShape): void {\n instance.setShape(shape)\n },\n title(instance: google.maps.Marker, title: string): void {\n instance.setTitle(title)\n },\n visible(instance: google.maps.Marker, visible: boolean): void {\n instance.setVisible(visible)\n },\n zIndex(instance: google.maps.Marker, zIndex: number): void {\n instance.setZIndex(zIndex)\n },\n}\n\nexport interface MarkerProps {\n options?: google.maps.MarkerOptions\n /** Start an animation. Any ongoing animation will be cancelled. Currently supported animations are: BOUNCE, DROP. Passing in null will cause any animation to stop. */\n animation?: google.maps.Animation\n /** If true, the marker receives mouse and touch events. Default value is true. */\n clickable?: boolean\n /** Mouse cursor to show on hover */\n cursor?: string\n /** If true, the marker can be dragged. Default value is false. */\n draggable?: boolean\n /** Icon for the foreground. If a string is provided, it is treated as though it were an Icon with the string as url. */\n icon?: string | google.maps.Icon | google.maps.Symbol\n /** Adds a label to the marker. The label can either be a string, or a MarkerLabel object. */\n label?: string | google.maps.MarkerLabel\n /** The marker's opacity between 0.0 and 1.0. */\n opacity?: number\n\n // required\n /** Marker position. */\n position: google.maps.LatLng | google.maps.LatLngLiteral\n /** Image map region definition used for drag/click. */\n shape?: google.maps.MarkerShape\n /** Rollover text */\n title?: string\n /** If true, the marker is visible */\n visible?: boolean\n /** All markers are displayed on the map in order of their zIndex, with higher values displaying in front of markers with lower values. By default, markers are displayed according to their vertical position on screen, with lower markers appearing in front of markers further up the screen. */\n zIndex?: number\n /** Render prop that handles clustering markers */\n clusterer?: Clusterer | GoogleClusterer\n /** Clusters are redrawn when a Marker is added unless noClustererRedraw? is set to true. */\n noClustererRedraw?: boolean\n /** This event is fired when the marker icon was clicked. */\n onClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the marker's clickable property changes. */\n onClickableChanged?: () => void\n /** This event is fired when the marker's cursor property changes. */\n onCursorChanged?: () => void\n /** This event is fired when the marker's animation property changes. */\n onAnimationChanged?: () => void\n /** This event is fired when the marker icon was double clicked. */\n onDblClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is repeatedly fired while the user drags the marker. */\n onDrag?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the user stops dragging the marker. */\n onDragEnd?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the marker's draggable property changes. */\n onDraggableChanged?: () => void\n /** This event is fired when the user starts dragging the marker. */\n onDragStart?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the marker's flat property changes. */\n onFlatChanged?: () => void\n /** This event is fired when the marker icon property changes. */\n onIconChanged?: () => void\n /** This event is fired for a mousedown on the marker. */\n onMouseDown?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the mouse leaves the area of the marker icon. */\n onMouseOut?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the mouse enters the area of the marker icon. */\n onMouseOver?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired for a mouseup on the marker. */\n onMouseUp?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the marker position property changes. */\n onPositionChanged?: () => void\n /** This event is fired for a rightclick on the marker. */\n onRightClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the marker's shape property changes. */\n onShapeChanged?: () => void\n /** This event is fired when the marker title property changes. */\n onTitleChanged?: () => void\n /** This event is fired when the marker's visible property changes. */\n onVisibleChanged?: () => void\n /** This event is fired when the marker's zIndex property changes. */\n onZindexChanged?: () => void\n /** This callback is called when the marker instance has loaded. It is called with the marker instance. */\n onLoad?: (marker: google.maps.Marker) => void\n /** This callback is called when the component unmounts. It is called with the marker instance. */\n onUnmount?: (marker: google.maps.Marker) => void\n}\n\nexport class Marker extends React.PureComponent {\n static contextType = MapContext\n\n registeredEvents: google.maps.MapsEventListener[] = []\n marker: google.maps.Marker | undefined\n\n componentDidMount(): void {\n const markerOptions = {\n ...(this.props.options || {}),\n ...(this.props.clusterer ? {} : { map: this.context }),\n position: this.props.position,\n }\n\n // Unfortunately we can't just do this in the contstructor, because the\n // `MapContext` might not be filled in yet.\n this.marker = new google.maps.Marker(markerOptions)\n\n if (this.props.clusterer) {\n this.props.clusterer.addMarker(this.marker, !!this.props.noClustererRedraw)\n } else {\n this.marker.setMap(this.context)\n }\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: this.marker,\n })\n\n if (this.props.onLoad) {\n this.props.onLoad(this.marker)\n }\n }\n\n componentDidUpdate(prevProps: MarkerProps): void {\n if (this.marker) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.marker,\n })\n }\n }\n\n componentWillUnmount(): void {\n if (this.marker) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.marker)\n }\n\n unregisterEvents(this.registeredEvents)\n\n if (this.props.clusterer) {\n this.props.clusterer.removeMarker(this.marker, !!this.props.noClustererRedraw)\n } else {\n this.marker && this.marker.setMap(null)\n }\n }\n }\n\n render(): React.ReactNode {\n let children: ReactNode | null = null\n if (this.props.children) {\n children = React.Children.map(this.props.children, child => {\n if (!React.isValidElement(child)) {\n return child\n }\n\n let elementChild: React.ReactElement = child\n return React.cloneElement(elementChild, { anchor: this.marker })\n })\n }\n return children || null\n }\n}\n\nexport default Marker\n","var ClusterIcon = /** @class */ (function () {\n function ClusterIcon(cluster, styles) {\n cluster.getClusterer().extend(ClusterIcon, google.maps.OverlayView);\n this.cluster = cluster;\n this.clusterClassName = this.cluster.getClusterer().getClusterClass();\n this.className = this.clusterClassName;\n this.styles = styles;\n this.center = undefined;\n this.div = null;\n this.sums = null;\n this.visible = false;\n this.boundsChangedListener = null;\n this.url = '';\n this.height = 0;\n this.width = 0;\n this.anchorText = [0, 0];\n this.anchorIcon = [0, 0];\n this.textColor = 'black';\n this.textSize = 11;\n this.textDecoration = 'none';\n this.fontWeight = 'bold';\n this.fontStyle = 'normal';\n this.fontFamily = 'Arial,sans-serif';\n this.backgroundPosition = '0 0';\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.setMap(cluster.getMap()); // Note: this causes onAdd to be called\n }\n ClusterIcon.prototype.onAdd = function () {\n var _this = this;\n var cMouseDownInCluster;\n var cDraggingMapByCluster;\n this.div = document.createElement('div');\n this.div.className = this.className;\n if (this.visible) {\n this.show();\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getPanes().overlayMouseTarget.appendChild(this.div);\n // Fix for Issue 157\n this.boundsChangedListener = google.maps.event.addListener(\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap(), 'boundschanged', function boundsChanged() {\n cDraggingMapByCluster = cMouseDownInCluster;\n });\n google.maps.event.addDomListener(this.div, 'mousedown', function onMouseDown() {\n cMouseDownInCluster = true;\n cDraggingMapByCluster = false;\n });\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n google.maps.event.addDomListener(this.div, 'click', \n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n function (event) {\n cMouseDownInCluster = false;\n if (!cDraggingMapByCluster) {\n var markerClusterer_1 = _this.cluster.getClusterer();\n /**\n * This event is fired when a cluster marker is clicked.\n * @name MarkerClusterer#click\n * @param {Cluster} c The cluster that was clicked.\n * @event\n */\n google.maps.event.trigger(markerClusterer_1, 'click', _this.cluster);\n google.maps.event.trigger(markerClusterer_1, 'clusterclick', _this.cluster); // deprecated name\n // The default click handler follows. Disable it by setting\n // the zoomOnClick property to false.\n if (markerClusterer_1.getZoomOnClick()) {\n // Zoom into the cluster.\n var maxZoom_1 = markerClusterer_1.getMaxZoom();\n var bounds_1 = _this.cluster.getBounds();\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n markerClusterer_1.getMap().fitBounds(bounds_1);\n // There is a fix for Issue 170 here:\n setTimeout(function timeout() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n markerClusterer_1.getMap().fitBounds(bounds_1);\n // Don't zoom beyond the max zoom level\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n if (maxZoom_1 !== null && markerClusterer_1.getMap().getZoom() > maxZoom_1) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n markerClusterer_1.getMap().setZoom(maxZoom_1 + 1);\n }\n }, 100);\n }\n // Prevent event propagation to the map:\n event.cancelBubble = true;\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n }\n });\n google.maps.event.addDomListener(this.div, 'mouseover', \n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n function () {\n /**\n * This event is fired when the mouse moves over a cluster marker.\n * @name MarkerClusterer#mouseover\n * @param {Cluster} c The cluster that the mouse moved over.\n * @event\n */\n google.maps.event.trigger(_this.cluster.getClusterer(), 'mouseover', _this.cluster);\n });\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n google.maps.event.addDomListener(this.div, 'mouseout', \n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n function () {\n /**\n * This event is fired when the mouse moves out of a cluster marker.\n * @name MarkerClusterer#mouseout\n * @param {Cluster} c The cluster that the mouse moved out of.\n * @event\n */\n google.maps.event.trigger(_this.cluster.getClusterer(), 'mouseout', _this.cluster);\n });\n };\n ClusterIcon.prototype.onRemove = function () {\n if (this.div && this.div.parentNode) {\n this.hide();\n if (this.boundsChangedListener !== null) {\n google.maps.event.removeListener(this.boundsChangedListener);\n }\n google.maps.event.clearInstanceListeners(this.div);\n this.div.parentNode.removeChild(this.div);\n this.div = null;\n }\n };\n ClusterIcon.prototype.draw = function () {\n if (this.visible && this.div !== null && this.center) {\n var _a = this.getPosFromLatLng(this.center), x = _a.x, y = _a.y;\n this.div.style.top = y + 'px';\n this.div.style.left = x + 'px';\n }\n };\n ClusterIcon.prototype.hide = function () {\n if (this.div) {\n this.div.style.display = 'none';\n }\n this.visible = false;\n };\n ClusterIcon.prototype.show = function () {\n if (this.div && this.center) {\n var img = '', divTitle = '';\n // NOTE: values must be specified in px units\n var bp = this.backgroundPosition.split(' ');\n var spriteH = parseInt(bp[0].replace(/^\\s+|\\s+$/g, ''), 10);\n var spriteV = parseInt(bp[1].replace(/^\\s+|\\s+$/g, ''), 10);\n var pos = this.getPosFromLatLng(this.center);\n if (this.sums === null || typeof this.sums.title === 'undefined' || this.sums.title === '') {\n divTitle = this.cluster.getClusterer().getTitle();\n }\n else {\n divTitle = this.sums.title;\n }\n this.div.style.cssText = this.createCss(pos);\n img =\n \"\" +\n                    divTitle +\n                    \"\";\n this.div.innerHTML =\n img +\n \"
\" +\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.sums.text +\n '
';\n this.div.title = divTitle;\n this.div.style.display = '';\n }\n this.visible = true;\n };\n ClusterIcon.prototype.useStyle = function (sums) {\n this.sums = sums;\n var styles = this.cluster.getClusterer().getStyles();\n var style = styles[Math.min(styles.length - 1, Math.max(0, sums.index - 1))];\n this.url = style.url;\n this.height = style.height;\n this.width = style.width;\n if (style.className)\n this.className = this.clusterClassName + \" \" + style.className;\n this.anchorText = style.anchorText || [0, 0];\n this.anchorIcon = style.anchorIcon || [this.height / 2, this.width / 2];\n this.textColor = style.textColor || 'black';\n this.textSize = style.textSize || 11;\n this.textDecoration = style.textDecoration || 'none';\n this.fontWeight = style.fontWeight || 'bold';\n this.fontStyle = style.fontStyle || 'normal';\n this.fontFamily = style.fontFamily || 'Arial,sans-serif';\n this.backgroundPosition = style.backgroundPosition || '0 0';\n };\n ClusterIcon.prototype.setCenter = function (center) {\n this.center = center;\n };\n ClusterIcon.prototype.createCss = function (pos) {\n var style = [];\n style.push('cursor: pointer;');\n style.push('position: absolute; top: ' + pos.y + 'px; left: ' + pos.x + 'px;');\n style.push('width: ' + this.width + 'px; height: ' + this.height + 'px;');\n return style.join('');\n };\n ClusterIcon.prototype.getPosFromLatLng = function (latlng) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n var pos = this.getProjection().fromLatLngToDivPixel(latlng);\n pos.x -= this.anchorIcon[1];\n pos.y -= this.anchorIcon[0];\n // pos.x = pos.x\n // pos.y = pos.y\n return pos;\n };\n return ClusterIcon;\n}());\n\nvar Cluster = /** @class */ (function () {\n function Cluster(markerClusterer) {\n this.markerClusterer = markerClusterer;\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.map = this.markerClusterer.getMap();\n this.gridSize = this.markerClusterer.getGridSize();\n this.minClusterSize = this.markerClusterer.getMinimumClusterSize();\n this.averageCenter = this.markerClusterer.getAverageCenter();\n this.markers = [];\n this.center = undefined;\n this.bounds = null;\n this.clusterIcon = new ClusterIcon(this, this.markerClusterer.getStyles());\n }\n Cluster.prototype.getSize = function () {\n return this.markers.length;\n };\n Cluster.prototype.getMarkers = function () {\n return this.markers;\n };\n Cluster.prototype.getCenter = function () {\n return this.center;\n };\n Cluster.prototype.getMap = function () {\n return this.map;\n };\n Cluster.prototype.getClusterer = function () {\n return this.markerClusterer;\n };\n Cluster.prototype.getBounds = function () {\n var bounds = new google.maps.LatLngBounds(this.center, this.center);\n var markers = this.getMarkers();\n for (var i = 0; i < markers.length; i++) {\n var position = markers[i].getPosition();\n if (position) {\n bounds.extend(position);\n }\n }\n return bounds;\n };\n Cluster.prototype.remove = function () {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.clusterIcon.setMap(null);\n this.markers = [];\n // @ts-ignore\n delete this.markers;\n };\n Cluster.prototype.addMarker = function (marker) {\n if (this.isMarkerAlreadyAdded(marker)) {\n return false;\n }\n if (!this.center) {\n var position = marker.getPosition();\n if (position) {\n this.center = position;\n this.calculateBounds();\n }\n }\n else {\n if (this.averageCenter) {\n var position = marker.getPosition();\n if (position) {\n var length_1 = this.markers.length + 1;\n this.center = new google.maps.LatLng((this.center.lat() * (length_1 - 1) + position.lat()) / length_1, (this.center.lng() * (length_1 - 1) + position.lng()) / length_1);\n this.calculateBounds();\n }\n }\n }\n marker.isAdded = true;\n this.markers.push(marker);\n var mCount = this.markers.length;\n var maxZoom = this.markerClusterer.getMaxZoom();\n var zoom = this.map.getZoom();\n if (maxZoom !== null && typeof zoom !== 'undefined' && zoom > maxZoom) {\n // Zoomed in past max zoom, so show the marker.\n if (marker.getMap() !== this.map) {\n marker.setMap(this.map);\n }\n }\n else if (mCount < this.minClusterSize) {\n // Min cluster size not reached so show the marker.\n if (marker.getMap() !== this.map) {\n marker.setMap(this.map);\n }\n }\n else if (mCount === this.minClusterSize) {\n // Hide the markers that were showing.\n for (var i = 0; i < mCount; i++) {\n this.markers[i].setMap(null);\n }\n }\n else {\n marker.setMap(null);\n }\n return true;\n };\n Cluster.prototype.isMarkerInClusterBounds = function (marker) {\n if (this.bounds !== null) {\n var position = marker.getPosition();\n if (position) {\n return this.bounds.contains(position);\n }\n }\n return false;\n };\n Cluster.prototype.calculateBounds = function () {\n this.bounds = this.markerClusterer.getExtendedBounds(new google.maps.LatLngBounds(this.center, this.center));\n };\n Cluster.prototype.updateIcon = function () {\n var mCount = this.markers.length;\n var maxZoom = this.markerClusterer.getMaxZoom();\n var zoom = this.map.getZoom();\n if (maxZoom !== null && typeof zoom !== 'undefined' && zoom > maxZoom) {\n this.clusterIcon.hide();\n return;\n }\n if (mCount < this.minClusterSize) {\n // Min cluster size not yet reached.\n this.clusterIcon.hide();\n return;\n }\n if (this.center) {\n this.clusterIcon.setCenter(this.center);\n }\n this.clusterIcon.useStyle(this.markerClusterer.getCalculator()(this.markers, this.markerClusterer.getStyles().length));\n this.clusterIcon.show();\n };\n Cluster.prototype.isMarkerAlreadyAdded = function (marker) {\n if (this.markers.includes) {\n return this.markers.includes(marker);\n }\n else {\n for (var i = 0; i < this.markers.length; i++) {\n if (marker === this.markers[i]) {\n return true;\n }\n }\n }\n return false;\n };\n return Cluster;\n}());\n\n/* global google */\n/**\n * Supports up to 9007199254740991 (Number.MAX_SAFE_INTEGER) markers\n * which is not a problem as max array length is 4294967296 (2**32)\n */\nvar CALCULATOR = function CALCULATOR(markers, numStyles) {\n var count = markers.length;\n var numberOfDigits = count.toString().length;\n var index = Math.min(numberOfDigits, numStyles);\n return {\n text: count.toString(),\n index: index,\n title: '',\n };\n};\nvar BATCH_SIZE = 2000;\nvar BATCH_SIZE_IE = 500;\nvar IMAGE_PATH = 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m';\nvar IMAGE_EXTENSION = 'png';\nvar IMAGE_SIZES = [53, 56, 66, 78, 90];\nvar CLUSTERER_CLASS = 'cluster';\nvar Clusterer = /** @class */ (function () {\n function Clusterer(map, optMarkers, optOptions) {\n if (optMarkers === void 0) { optMarkers = []; }\n if (optOptions === void 0) { optOptions = {}; }\n this.extend(Clusterer, google.maps.OverlayView);\n this.markers = [];\n this.clusters = [];\n this.listeners = [];\n this.activeMap = null;\n this.ready = false;\n this.gridSize = optOptions.gridSize || 60;\n this.minClusterSize = optOptions.minimumClusterSize || 2;\n this.maxZoom = optOptions.maxZoom || null;\n this.styles = optOptions.styles || [];\n this.title = optOptions.title || '';\n this.zoomOnClick = true;\n if (optOptions.zoomOnClick !== undefined) {\n this.zoomOnClick = optOptions.zoomOnClick;\n }\n this.averageCenter = false;\n if (optOptions.averageCenter !== undefined) {\n this.averageCenter = optOptions.averageCenter;\n }\n this.ignoreHidden = false;\n if (optOptions.ignoreHidden !== undefined) {\n this.ignoreHidden = optOptions.ignoreHidden;\n }\n this.enableRetinaIcons = false;\n if (optOptions.enableRetinaIcons !== undefined) {\n this.enableRetinaIcons = optOptions.enableRetinaIcons;\n }\n this.imagePath = optOptions.imagePath || IMAGE_PATH;\n this.imageExtension = optOptions.imageExtension || IMAGE_EXTENSION;\n this.imageSizes = optOptions.imageSizes || IMAGE_SIZES;\n this.calculator = optOptions.calculator || CALCULATOR;\n this.batchSize = optOptions.batchSize || BATCH_SIZE;\n this.batchSizeIE = optOptions.batchSizeIE || BATCH_SIZE_IE;\n this.clusterClass = optOptions.clusterClass || CLUSTERER_CLASS;\n if (navigator.userAgent.toLowerCase().indexOf('msie') !== -1) {\n // Try to avoid IE timeout when processing a huge number of markers:\n this.batchSize = this.batchSizeIE;\n }\n this.timerRefStatic = null;\n this.setupStyles();\n this.addMarkers(optMarkers, true);\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.setMap(map); // Note: this causes onAdd to be called\n }\n Clusterer.prototype.onAdd = function () {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.activeMap = this.getMap();\n this.ready = true;\n this.repaint();\n // Add the map event listeners\n this.listeners = [\n google.maps.event.addListener(\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap(), 'zoom_changed', \n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n function () {\n _this.resetViewport(false);\n // Workaround for this Google bug: when map is at level 0 and \"-\" of\n // zoom slider is clicked, a \"zoom_changed\" event is fired even though\n // the map doesn't zoom out any further. In this situation, no \"idle\"\n // event is triggered so the cluster markers that have been removed\n // do not get redrawn. Same goes for a zoom in at maxZoom.\n if (\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n _this.getMap().getZoom() === (_this.get('minZoom') || 0) ||\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n _this.getMap().getZoom() === _this.get('maxZoom')) {\n google.maps.event.trigger(_this, 'idle');\n }\n }),\n google.maps.event.addListener(\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap(), 'idle', \n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n function () {\n _this.redraw();\n }),\n ];\n };\n // eslint-disable-next-line @getify/proper-arrows/this\n Clusterer.prototype.onRemove = function () {\n // Put all the managed markers back on the map:\n for (var i = 0; i < this.markers.length; i++) {\n if (this.markers[i].getMap() !== this.activeMap) {\n this.markers[i].setMap(this.activeMap);\n }\n }\n // Remove all clusters:\n for (var i = 0; i < this.clusters.length; i++) {\n this.clusters[i].remove();\n }\n this.clusters = [];\n // Remove map event listeners:\n for (var i = 0; i < this.listeners.length; i++) {\n google.maps.event.removeListener(this.listeners[i]);\n }\n this.listeners = [];\n this.activeMap = null;\n this.ready = false;\n };\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n Clusterer.prototype.draw = function () { };\n Clusterer.prototype.setupStyles = function () {\n if (this.styles.length > 0) {\n return;\n }\n for (var i = 0; i < this.imageSizes.length; i++) {\n this.styles.push({\n url: this.imagePath + (i + 1) + '.' + this.imageExtension,\n height: this.imageSizes[i],\n width: this.imageSizes[i],\n });\n }\n };\n Clusterer.prototype.fitMapToMarkers = function () {\n var markers = this.getMarkers();\n var bounds = new google.maps.LatLngBounds();\n for (var i = 0; i < markers.length; i++) {\n var position = markers[i].getPosition();\n if (position) {\n bounds.extend(position);\n }\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap().fitBounds(bounds);\n };\n Clusterer.prototype.getGridSize = function () {\n return this.gridSize;\n };\n Clusterer.prototype.setGridSize = function (gridSize) {\n this.gridSize = gridSize;\n };\n Clusterer.prototype.getMinimumClusterSize = function () {\n return this.minClusterSize;\n };\n Clusterer.prototype.setMinimumClusterSize = function (minimumClusterSize) {\n this.minClusterSize = minimumClusterSize;\n };\n Clusterer.prototype.getMaxZoom = function () {\n return this.maxZoom;\n };\n Clusterer.prototype.setMaxZoom = function (maxZoom) {\n this.maxZoom = maxZoom;\n };\n Clusterer.prototype.getStyles = function () {\n return this.styles;\n };\n Clusterer.prototype.setStyles = function (styles) {\n this.styles = styles;\n };\n Clusterer.prototype.getTitle = function () {\n return this.title;\n };\n Clusterer.prototype.setTitle = function (title) {\n this.title = title;\n };\n Clusterer.prototype.getZoomOnClick = function () {\n return this.zoomOnClick;\n };\n Clusterer.prototype.setZoomOnClick = function (zoomOnClick) {\n this.zoomOnClick = zoomOnClick;\n };\n Clusterer.prototype.getAverageCenter = function () {\n return this.averageCenter;\n };\n Clusterer.prototype.setAverageCenter = function (averageCenter) {\n this.averageCenter = averageCenter;\n };\n Clusterer.prototype.getIgnoreHidden = function () {\n return this.ignoreHidden;\n };\n Clusterer.prototype.setIgnoreHidden = function (ignoreHidden) {\n this.ignoreHidden = ignoreHidden;\n };\n Clusterer.prototype.getEnableRetinaIcons = function () {\n return this.enableRetinaIcons;\n };\n Clusterer.prototype.setEnableRetinaIcons = function (enableRetinaIcons) {\n this.enableRetinaIcons = enableRetinaIcons;\n };\n Clusterer.prototype.getImageExtension = function () {\n return this.imageExtension;\n };\n Clusterer.prototype.setImageExtension = function (imageExtension) {\n this.imageExtension = imageExtension;\n };\n Clusterer.prototype.getImagePath = function () {\n return this.imagePath;\n };\n Clusterer.prototype.setImagePath = function (imagePath) {\n this.imagePath = imagePath;\n };\n Clusterer.prototype.getImageSizes = function () {\n return this.imageSizes;\n };\n Clusterer.prototype.setImageSizes = function (imageSizes) {\n this.imageSizes = imageSizes;\n };\n Clusterer.prototype.getCalculator = function () {\n return this.calculator;\n };\n Clusterer.prototype.setCalculator = function (calculator) {\n this.calculator = calculator;\n };\n Clusterer.prototype.getBatchSizeIE = function () {\n return this.batchSizeIE;\n };\n Clusterer.prototype.setBatchSizeIE = function (batchSizeIE) {\n this.batchSizeIE = batchSizeIE;\n };\n Clusterer.prototype.getClusterClass = function () {\n return this.clusterClass;\n };\n Clusterer.prototype.setClusterClass = function (clusterClass) {\n this.clusterClass = clusterClass;\n };\n Clusterer.prototype.getMarkers = function () {\n return this.markers;\n };\n Clusterer.prototype.getTotalMarkers = function () {\n return this.markers.length;\n };\n Clusterer.prototype.getClusters = function () {\n return this.clusters;\n };\n Clusterer.prototype.getTotalClusters = function () {\n return this.clusters.length;\n };\n Clusterer.prototype.addMarker = function (marker, optNoDraw) {\n this.pushMarkerTo(marker);\n if (!optNoDraw) {\n this.redraw();\n }\n };\n Clusterer.prototype.addMarkers = function (markers, optNoDraw) {\n for (var key in markers) {\n if (markers.hasOwnProperty(key)) {\n this.pushMarkerTo(markers[key]);\n }\n }\n if (!optNoDraw) {\n this.redraw();\n }\n };\n Clusterer.prototype.pushMarkerTo = function (marker) {\n var _this = this;\n // If the marker is draggable add a listener so we can update the clusters on the dragend:\n if (marker.getDraggable()) {\n // eslint-disable-next-line @getify/proper-arrows/name, @getify/proper-arrows/this\n google.maps.event.addListener(marker, 'dragend', function () {\n if (_this.ready) {\n marker.isAdded = false;\n _this.repaint();\n }\n });\n }\n marker.isAdded = false;\n this.markers.push(marker);\n };\n Clusterer.prototype.removeMarker_ = function (marker) {\n var index = -1;\n if (this.markers.indexOf) {\n index = this.markers.indexOf(marker);\n }\n else {\n for (var i = 0; i < this.markers.length; i++) {\n if (marker === this.markers[i]) {\n index = i;\n break;\n }\n }\n }\n if (index === -1) {\n // Marker is not in our list of markers, so do nothing:\n return false;\n }\n marker.setMap(null);\n this.markers.splice(index, 1); // Remove the marker from the list of managed markers\n return true;\n };\n Clusterer.prototype.removeMarker = function (marker, optNoDraw) {\n var removed = this.removeMarker_(marker);\n if (!optNoDraw && removed) {\n this.repaint();\n }\n return removed;\n };\n Clusterer.prototype.removeMarkers = function (markers, optNoDraw) {\n var removed = false;\n for (var i = 0; i < markers.length; i++) {\n removed = removed || this.removeMarker_(markers[i]);\n }\n if (!optNoDraw && removed) {\n this.repaint();\n }\n return removed;\n };\n Clusterer.prototype.clearMarkers = function () {\n this.resetViewport(true);\n this.markers = [];\n };\n Clusterer.prototype.repaint = function () {\n var oldClusters = this.clusters.slice();\n this.clusters = [];\n this.resetViewport(false);\n this.redraw();\n // Remove the old clusters.\n // Do it in a timeout to prevent blinking effect.\n setTimeout(function timeout() {\n for (var i = 0; i < oldClusters.length; i++) {\n oldClusters[i].remove();\n }\n }, 0);\n };\n Clusterer.prototype.getExtendedBounds = function (bounds) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n var projection = this.getProjection();\n // Convert the points to pixels and the extend out by the grid size.\n var trPix = projection.fromLatLngToDivPixel(\n // Turn the bounds into latlng.\n new google.maps.LatLng(bounds.getNorthEast().lat(), bounds.getNorthEast().lng()));\n trPix.x += this.gridSize;\n trPix.y -= this.gridSize;\n var blPix = projection.fromLatLngToDivPixel(\n // Turn the bounds into latlng.\n new google.maps.LatLng(bounds.getSouthWest().lat(), bounds.getSouthWest().lng()));\n blPix.x -= this.gridSize;\n blPix.y += this.gridSize;\n // Extend the bounds to contain the new bounds.\n bounds.extend(\n // Convert the pixel points back to LatLng nw\n projection.fromDivPixelToLatLng(trPix));\n bounds.extend(\n // Convert the pixel points back to LatLng sw\n projection.fromDivPixelToLatLng(blPix));\n return bounds;\n };\n Clusterer.prototype.redraw = function () {\n // Redraws all the clusters.\n this.createClusters(0);\n };\n Clusterer.prototype.resetViewport = function (optHide) {\n // Remove all the clusters\n for (var i = 0; i < this.clusters.length; i++) {\n this.clusters[i].remove();\n }\n this.clusters = [];\n // Reset the markers to not be added and to be removed from the map.\n for (var i = 0; i < this.markers.length; i++) {\n var marker = this.markers[i];\n marker.isAdded = false;\n if (optHide) {\n marker.setMap(null);\n }\n }\n };\n Clusterer.prototype.distanceBetweenPoints = function (p1, p2) {\n var R = 6371; // Radius of the Earth in km\n var dLat = ((p2.lat() - p1.lat()) * Math.PI) / 180;\n var dLon = ((p2.lng() - p1.lng()) * Math.PI) / 180;\n var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos((p1.lat() * Math.PI) / 180) *\n Math.cos((p2.lat() * Math.PI) / 180) *\n Math.sin(dLon / 2) *\n Math.sin(dLon / 2);\n return R * (2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)));\n };\n Clusterer.prototype.isMarkerInBounds = function (marker, bounds) {\n var position = marker.getPosition();\n if (position) {\n return bounds.contains(position);\n }\n return false;\n };\n Clusterer.prototype.addToClosestCluster = function (marker) {\n var cluster;\n var distance = 40000; // Some large number\n var clusterToAddTo = null;\n for (var i = 0; i < this.clusters.length; i++) {\n cluster = this.clusters[i];\n var center = cluster.getCenter();\n var position = marker.getPosition();\n if (center && position) {\n var d = this.distanceBetweenPoints(center, position);\n if (d < distance) {\n distance = d;\n clusterToAddTo = cluster;\n }\n }\n }\n if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) {\n clusterToAddTo.addMarker(marker);\n }\n else {\n cluster = new Cluster(this);\n cluster.addMarker(marker);\n this.clusters.push(cluster);\n }\n };\n Clusterer.prototype.createClusters = function (iFirst) {\n var _this = this;\n if (!this.ready) {\n return;\n }\n // Cancel previous batch processing if we're working on the first batch:\n if (iFirst === 0) {\n /**\n * This event is fired when the Clusterer begins\n * clustering markers.\n * @name Clusterer#clusteringbegin\n * @param {Clusterer} mc The Clusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, 'clusteringbegin', this);\n if (this.timerRefStatic !== null) {\n window.clearTimeout(this.timerRefStatic);\n // @ts-ignore\n delete this.timerRefStatic;\n }\n }\n // Get our current map view bounds.\n // Create a new bounds object so we don't affect the map.\n //\n // See Comments 9 & 11 on Issue 3651 relating to this workaround for a Google Maps bug:\n var mapBounds = \n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap().getZoom() > 3\n ? new google.maps.LatLngBounds(\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap()\n .getBounds()\n .getSouthWest(), \n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap()\n .getBounds()\n .getNorthEast())\n : new google.maps.LatLngBounds(new google.maps.LatLng(85.02070771743472, -178.48388434375), new google.maps.LatLng(-85.08136444384544, 178.00048865625));\n var bounds = this.getExtendedBounds(mapBounds);\n var iLast = Math.min(iFirst + this.batchSize, this.markers.length);\n for (var i = iFirst; i < iLast; i++) {\n var marker = this.markers[i];\n if (!marker.isAdded && this.isMarkerInBounds(marker, bounds)) {\n if (!this.ignoreHidden || (this.ignoreHidden && marker.getVisible())) {\n this.addToClosestCluster(marker);\n }\n }\n }\n if (iLast < this.markers.length) {\n this.timerRefStatic = window.setTimeout(\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n function () {\n _this.createClusters(iLast);\n }, 0);\n }\n else {\n this.timerRefStatic = null;\n /**\n * This event is fired when the Clusterer stops\n * clustering markers.\n * @name Clusterer#clusteringend\n * @param {Clusterer} mc The Clusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, 'clusteringend', this);\n for (var i = 0; i < this.clusters.length; i++) {\n this.clusters[i].updateIcon();\n }\n }\n };\n Clusterer.prototype.extend = function (obj1, obj2) {\n return function applyExtend(object) {\n // eslint-disable-next-line guard-for-in\n for (var property in object.prototype) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.prototype[property] = object.prototype[property];\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n return this;\n }.apply(obj1, [obj2]);\n };\n return Clusterer;\n}());\n\nexport { Cluster, ClusterIcon, Clusterer };\n//# sourceMappingURL=esm.js.map\n","/* eslint-disable filenames/match-exported */\nimport * as React from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nimport {\n Clusterer,\n ClusterIconStyle,\n Cluster,\n ClustererOptions,\n TCalculator,\n} from '@react-google-maps/marker-clusterer'\n\nconst eventMap = {\n onClick: 'click',\n onClusteringBegin: 'clusteringbegin',\n onClusteringEnd: 'clusteringend',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n}\n\nconst updaterMap = {\n averageCenter(instance: Clusterer, averageCenter: boolean): void {\n instance.setAverageCenter(averageCenter)\n },\n\n batchSizeIE(instance: Clusterer, batchSizeIE: number): void {\n instance.setBatchSizeIE(batchSizeIE)\n },\n\n calculator(instance: Clusterer, calculator: any): void {\n instance.setCalculator(calculator)\n },\n\n clusterClass(instance: Clusterer, clusterClass: string): void {\n instance.setClusterClass(clusterClass)\n },\n\n enableRetinaIcons(instance: Clusterer, enableRetinaIcons: boolean): void {\n instance.setEnableRetinaIcons(enableRetinaIcons)\n },\n\n gridSize(instance: Clusterer, gridSize: number): void {\n instance.setGridSize(gridSize)\n },\n\n ignoreHidden(instance: Clusterer, ignoreHidden: boolean): void {\n instance.setIgnoreHidden(ignoreHidden)\n },\n\n imageExtension(instance: Clusterer, imageExtension: string): void {\n instance.setImageExtension(imageExtension)\n },\n\n imagePath(instance: Clusterer, imagePath: string): void {\n instance.setImagePath(imagePath)\n },\n\n imageSizes(instance: Clusterer, imageSizes: number[]): void {\n instance.setImageSizes(imageSizes)\n },\n\n maxZoom(instance: Clusterer, maxZoom: number): void {\n instance.setMaxZoom(maxZoom)\n },\n\n minimumClusterSize(instance: Clusterer, minimumClusterSize: number): void {\n instance.setMinimumClusterSize(minimumClusterSize)\n },\n\n styles(instance: Clusterer, styles: ClusterIconStyle[]): void {\n instance.setStyles(styles)\n },\n\n title(instance: Clusterer, title: string): void {\n instance.setTitle(title)\n },\n\n zoomOnClick(instance: Clusterer, zoomOnClick: boolean): void {\n instance.setZoomOnClick(zoomOnClick)\n },\n}\n\ninterface ClustererState {\n markerClusterer: Clusterer | null\n}\n\nexport interface ClustererProps {\n // required\n children: (markerClusterer: Clusterer) => React.ReactNode\n\n options?: ClustererOptions // TODO: it could be undefined\n /** Whether the position of a cluster marker should be the average position of all markers in the cluster. If set to false, the cluster marker is positioned at the location of the first marker added to the cluster. The default value is false. */\n averageCenter?: boolean\n /** When Internet Explorer is being used, markers are processed in several batches with a small delay inserted between each batch in an attempt to avoid Javascript timeout errors. Set this property to the number of markers to be processed in a single batch; select as high a number as you can without causing a timeout error in the browser. This number might need to be as low as 100 if 15,000 markers are being managed, for example. The default value is MarkerClusterer.BATCH_SIZE_IE. */\n batchSizeIE?: number\n /** The function used to determine the text to be displayed on a cluster marker and the index indicating which style to use for the cluster marker. The input parameters for the function are (1) the array of markers represented by a cluster marker and (2) the number of cluster icon styles. It returns a ClusterIconInfo object. The default calculator returns a text property which is the number of markers in the cluster and an index property which is one higher than the lowest integer such that 10^i exceeds the number of markers in the cluster, or the size of the styles array, whichever is less. The styles array element used has an index of index minus 1. For example, the default calculator returns a text value of \"125\" and an index of 3 for a cluster icon representing 125 markers so the element used in the styles array is 2. A calculator may also return a title property that contains the text of the tooltip to be used for the cluster marker. If title is not defined, the tooltip is set to the value of the title property for the MarkerClusterer. The default value is MarkerClusterer.CALCULATOR. */\n calculator?: TCalculator\n /** The name of the CSS class defining general styles for the cluster markers. Use this class to define CSS styles that are not set up by the code that processes the styles array. The default value is \"cluster\". */\n clusterClass?: string\n /** Whether to allow the use of cluster icons that have sizes that are some multiple (typically double) of their actual display size. Icons such as these look better when viewed on high-resolution monitors such as Apple's Retina displays. Note: if this property is true, sprites cannot be used as cluster icons. The default value is false. */\n enableRetinaIcons?: boolean\n /** The grid size of a cluster in pixels. The grid is a square. The default value is 60. */\n gridSize?: number\n /** Whether to ignore hidden markers in clusters. You may want to set this to true to ensure that hidden markers are not included in the marker count that appears on a cluster marker (this count is the value of the text property of the result returned by the default calculator). If set to true and you change the visibility of a marker being clustered, be sure to also call MarkerClusterer.repaint(). The default value is false. */\n ignoreHidden?: boolean\n /** The extension name for the cluster icon image files (e.g., \"png\" or \"jpg\"). The default value is MarkerClusterer.IMAGE_EXTENSION. */\n imageExtension?: string\n /** The full URL of the root name of the group of image files to use for cluster icons. The complete file name is of the form imagePath.imageExtension where n is the image file number (1, 2, etc.). The default value is MarkerClusterer.IMAGE_PATH. */\n imagePath?: string\n /** An array of numbers containing the widths of the group of imagePath.imageExtension image files. (The images are assumed to be square.) The default value is MarkerClusterer.IMAGE_SIZES. */\n imageSizes?: number[]\n /** The maximum zoom level at which clustering is enabled or null if clustering is to be enabled at all zoom levels. The default value is null. */\n maxZoom?: number\n /** The minimum number of markers needed in a cluster before the markers are hidden and a cluster marker appears. The default value is 2. */\n minimumClusterSize?: number\n /** An array of ClusterIconStyle elements defining the styles of the cluster markers to be used. The element to be used to style a given cluster marker is determined by the function defined by the calculator property. The default is an array of ClusterIconStyle elements whose properties are derived from the values for imagePath, imageExtension, and imageSizes. */\n styles?: ClusterIconStyle[]\n /** The tooltip to display when the mouse moves over a cluster marker. (Alternatively, you can use a custom calculator function to specify a different tooltip for each cluster marker.) The default value is \"\". */\n title?: string\n /** Whether to zoom the map when a cluster marker is clicked. You may want to set this to false if you have installed a handler for the click event and it deals with zooming on its own. The default value is true. */\n zoomOnClick?: boolean\n /** This event is fired when a cluster marker is clicked. */\n onClick?: (cluster: Cluster) => void\n /** This event is fired when the MarkerClusterer begins clustering markers. */\n onClusteringBegin?: (markerClusterer: Clusterer) => void\n /** This event is fired when the MarkerClusterer stops clustering markers. */\n onClusteringEnd?: (markerClusterer: Clusterer) => void\n /** \tThis event is fired when the mouse moves over a cluster marker. */\n onMouseOver?: (cluster: Cluster) => void\n /** This event is fired when the mouse moves out of a cluster marker. */\n onMouseOut?: (cluster: Cluster) => void\n /** This callback is called when the markerClusterer instance has loaded. It is called with the markerClusterer instance. */\n onLoad?: (markerClusterer: Clusterer) => void\n /** This callback is called when the component unmounts. It is called with the markerClusterer instance. */\n onUnmount?: (markerClusterer: Clusterer) => void\n}\n\nexport class ClustererComponent extends React.PureComponent {\n static contextType = MapContext\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n state: ClustererState = {\n markerClusterer: null,\n }\n\n setClustererCallback = (): void => {\n if (this.state.markerClusterer !== null && this.props.onLoad) {\n this.props.onLoad(this.state.markerClusterer)\n }\n }\n\n componentDidMount(): void {\n if (this.context) {\n const markerClusterer = new Clusterer(this.context, [], this.props.options)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: markerClusterer,\n })\n\n this.setState(function setClusterer(): ClustererState {\n return {\n markerClusterer,\n }\n }, this.setClustererCallback)\n }\n }\n\n componentDidUpdate(prevProps: ClustererProps): void {\n if (this.state.markerClusterer) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.markerClusterer,\n })\n }\n }\n\n componentWillUnmount(): void {\n if (this.state.markerClusterer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.markerClusterer)\n }\n\n unregisterEvents(this.registeredEvents)\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.state.markerClusterer.setMap(null)\n }\n }\n\n render(): React.ReactNode {\n return this.state.markerClusterer !== null\n ? this.props.children(this.state.markerClusterer)\n : null\n }\n}\n\nexport default ClustererComponent\n","var InfoBox = /** @class */ (function () {\n function InfoBox(options) {\n if (options === void 0) { options = {}; }\n this.extend(InfoBox, google.maps.OverlayView);\n // Standard options (in common with google.maps.InfoWindow):\n this.content = options.content || '';\n this.disableAutoPan = options.disableAutoPan || false;\n this.maxWidth = options.maxWidth || 0;\n this.pixelOffset = options.pixelOffset || new google.maps.Size(0, 0);\n this.position = options.position || new google.maps.LatLng(0, 0);\n this.zIndex = options.zIndex || null;\n // Additional options (unique to InfoBox):\n this.boxClass = options.boxClass || 'infoBox';\n this.boxStyle = options.boxStyle || {};\n this.closeBoxMargin = options.closeBoxMargin || '2px';\n this.closeBoxURL = options.closeBoxURL || 'http://www.google.com/intl/en_us/mapfiles/close.gif';\n if (options.closeBoxURL === '') {\n this.closeBoxURL = '';\n }\n this.infoBoxClearance = options.infoBoxClearance || new google.maps.Size(1, 1);\n if (typeof options.visible === 'undefined') {\n if (typeof options.isHidden === 'undefined') {\n options.visible = true;\n }\n else {\n options.visible = !options.isHidden;\n }\n }\n this.isHidden = !options.visible;\n this.alignBottom = options.alignBottom || false;\n this.pane = options.pane || 'floatPane';\n this.enableEventPropagation = options.enableEventPropagation || false;\n this.div = null;\n this.closeListener = null;\n this.moveListener = null;\n this.mapListener = null;\n this.contextListener = null;\n this.eventListeners = null;\n this.fixedWidthSet = null;\n }\n InfoBox.prototype.createInfoBoxDiv = function () {\n var _this = this;\n // This handler prevents an event in the InfoBox from being passed on to the map.\n function cancelHandler(event) {\n event.cancelBubble = true;\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n }\n // This handler ignores the current event in the InfoBox and conditionally prevents\n // the event from being passed on to the map. It is used for the contextmenu event.\n // eslint-disable-next-line @getify/proper-arrows/this\n var ignoreHandler = function (event) {\n event.returnValue = false;\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (!_this.enableEventPropagation) {\n cancelHandler(event);\n }\n };\n if (!this.div) {\n this.div = document.createElement('div');\n this.setBoxStyle();\n if (typeof this.content === 'string') {\n this.div.innerHTML = this.getCloseBoxImg() + this.content;\n }\n else {\n this.div.innerHTML = this.getCloseBoxImg();\n this.div.appendChild(this.content);\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n var panes = this.getPanes();\n panes[this.pane].appendChild(this.div); // Add the InfoBox div to the DOM\n this.addClickHandler();\n if (this.div.style.width) {\n this.fixedWidthSet = true;\n }\n else {\n if (this.maxWidth !== 0 && this.div.offsetWidth > this.maxWidth) {\n this.div.style.width = this.maxWidth + 'px';\n this.fixedWidthSet = true;\n }\n else {\n // The following code is needed to overcome problems with MSIE\n var bw = this.getBoxWidths();\n this.div.style.width = this.div.offsetWidth - bw.left - bw.right + 'px';\n this.fixedWidthSet = false;\n }\n }\n this.panBox(this.disableAutoPan);\n if (!this.enableEventPropagation) {\n this.eventListeners = [];\n // Cancel event propagation.\n // Note: mousemove not included (to resolve Issue 152)\n var events = [\n 'mousedown',\n 'mouseover',\n 'mouseout',\n 'mouseup',\n 'click',\n 'dblclick',\n 'touchstart',\n 'touchend',\n 'touchmove',\n ];\n for (var i = 0; i < events.length; i++) {\n this.eventListeners.push(google.maps.event.addDomListener(this.div, events[i], cancelHandler));\n }\n // Workaround for Google bug that causes the cursor to change to a pointer\n // when the mouse moves over a marker underneath InfoBox.\n this.eventListeners.push(google.maps.event.addDomListener(this.div, 'mouseover', \n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n function () {\n if (_this.div) {\n _this.div.style.cursor = 'default';\n }\n }));\n }\n this.contextListener = google.maps.event.addDomListener(this.div, 'contextmenu', ignoreHandler);\n /**\n * This event is fired when the DIV containing the InfoBox's content is attached to the DOM.\n * @name InfoBox#domready\n * @event\n */\n google.maps.event.trigger(this, 'domready');\n }\n };\n InfoBox.prototype.getCloseBoxImg = function () {\n var img = '';\n if (this.closeBoxURL !== '') {\n img = '\"\"';\n\";\n }\n return img;\n };\n InfoBox.prototype.addClickHandler = function () {\n if (this.div && this.div.firstChild && this.closeBoxURL !== '') {\n var closeBox = this.div.firstChild;\n this.closeListener = google.maps.event.addDomListener(closeBox, 'click', this.getCloseClickHandler());\n }\n else {\n this.closeListener = null;\n }\n };\n InfoBox.prototype.getCloseClickHandler = function () {\n var _this = this;\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n return function (event) {\n // 1.0.3 fix: Always prevent propagation of a close box click to the map:\n event.cancelBubble = true;\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n /**\n * This event is fired when the InfoBox's close box is clicked.\n * @name InfoBox#closeclick\n * @event\n */\n google.maps.event.trigger(_this, 'closeclick');\n _this.close();\n };\n };\n InfoBox.prototype.panBox = function (disablePan) {\n if (this.div && !disablePan) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n var map = this.getMap();\n // Only pan if attached to map, not panorama\n if (map instanceof google.maps.Map) {\n var xOffset = 0;\n var yOffset = 0;\n var bounds = map.getBounds();\n if (bounds && !bounds.contains(this.position)) {\n // Marker not in visible area of map, so set center\n // of map to the marker position first.\n map.setCenter(this.position);\n }\n var mapDiv = map.getDiv();\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n var mapWidth = mapDiv.offsetWidth;\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n var mapHeight = mapDiv.offsetHeight;\n var iwOffsetX = this.pixelOffset.width;\n var iwOffsetY = this.pixelOffset.height;\n var iwWidth = this.div.offsetWidth;\n var iwHeight = this.div.offsetHeight;\n var padX = this.infoBoxClearance.width;\n var padY = this.infoBoxClearance.height;\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n var projection = this.getProjection();\n var pixPosition = projection.fromLatLngToContainerPixel(this.position);\n if (pixPosition !== null) {\n if (pixPosition.x < -iwOffsetX + padX) {\n xOffset = pixPosition.x + iwOffsetX - padX;\n }\n else if (pixPosition.x + iwWidth + iwOffsetX + padX > mapWidth) {\n xOffset = pixPosition.x + iwWidth + iwOffsetX + padX - mapWidth;\n }\n if (this.alignBottom) {\n if (pixPosition.y < -iwOffsetY + padY + iwHeight) {\n yOffset = pixPosition.y + iwOffsetY - padY - iwHeight;\n }\n else if (pixPosition.y + iwOffsetY + padY > mapHeight) {\n yOffset = pixPosition.y + iwOffsetY + padY - mapHeight;\n }\n }\n else {\n if (pixPosition.y < -iwOffsetY + padY) {\n yOffset = pixPosition.y + iwOffsetY - padY;\n }\n else if (pixPosition.y + iwHeight + iwOffsetY + padY > mapHeight) {\n yOffset = pixPosition.y + iwHeight + iwOffsetY + padY - mapHeight;\n }\n }\n }\n if (!(xOffset === 0 && yOffset === 0)) {\n // Move the map to the shifted center.\n map.panBy(xOffset, yOffset);\n }\n }\n }\n };\n InfoBox.prototype.setBoxStyle = function () {\n if (this.div) {\n // Apply style values from the style sheet defined in the boxClass parameter:\n this.div.className = this.boxClass;\n // Clear existing inline style values:\n this.div.style.cssText = '';\n // Apply style values defined in the boxStyle parameter:\n var boxStyle = this.boxStyle;\n for (var i in boxStyle) {\n if (boxStyle.hasOwnProperty(i)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.div.style[i] = boxStyle[i];\n }\n }\n // Fix for iOS disappearing InfoBox problem\n // See http://stackoverflow.com/questions/9229535/google-maps-markers-disappear-at-certain-zoom-level-only-on-iphone-ipad\n this.div.style.webkitTransform = 'translateZ(0)';\n // Fix up opacity style for benefit of MSIE\n if (typeof this.div.style.opacity !== 'undefined' && this.div.style.opacity !== '') {\n // See http://www.quirksmode.org/css/opacity.html\n var opacity = parseFloat(this.div.style.opacity || '');\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.div.style.msFilter =\n '\"progid:DXImageTransform.Microsoft.Alpha(Opacity=' + opacity * 100 + ')\"';\n this.div.style.filter = 'alpha(opacity=' + opacity * 100 + ')';\n }\n // Apply required styles\n this.div.style.position = 'absolute';\n this.div.style.visibility = 'hidden';\n if (this.zIndex !== null) {\n this.div.style.zIndex = this.zIndex + '';\n }\n if (!this.div.style.overflow) {\n this.div.style.overflow = 'auto';\n }\n }\n };\n InfoBox.prototype.getBoxWidths = function () {\n var bw = { top: 0, bottom: 0, left: 0, right: 0 };\n if (!this.div) {\n return bw;\n }\n if (document.defaultView && document.defaultView.getComputedStyle) {\n var ownerDocument = this.div.ownerDocument;\n var computedStyle = ownerDocument && ownerDocument.defaultView\n ? ownerDocument.defaultView.getComputedStyle(this.div, '')\n : null;\n if (computedStyle) {\n // The computed styles are always in pixel units (good!)\n bw.top = parseInt(computedStyle.borderTopWidth || '', 10) || 0;\n bw.bottom = parseInt(computedStyle.borderBottomWidth || '', 10) || 0;\n bw.left = parseInt(computedStyle.borderLeftWidth || '', 10) || 0;\n bw.right = parseInt(computedStyle.borderRightWidth || '', 10) || 0;\n }\n }\n else if (\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n document.documentElement.currentStyle // MSIE\n ) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n var currentStyle = this.div.currentStyle;\n if (currentStyle) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // The current styles may not be in pixel units, but assume they are (bad!)\n bw.top = parseInt(currentStyle.borderTopWidth || '', 10) || 0;\n bw.bottom = parseInt(currentStyle.borderBottomWidth || '', 10) || 0;\n bw.left = parseInt(currentStyle.borderLeftWidth || '', 10) || 0;\n bw.right = parseInt(currentStyle.borderRightWidth || '', 10) || 0;\n }\n }\n return bw;\n };\n InfoBox.prototype.onRemove = function () {\n if (this.div && this.div.parentNode) {\n this.div.parentNode.removeChild(this.div);\n this.div = null;\n }\n };\n InfoBox.prototype.draw = function () {\n this.createInfoBoxDiv();\n if (this.div) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n var projection = this.getProjection();\n var pixPosition = projection.fromLatLngToDivPixel(this.position);\n if (pixPosition !== null) {\n this.div.style.left = pixPosition.x + this.pixelOffset.width + 'px';\n if (this.alignBottom) {\n this.div.style.bottom = -(pixPosition.y + this.pixelOffset.height) + 'px';\n }\n else {\n this.div.style.top = pixPosition.y + this.pixelOffset.height + 'px';\n }\n }\n if (this.isHidden) {\n this.div.style.visibility = 'hidden';\n }\n else {\n this.div.style.visibility = 'visible';\n }\n }\n };\n InfoBox.prototype.setOptions = function (options) {\n if (options === void 0) { options = {}; }\n if (typeof options.boxClass !== 'undefined') {\n // Must be first\n this.boxClass = options.boxClass;\n this.setBoxStyle();\n }\n if (typeof options.boxStyle !== 'undefined') {\n // Must be second\n this.boxStyle = options.boxStyle;\n this.setBoxStyle();\n }\n if (typeof options.content !== 'undefined') {\n this.setContent(options.content);\n }\n if (typeof options.disableAutoPan !== 'undefined') {\n this.disableAutoPan = options.disableAutoPan;\n }\n if (typeof options.maxWidth !== 'undefined') {\n this.maxWidth = options.maxWidth;\n }\n if (typeof options.pixelOffset !== 'undefined') {\n this.pixelOffset = options.pixelOffset;\n }\n if (typeof options.alignBottom !== 'undefined') {\n this.alignBottom = options.alignBottom;\n }\n if (typeof options.position !== 'undefined') {\n this.setPosition(options.position);\n }\n if (typeof options.zIndex !== 'undefined') {\n this.setZIndex(options.zIndex);\n }\n if (typeof options.closeBoxMargin !== 'undefined') {\n this.closeBoxMargin = options.closeBoxMargin;\n }\n if (typeof options.closeBoxURL !== 'undefined') {\n this.closeBoxURL = options.closeBoxURL;\n }\n if (typeof options.infoBoxClearance !== 'undefined') {\n this.infoBoxClearance = options.infoBoxClearance;\n }\n if (typeof options.isHidden !== 'undefined') {\n this.isHidden = options.isHidden;\n }\n if (typeof options.visible !== 'undefined') {\n this.isHidden = !options.visible;\n }\n if (typeof options.enableEventPropagation !== 'undefined') {\n this.enableEventPropagation = options.enableEventPropagation;\n }\n if (this.div) {\n this.draw();\n }\n };\n InfoBox.prototype.setContent = function (content) {\n this.content = content;\n if (this.div) {\n if (this.closeListener) {\n google.maps.event.removeListener(this.closeListener);\n this.closeListener = null;\n }\n // Odd code required to make things work with MSIE.\n if (!this.fixedWidthSet) {\n this.div.style.width = '';\n }\n if (typeof content === 'string') {\n this.div.innerHTML = this.getCloseBoxImg() + content;\n }\n else {\n this.div.innerHTML = this.getCloseBoxImg();\n this.div.appendChild(content);\n }\n // Perverse code required to make things work with MSIE.\n // (Ensures the close box does, in fact, float to the right.)\n if (!this.fixedWidthSet) {\n this.div.style.width = this.div.offsetWidth + 'px';\n if (typeof content === 'string') {\n this.div.innerHTML = this.getCloseBoxImg() + content;\n }\n else {\n this.div.innerHTML = this.getCloseBoxImg();\n this.div.appendChild(content);\n }\n }\n this.addClickHandler();\n }\n /**\n * This event is fired when the content of the InfoBox changes.\n * @name InfoBox#content_changed\n * @event\n */\n google.maps.event.trigger(this, 'content_changed');\n };\n InfoBox.prototype.setPosition = function (latLng) {\n this.position = latLng;\n if (this.div) {\n this.draw();\n }\n /**\n * This event is fired when the position of the InfoBox changes.\n * @name InfoBox#position_changed\n * @event\n */\n google.maps.event.trigger(this, 'position_changed');\n };\n InfoBox.prototype.setVisible = function (isVisible) {\n this.isHidden = !isVisible;\n if (this.div) {\n this.div.style.visibility = this.isHidden ? 'hidden' : 'visible';\n }\n };\n InfoBox.prototype.setZIndex = function (index) {\n this.zIndex = index;\n if (this.div) {\n this.div.style.zIndex = index + '';\n }\n /**\n * This event is fired when the zIndex of the InfoBox changes.\n * @name InfoBox#zindex_changed\n * @event\n */\n google.maps.event.trigger(this, 'zindex_changed');\n };\n InfoBox.prototype.getContent = function () {\n return this.content;\n };\n InfoBox.prototype.getPosition = function () {\n return this.position;\n };\n InfoBox.prototype.getZIndex = function () {\n return this.zIndex;\n };\n InfoBox.prototype.getVisible = function () {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n var map = this.getMap();\n var isVisible;\n if (typeof map === 'undefined' || map === null) {\n isVisible = false;\n }\n else {\n isVisible = !this.isHidden;\n }\n return isVisible;\n };\n InfoBox.prototype.show = function () {\n this.isHidden = false;\n if (this.div) {\n this.div.style.visibility = 'visible';\n }\n };\n InfoBox.prototype.hide = function () {\n this.isHidden = true;\n if (this.div) {\n this.div.style.visibility = 'hidden';\n }\n };\n InfoBox.prototype.open = function (map, anchor) {\n var _this = this;\n if (anchor) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.position = anchor.getPosition();\n this.moveListener = google.maps.event.addListener(anchor, 'position_changed', \n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n function () {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n var position = anchor.getPosition();\n _this.setPosition(position);\n });\n this.mapListener = google.maps.event.addListener(anchor, 'map_changed', \n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n function () {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n _this.setMap(anchor.map);\n });\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.setMap(map);\n if (this.div) {\n this.panBox();\n }\n };\n InfoBox.prototype.close = function () {\n if (this.closeListener) {\n google.maps.event.removeListener(this.closeListener);\n this.closeListener = null;\n }\n if (this.eventListeners) {\n for (var i = 0; i < this.eventListeners.length; i++) {\n google.maps.event.removeListener(this.eventListeners[i]);\n }\n this.eventListeners = null;\n }\n if (this.moveListener) {\n google.maps.event.removeListener(this.moveListener);\n this.moveListener = null;\n }\n if (this.mapListener) {\n google.maps.event.removeListener(this.mapListener);\n this.mapListener = null;\n }\n if (this.contextListener) {\n google.maps.event.removeListener(this.contextListener);\n this.contextListener = null;\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.setMap(null);\n };\n InfoBox.prototype.extend = function (obj1, obj2) {\n return function applyExtend(object) {\n // eslint-disable-next-line guard-for-in\n for (var property in object.prototype) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n if (!this.prototype.hasOwnProperty(property)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.prototype[property] = object.prototype[property];\n }\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n return this;\n }.apply(obj1, [obj2]);\n };\n return InfoBox;\n}());\n\nexport { InfoBox };\n//# sourceMappingURL=esm.js.map\n","/* global google */\n/* eslint-disable filenames/match-exported */\nimport * as React from 'react'\nimport * as ReactDOM from 'react-dom'\nimport invariant from 'invariant'\nimport {\n InfoBox as GoogleMapsInfoBox,\n InfoBoxOptions as GoogleMapsInfoBoxOptions,\n} from '@react-google-maps/infobox'\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onCloseClick: 'closeclick',\n onContentChanged: 'content_changed',\n onDomReady: 'domready',\n onPositionChanged: 'position_changed',\n onZindexChanged: 'zindex_changed',\n}\n\nconst updaterMap = {\n options(instance: GoogleMapsInfoBox, options: GoogleMapsInfoBoxOptions): void {\n instance.setOptions(options)\n },\n position(\n instance: GoogleMapsInfoBox,\n position: google.maps.LatLng | google.maps.LatLngLiteral\n ): void {\n if (position instanceof google.maps.LatLng) {\n instance.setPosition(position)\n } else {\n instance.setPosition(new google.maps.LatLng(position.lat, position.lng))\n }\n },\n visible(instance: GoogleMapsInfoBox, visible: boolean): void {\n instance.setVisible(visible)\n },\n zIndex(instance: GoogleMapsInfoBox, zIndex: number): void {\n instance.setZIndex(zIndex)\n },\n}\n\ntype InfoBoxOptions = Omit & {\n position?: google.maps.LatLng | google.maps.LatLngLiteral\n}\n\ninterface InfoBoxState {\n infoBox: GoogleMapsInfoBox | null\n}\n\nexport interface InfoBoxProps {\n /** Can be any MVCObject that exposes a LatLng position property and optionally a Point anchorPoint property for calculating the pixelOffset. The anchorPoint is the offset from the anchor's position to the tip of the InfoBox. */\n anchor?: google.maps.MVCObject\n options?: InfoBoxOptions\n /** The LatLng at which to display this InfoBox. If the InfoBox is opened with an anchor, the anchor's position will be used instead. */\n position?: google.maps.LatLng | google.maps.LatLngLiteral\n /** All InfoBoxes are displayed on the map in order of their zIndex, with higher values displaying in front of InfoBoxes with lower values. By default, InfoBoxes are displayed according to their latitude, with InfoBoxes of lower latitudes appearing in front of InfoBoxes at higher latitudes. InfoBoxes are always displayed in front of markers. */\n zIndex?: number\n /** This event is fired when the close button was clicked. */\n onCloseClick?: () => void\n /** This event is fired when the
containing the InfoBox's content is attached to the DOM. You may wish to monitor this event if you are building out your info window content dynamically. */\n onDomReady?: () => void\n /** This event is fired when the content property changes. */\n onContentChanged?: () => void\n /** This event is fired when the position property changes. */\n onPositionChanged?: () => void\n /** This event is fired when the InfoBox's zIndex changes. */\n onZindexChanged?: () => void\n /** This callback is called when the infoBox instance has loaded. It is called with the infoBox instance. */\n onLoad?: (infoBox: GoogleMapsInfoBox) => void\n /** This callback is called when the component unmounts. It is called with the infoBox instance. */\n onUnmount?: (infoBox: GoogleMapsInfoBox) => void\n}\n\nexport class InfoBoxComponent extends React.PureComponent {\n static contextType = MapContext\n\n registeredEvents: google.maps.MapsEventListener[] = []\n containerElement: HTMLElement | null = null\n\n state: InfoBoxState = {\n infoBox: null,\n }\n\n open = (infoBox: GoogleMapsInfoBox, anchor?: google.maps.MVCObject): void => {\n if (anchor) {\n infoBox.open(this.context, anchor)\n } else if (infoBox.getPosition()) {\n infoBox.open(this.context)\n } else {\n invariant(false, 'You must provide either an anchor or a position prop for .')\n }\n }\n\n setInfoBoxCallback = (): void => {\n const { anchor, onLoad } = this.props\n const { infoBox } = this.state\n\n if (infoBox !== null && this.containerElement !== null) {\n infoBox.setContent(this.containerElement)\n this.open(infoBox, anchor)\n\n if (onLoad) {\n onLoad(infoBox)\n }\n }\n }\n\n componentDidMount(): void {\n const { options } = this.props\n const { position, ...infoBoxOptions }: InfoBoxOptions = options || {}\n\n let positionLatLng: google.maps.LatLng | undefined\n if (position && !(position instanceof google.maps.LatLng)) {\n positionLatLng = new google.maps.LatLng(position.lat, position.lng)\n }\n\n const infoBox = new GoogleMapsInfoBox({\n ...infoBoxOptions,\n ...(positionLatLng ? { position: positionLatLng } : {}),\n })\n\n this.containerElement = document.createElement('div')\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: infoBox,\n })\n\n this.setState({ infoBox }, this.setInfoBoxCallback)\n }\n\n componentDidUpdate(prevProps: InfoBoxProps): void {\n const { infoBox } = this.state\n\n if (infoBox !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: infoBox,\n })\n }\n }\n\n componentWillUnmount(): void {\n const { onUnmount } = this.props\n const { infoBox } = this.state\n\n if (infoBox !== null) {\n if (onUnmount) {\n onUnmount(infoBox)\n }\n\n unregisterEvents(this.registeredEvents)\n infoBox.close()\n }\n }\n\n render(): React.ReactPortal | null {\n if (!this.containerElement) {\n return null\n }\n\n return ReactDOM.createPortal(React.Children.only(this.props.children), this.containerElement)\n }\n}\n\nexport default InfoBoxComponent\n","/**\r\n * DBSCAN - Density based clustering\r\n *\r\n * @author Lukasz Krawczyk \r\n * @copyright MIT\r\n */\r\n\r\n/**\r\n * DBSCAN class construcotr\r\n * @constructor\r\n *\r\n * @param {Array} dataset\r\n * @param {number} epsilon\r\n * @param {number} minPts\r\n * @param {function} distanceFunction\r\n * @returns {DBSCAN}\r\n */\r\nfunction DBSCAN(dataset, epsilon, minPts, distanceFunction) {\r\n /** @type {Array} */\r\n this.dataset = [];\r\n /** @type {number} */\r\n this.epsilon = 1;\r\n /** @type {number} */\r\n this.minPts = 2;\r\n /** @type {function} */\r\n this.distance = this._euclideanDistance;\r\n /** @type {Array} */\r\n this.clusters = [];\r\n /** @type {Array} */\r\n this.noise = [];\r\n\r\n // temporary variables used during computation\r\n\r\n /** @type {Array} */\r\n this._visited = [];\r\n /** @type {Array} */\r\n this._assigned = [];\r\n /** @type {number} */\r\n this._datasetLength = 0;\r\n\r\n this._init(dataset, epsilon, minPts, distanceFunction);\r\n};\r\n\r\n/******************************************************************************/\r\n// public functions\r\n\r\n/**\r\n * Start clustering\r\n *\r\n * @param {Array} dataset\r\n * @param {number} epsilon\r\n * @param {number} minPts\r\n * @param {function} distanceFunction\r\n * @returns {undefined}\r\n * @access public\r\n */\r\nDBSCAN.prototype.run = function(dataset, epsilon, minPts, distanceFunction) {\r\n this._init(dataset, epsilon, minPts, distanceFunction);\r\n\r\n for (var pointId = 0; pointId < this._datasetLength; pointId++) {\r\n // if point is not visited, check if it forms a cluster\r\n if (this._visited[pointId] !== 1) {\r\n this._visited[pointId] = 1;\r\n\r\n // if closest neighborhood is too small to form a cluster, mark as noise\r\n var neighbors = this._regionQuery(pointId);\r\n\r\n if (neighbors.length < this.minPts) {\r\n this.noise.push(pointId);\r\n } else {\r\n // create new cluster and add point\r\n var clusterId = this.clusters.length;\r\n this.clusters.push([]);\r\n this._addToCluster(pointId, clusterId);\r\n\r\n this._expandCluster(clusterId, neighbors);\r\n }\r\n }\r\n }\r\n\r\n return this.clusters;\r\n};\r\n\r\n/******************************************************************************/\r\n// protected functions\r\n\r\n/**\r\n * Set object properties\r\n *\r\n * @param {Array} dataset\r\n * @param {number} epsilon\r\n * @param {number} minPts\r\n * @param {function} distance\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nDBSCAN.prototype._init = function(dataset, epsilon, minPts, distance) {\r\n\r\n if (dataset) {\r\n\r\n if (!(dataset instanceof Array)) {\r\n throw Error('Dataset must be of type array, ' +\r\n typeof dataset + ' given');\r\n }\r\n\r\n this.dataset = dataset;\r\n this.clusters = [];\r\n this.noise = [];\r\n\r\n this._datasetLength = dataset.length;\r\n this._visited = new Array(this._datasetLength);\r\n this._assigned = new Array(this._datasetLength);\r\n }\r\n\r\n if (epsilon) {\r\n this.epsilon = epsilon;\r\n }\r\n\r\n if (minPts) {\r\n this.minPts = minPts;\r\n }\r\n\r\n if (distance) {\r\n this.distance = distance;\r\n }\r\n};\r\n\r\n/**\r\n * Expand cluster to closest points of given neighborhood\r\n *\r\n * @param {number} clusterId\r\n * @param {Array} neighbors\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nDBSCAN.prototype._expandCluster = function(clusterId, neighbors) {\r\n\r\n /**\r\n * It's very important to calculate length of neighbors array each time,\r\n * as the number of elements changes over time\r\n */\r\n for (var i = 0; i < neighbors.length; i++) {\r\n var pointId2 = neighbors[i];\r\n\r\n if (this._visited[pointId2] !== 1) {\r\n this._visited[pointId2] = 1;\r\n var neighbors2 = this._regionQuery(pointId2);\r\n\r\n if (neighbors2.length >= this.minPts) {\r\n neighbors = this._mergeArrays(neighbors, neighbors2);\r\n }\r\n }\r\n\r\n // add to cluster\r\n if (this._assigned[pointId2] !== 1) {\r\n this._addToCluster(pointId2, clusterId);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Add new point to cluster\r\n *\r\n * @param {number} pointId\r\n * @param {number} clusterId\r\n */\r\nDBSCAN.prototype._addToCluster = function(pointId, clusterId) {\r\n this.clusters[clusterId].push(pointId);\r\n this._assigned[pointId] = 1;\r\n};\r\n\r\n/**\r\n * Find all neighbors around given point\r\n *\r\n * @param {number} pointId,\r\n * @param {number} epsilon\r\n * @returns {Array}\r\n * @access protected\r\n */\r\nDBSCAN.prototype._regionQuery = function(pointId) {\r\n var neighbors = [];\r\n\r\n for (var id = 0; id < this._datasetLength; id++) {\r\n var dist = this.distance(this.dataset[pointId], this.dataset[id]);\r\n if (dist < this.epsilon) {\r\n neighbors.push(id);\r\n }\r\n }\r\n\r\n return neighbors;\r\n};\r\n\r\n/******************************************************************************/\r\n// helpers\r\n\r\n/**\r\n * @param {Array} a\r\n * @param {Array} b\r\n * @returns {Array}\r\n * @access protected\r\n */\r\nDBSCAN.prototype._mergeArrays = function(a, b) {\r\n var len = b.length;\r\n\r\n for (var i = 0; i < len; i++) {\r\n var P = b[i];\r\n if (a.indexOf(P) < 0) {\r\n a.push(P);\r\n }\r\n }\r\n\r\n return a;\r\n};\r\n\r\n/**\r\n * Calculate euclidean distance in multidimensional space\r\n *\r\n * @param {Array} p\r\n * @param {Array} q\r\n * @returns {number}\r\n * @access protected\r\n */\r\nDBSCAN.prototype._euclideanDistance = function(p, q) {\r\n var sum = 0;\r\n var i = Math.min(p.length, q.length);\r\n\r\n while (i--) {\r\n sum += (p[i] - q[i]) * (p[i] - q[i]);\r\n }\r\n\r\n return Math.sqrt(sum);\r\n};\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = DBSCAN;\r\n}\r\n","/**\r\n * KMEANS clustering\r\n *\r\n * @author Lukasz Krawczyk \r\n * @copyright MIT\r\n */\r\n\r\n/**\r\n * KMEANS class constructor\r\n * @constructor\r\n *\r\n * @param {Array} dataset\r\n * @param {number} k - number of clusters\r\n * @param {function} distance - distance function\r\n * @returns {KMEANS}\r\n */\r\n function KMEANS(dataset, k, distance) {\r\n this.k = 3; // number of clusters\r\n this.dataset = []; // set of feature vectors\r\n this.assignments = []; // set of associated clusters for each feature vector\r\n this.centroids = []; // vectors for our clusters\r\n\r\n this.init(dataset, k, distance);\r\n}\r\n\r\n/**\r\n * @returns {undefined}\r\n */\r\nKMEANS.prototype.init = function(dataset, k, distance) {\r\n this.assignments = [];\r\n this.centroids = [];\r\n\r\n if (typeof dataset !== 'undefined') {\r\n this.dataset = dataset;\r\n }\r\n\r\n if (typeof k !== 'undefined') {\r\n this.k = k;\r\n }\r\n\r\n if (typeof distance !== 'undefined') {\r\n this.distance = distance;\r\n }\r\n};\r\n\r\n/**\r\n * @returns {undefined}\r\n */\r\nKMEANS.prototype.run = function(dataset, k) {\r\n this.init(dataset, k);\r\n\r\n var len = this.dataset.length;\r\n\r\n // initialize centroids\r\n for (var i = 0; i < this.k; i++) {\r\n this.centroids[i] = this.randomCentroid();\r\n\t}\r\n\r\n var change = true;\r\n while(change) {\r\n\r\n // assign feature vectors to clusters\r\n change = this.assign();\r\n\r\n // adjust location of centroids\r\n for (var centroidId = 0; centroidId < this.k; centroidId++) {\r\n var mean = new Array(maxDim);\r\n var count = 0;\r\n\r\n // init mean vector\r\n for (var dim = 0; dim < maxDim; dim++) {\r\n mean[dim] = 0;\r\n }\r\n\r\n for (var j = 0; j < len; j++) {\r\n var maxDim = this.dataset[j].length;\r\n\r\n // if current cluster id is assigned to point\r\n if (centroidId === this.assignments[j]) {\r\n for (var dim = 0; dim < maxDim; dim++) {\r\n mean[dim] += this.dataset[j][dim];\r\n }\r\n count++;\r\n }\r\n }\r\n\r\n if (count > 0) {\r\n // if cluster contain points, adjust centroid position\r\n for (var dim = 0; dim < maxDim; dim++) {\r\n mean[dim] /= count;\r\n }\r\n this.centroids[centroidId] = mean;\r\n } else {\r\n // if cluster is empty, generate new random centroid\r\n this.centroids[centroidId] = this.randomCentroid();\r\n change = true;\r\n }\r\n }\r\n }\r\n\r\n return this.getClusters();\r\n};\r\n\r\n/**\r\n * Generate random centroid\r\n *\r\n * @returns {Array}\r\n */\r\nKMEANS.prototype.randomCentroid = function() {\r\n var maxId = this.dataset.length -1;\r\n var centroid;\r\n var id;\r\n\r\n do {\r\n id = Math.round(Math.random() * maxId);\r\n centroid = this.dataset[id];\r\n } while (this.centroids.indexOf(centroid) >= 0);\r\n\r\n return centroid;\r\n}\r\n\r\n/**\r\n * Assign points to clusters\r\n *\r\n * @returns {boolean}\r\n */\r\nKMEANS.prototype.assign = function() {\r\n var change = false;\r\n var len = this.dataset.length;\r\n var closestCentroid;\r\n\r\n for (var i = 0; i < len; i++) {\r\n closestCentroid = this.argmin(this.dataset[i], this.centroids, this.distance);\r\n\r\n if (closestCentroid != this.assignments[i]) {\r\n this.assignments[i] = closestCentroid;\r\n change = true;\r\n }\r\n }\r\n\r\n return change;\r\n}\r\n\r\n/**\r\n * Extract information about clusters\r\n *\r\n * @returns {undefined}\r\n */\r\nKMEANS.prototype.getClusters = function() {\r\n var clusters = new Array(this.k);\r\n var centroidId;\r\n\r\n for (var pointId = 0; pointId < this.assignments.length; pointId++) {\r\n centroidId = this.assignments[pointId];\r\n\r\n // init empty cluster\r\n if (typeof clusters[centroidId] === 'undefined') {\r\n clusters[centroidId] = [];\r\n }\r\n\r\n clusters[centroidId].push(pointId);\r\n }\r\n\r\n return clusters;\r\n};\r\n\r\n// utils\r\n\r\n/**\r\n * @params {Array} point\r\n * @params {Array.} set\r\n * @params {Function} f\r\n * @returns {number}\r\n */\r\nKMEANS.prototype.argmin = function(point, set, f) {\r\n var min = Number.MAX_VALUE;\r\n var arg = 0;\r\n var len = set.length;\r\n var d;\r\n\r\n for (var i = 0; i < len; i++) {\r\n d = f(point, set[i]);\r\n if (d < min) {\r\n min = d;\r\n arg = i;\r\n }\r\n }\r\n\r\n return arg;\r\n};\r\n\r\n/**\r\n * Euclidean distance\r\n *\r\n * @params {number} p\r\n * @params {number} q\r\n * @returns {number}\r\n */\r\nKMEANS.prototype.distance = function(p, q) {\r\n var sum = 0;\r\n var i = Math.min(p.length, q.length);\r\n\r\n while (i--) {\r\n var diff = p[i] - q[i];\r\n sum += diff * diff;\r\n }\r\n\r\n return Math.sqrt(sum);\r\n};\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = KMEANS;\r\n}\r\n","/**\r\n * PriorityQueue\r\n * Elements in this queue are sorted according to their value\r\n *\r\n * @author Lukasz Krawczyk \r\n * @copyright MIT\r\n */\r\n\r\n/**\r\n * PriorityQueue class construcotr\r\n * @constructor\r\n *\r\n * @example\r\n * queue: [1,2,3,4]\r\n * priorities: [4,1,2,3]\r\n * > result = [1,4,2,3]\r\n *\r\n * @param {Array} elements\r\n * @param {Array} priorities\r\n * @param {string} sorting - asc / desc\r\n * @returns {PriorityQueue}\r\n */\r\nfunction PriorityQueue(elements, priorities, sorting) {\r\n /** @type {Array} */\r\n this._queue = [];\r\n /** @type {Array} */\r\n this._priorities = [];\r\n /** @type {string} */\r\n this._sorting = 'desc';\r\n\r\n this._init(elements, priorities, sorting);\r\n};\r\n\r\n/**\r\n * Insert element\r\n *\r\n * @param {Object} ele\r\n * @param {Object} priority\r\n * @returns {undefined}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.insert = function(ele, priority) {\r\n var indexToInsert = this._queue.length;\r\n var index = indexToInsert;\r\n\r\n while (index--) {\r\n var priority2 = this._priorities[index];\r\n if (this._sorting === 'desc') {\r\n if (priority > priority2) {\r\n indexToInsert = index;\r\n }\r\n } else {\r\n if (priority < priority2) {\r\n indexToInsert = index;\r\n }\r\n }\r\n }\r\n\r\n this._insertAt(ele, priority, indexToInsert);\r\n};\r\n\r\n/**\r\n * Remove element\r\n *\r\n * @param {Object} ele\r\n * @returns {undefined}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.remove = function(ele) {\r\n var index = this._queue.length;\r\n\r\n while (index--) {\r\n var ele2 = this._queue[index];\r\n if (ele === ele2) {\r\n this._queue.splice(index, 1);\r\n this._priorities.splice(index, 1);\r\n break;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * For each loop wrapper\r\n *\r\n * @param {function} func\r\n * @returs {undefined}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.forEach = function(func) {\r\n this._queue.forEach(func);\r\n};\r\n\r\n/**\r\n * @returns {Array}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.getElements = function() {\r\n return this._queue;\r\n};\r\n\r\n/**\r\n * @param {number} index\r\n * @returns {Object}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.getElementPriority = function(index) {\r\n return this._priorities[index];\r\n};\r\n\r\n/**\r\n * @returns {Array}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.getPriorities = function() {\r\n return this._priorities;\r\n};\r\n\r\n/**\r\n * @returns {Array}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.getElementsWithPriorities = function() {\r\n var result = [];\r\n\r\n for (var i = 0, l = this._queue.length; i < l; i++) {\r\n result.push([this._queue[i], this._priorities[i]]);\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Set object properties\r\n *\r\n * @param {Array} elements\r\n * @param {Array} priorities\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nPriorityQueue.prototype._init = function(elements, priorities, sorting) {\r\n\r\n if (elements && priorities) {\r\n this._queue = [];\r\n this._priorities = [];\r\n\r\n if (elements.length !== priorities.length) {\r\n throw new Error('Arrays must have the same length');\r\n }\r\n\r\n for (var i = 0; i < elements.length; i++) {\r\n this.insert(elements[i], priorities[i]);\r\n }\r\n }\r\n\r\n if (sorting) {\r\n this._sorting = sorting;\r\n }\r\n};\r\n\r\n/**\r\n * Insert element at given position\r\n *\r\n * @param {Object} ele\r\n * @param {number} index\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nPriorityQueue.prototype._insertAt = function(ele, priority, index) {\r\n if (this._queue.length === index) {\r\n this._queue.push(ele);\r\n this._priorities.push(priority);\r\n } else {\r\n this._queue.splice(index, 0, ele);\r\n this._priorities.splice(index, 0, priority);\r\n }\r\n};\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = PriorityQueue;\r\n}\r\n","\r\n/**\r\n * @requires ./PriorityQueue.js\r\n */\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n var PriorityQueue = require('./PriorityQueue.js');\r\n}\r\n\r\n/**\r\n * OPTICS - Ordering points to identify the clustering structure\r\n *\r\n * @author Lukasz Krawczyk \r\n * @copyright MIT\r\n */\r\n\r\n/**\r\n * OPTICS class constructor\r\n * @constructor\r\n *\r\n * @param {Array} dataset\r\n * @param {number} epsilon\r\n * @param {number} minPts\r\n * @param {function} distanceFunction\r\n * @returns {OPTICS}\r\n */\r\nfunction OPTICS(dataset, epsilon, minPts, distanceFunction) {\r\n /** @type {number} */\r\n this.epsilon = 1;\r\n /** @type {number} */\r\n this.minPts = 1;\r\n /** @type {function} */\r\n this.distance = this._euclideanDistance;\r\n\r\n // temporary variables used during computation\r\n\r\n /** @type {Array} */\r\n this._reachability = [];\r\n /** @type {Array} */\r\n this._processed = [];\r\n /** @type {number} */\r\n this._coreDistance = 0;\r\n /** @type {Array} */\r\n this._orderedList = [];\r\n\r\n this._init(dataset, epsilon, minPts, distanceFunction);\r\n}\r\n\r\n/******************************************************************************/\r\n// pulic functions\r\n\r\n/**\r\n * Start clustering\r\n *\r\n * @param {Array} dataset\r\n * @returns {undefined}\r\n * @access public\r\n */\r\nOPTICS.prototype.run = function(dataset, epsilon, minPts, distanceFunction) {\r\n this._init(dataset, epsilon, minPts, distanceFunction);\r\n\r\n for (var pointId = 0, l = this.dataset.length; pointId < l; pointId++) {\r\n if (this._processed[pointId] !== 1) {\r\n this._processed[pointId] = 1;\r\n this.clusters.push([pointId]);\r\n var clusterId = this.clusters.length - 1;\r\n\r\n this._orderedList.push(pointId);\r\n var priorityQueue = new PriorityQueue(null, null, 'asc');\r\n var neighbors = this._regionQuery(pointId);\r\n\r\n // using priority queue assign elements to new cluster\r\n if (this._distanceToCore(pointId) !== undefined) {\r\n this._updateQueue(pointId, neighbors, priorityQueue);\r\n this._expandCluster(clusterId, priorityQueue);\r\n }\r\n }\r\n }\r\n\r\n return this.clusters;\r\n};\r\n\r\n/**\r\n * Generate reachability plot for all points\r\n *\r\n * @returns {array}\r\n * @access public\r\n */\r\nOPTICS.prototype.getReachabilityPlot = function() {\r\n var reachabilityPlot = [];\r\n\r\n for (var i = 0, l = this._orderedList.length; i < l; i++) {\r\n var pointId = this._orderedList[i];\r\n var distance = this._reachability[pointId];\r\n\r\n reachabilityPlot.push([pointId, distance]);\r\n }\r\n\r\n return reachabilityPlot;\r\n};\r\n\r\n/******************************************************************************/\r\n// protected functions\r\n\r\n/**\r\n * Set object properties\r\n *\r\n * @param {Array} dataset\r\n * @param {number} epsilon\r\n * @param {number} minPts\r\n * @param {function} distance\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nOPTICS.prototype._init = function(dataset, epsilon, minPts, distance) {\r\n\r\n if (dataset) {\r\n\r\n if (!(dataset instanceof Array)) {\r\n throw Error('Dataset must be of type array, ' +\r\n typeof dataset + ' given');\r\n }\r\n\r\n this.dataset = dataset;\r\n this.clusters = [];\r\n this._reachability = new Array(this.dataset.length);\r\n this._processed = new Array(this.dataset.length);\r\n this._coreDistance = 0;\r\n this._orderedList = [];\r\n }\r\n\r\n if (epsilon) {\r\n this.epsilon = epsilon;\r\n }\r\n\r\n if (minPts) {\r\n this.minPts = minPts;\r\n }\r\n\r\n if (distance) {\r\n this.distance = distance;\r\n }\r\n};\r\n\r\n/**\r\n * Update information in queue\r\n *\r\n * @param {number} pointId\r\n * @param {Array} neighbors\r\n * @param {PriorityQueue} queue\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nOPTICS.prototype._updateQueue = function(pointId, neighbors, queue) {\r\n var self = this;\r\n\r\n this._coreDistance = this._distanceToCore(pointId);\r\n neighbors.forEach(function(pointId2) {\r\n if (self._processed[pointId2] === undefined) {\r\n var dist = self.distance(self.dataset[pointId], self.dataset[pointId2]);\r\n var newReachableDistance = Math.max(self._coreDistance, dist);\r\n\r\n if (self._reachability[pointId2] === undefined) {\r\n self._reachability[pointId2] = newReachableDistance;\r\n queue.insert(pointId2, newReachableDistance);\r\n } else {\r\n if (newReachableDistance < self._reachability[pointId2]) {\r\n self._reachability[pointId2] = newReachableDistance;\r\n queue.remove(pointId2);\r\n queue.insert(pointId2, newReachableDistance);\r\n }\r\n }\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * Expand cluster\r\n *\r\n * @param {number} clusterId\r\n * @param {PriorityQueue} queue\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nOPTICS.prototype._expandCluster = function(clusterId, queue) {\r\n var queueElements = queue.getElements();\r\n\r\n for (var p = 0, l = queueElements.length; p < l; p++) {\r\n var pointId = queueElements[p];\r\n if (this._processed[pointId] === undefined) {\r\n var neighbors = this._regionQuery(pointId);\r\n this._processed[pointId] = 1;\r\n\r\n this.clusters[clusterId].push(pointId);\r\n this._orderedList.push(pointId);\r\n\r\n if (this._distanceToCore(pointId) !== undefined) {\r\n this._updateQueue(pointId, neighbors, queue);\r\n this._expandCluster(clusterId, queue);\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Calculating distance to cluster core\r\n *\r\n * @param {number} pointId\r\n * @returns {number}\r\n * @access protected\r\n */\r\nOPTICS.prototype._distanceToCore = function(pointId) {\r\n var l = this.epsilon;\r\n for (var coreDistCand = 0; coreDistCand < l; coreDistCand++) {\r\n var neighbors = this._regionQuery(pointId, coreDistCand);\r\n if (neighbors.length >= this.minPts) {\r\n return coreDistCand;\r\n }\r\n }\r\n\r\n return;\r\n};\r\n\r\n/**\r\n * Find all neighbors around given point\r\n *\r\n * @param {number} pointId\r\n * @param {number} epsilon\r\n * @returns {Array}\r\n * @access protected\r\n */\r\nOPTICS.prototype._regionQuery = function(pointId, epsilon) {\r\n epsilon = epsilon || this.epsilon;\r\n var neighbors = [];\r\n\r\n for (var id = 0, l = this.dataset.length; id < l; id++) {\r\n if (this.distance(this.dataset[pointId], this.dataset[id]) < epsilon) {\r\n neighbors.push(id);\r\n }\r\n }\r\n\r\n return neighbors;\r\n};\r\n\r\n/******************************************************************************/\r\n// helpers\r\n\r\n/**\r\n * Calculate euclidean distance in multidimensional space\r\n *\r\n * @param {Array} p\r\n * @param {Array} q\r\n * @returns {number}\r\n * @access protected\r\n */\r\nOPTICS.prototype._euclideanDistance = function(p, q) {\r\n var sum = 0;\r\n var i = Math.min(p.length, q.length);\r\n\r\n while (i--) {\r\n sum += (p[i] - q[i]) * (p[i] - q[i]);\r\n }\r\n\r\n return Math.sqrt(sum);\r\n};\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = OPTICS;\r\n}\r\n","\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = {\r\n DBSCAN: require('./DBSCAN.js'),\r\n KMEANS: require('./KMEANS.js'),\r\n OPTICS: require('./OPTICS.js'),\r\n PriorityQueue: require('./PriorityQueue.js')\r\n };\r\n}\r\n","(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\ntypeof define === 'function' && define.amd ? define(factory) :\n(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Supercluster = factory());\n})(this, (function () { 'use strict';\n\nfunction sortKD(ids, coords, nodeSize, left, right, depth) {\n if (right - left <= nodeSize) { return; }\n\n var m = (left + right) >> 1;\n\n select(ids, coords, m, left, right, depth % 2);\n\n sortKD(ids, coords, nodeSize, left, m - 1, depth + 1);\n sortKD(ids, coords, nodeSize, m + 1, right, depth + 1);\n}\n\nfunction select(ids, coords, k, left, right, inc) {\n\n while (right > left) {\n if (right - left > 600) {\n var n = right - left + 1;\n var m = k - left + 1;\n var z = Math.log(n);\n var s = 0.5 * Math.exp(2 * z / 3);\n var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n select(ids, coords, k, newLeft, newRight, inc);\n }\n\n var t = coords[2 * k + inc];\n var i = left;\n var j = right;\n\n swapItem(ids, coords, left, k);\n if (coords[2 * right + inc] > t) { swapItem(ids, coords, left, right); }\n\n while (i < j) {\n swapItem(ids, coords, i, j);\n i++;\n j--;\n while (coords[2 * i + inc] < t) { i++; }\n while (coords[2 * j + inc] > t) { j--; }\n }\n\n if (coords[2 * left + inc] === t) { swapItem(ids, coords, left, j); }\n else {\n j++;\n swapItem(ids, coords, j, right);\n }\n\n if (j <= k) { left = j + 1; }\n if (k <= j) { right = j - 1; }\n }\n}\n\nfunction swapItem(ids, coords, i, j) {\n swap(ids, i, j);\n swap(coords, 2 * i, 2 * j);\n swap(coords, 2 * i + 1, 2 * j + 1);\n}\n\nfunction swap(arr, i, j) {\n var tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction range(ids, coords, minX, minY, maxX, maxY, nodeSize) {\n var stack = [0, ids.length - 1, 0];\n var result = [];\n var x, y;\n\n while (stack.length) {\n var axis = stack.pop();\n var right = stack.pop();\n var left = stack.pop();\n\n if (right - left <= nodeSize) {\n for (var i = left; i <= right; i++) {\n x = coords[2 * i];\n y = coords[2 * i + 1];\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) { result.push(ids[i]); }\n }\n continue;\n }\n\n var m = Math.floor((left + right) / 2);\n\n x = coords[2 * m];\n y = coords[2 * m + 1];\n\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) { result.push(ids[m]); }\n\n var nextAxis = (axis + 1) % 2;\n\n if (axis === 0 ? minX <= x : minY <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(nextAxis);\n }\n if (axis === 0 ? maxX >= x : maxY >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(nextAxis);\n }\n }\n\n return result;\n}\n\nfunction within(ids, coords, qx, qy, r, nodeSize) {\n var stack = [0, ids.length - 1, 0];\n var result = [];\n var r2 = r * r;\n\n while (stack.length) {\n var axis = stack.pop();\n var right = stack.pop();\n var left = stack.pop();\n\n if (right - left <= nodeSize) {\n for (var i = left; i <= right; i++) {\n if (sqDist(coords[2 * i], coords[2 * i + 1], qx, qy) <= r2) { result.push(ids[i]); }\n }\n continue;\n }\n\n var m = Math.floor((left + right) / 2);\n\n var x = coords[2 * m];\n var y = coords[2 * m + 1];\n\n if (sqDist(x, y, qx, qy) <= r2) { result.push(ids[m]); }\n\n var nextAxis = (axis + 1) % 2;\n\n if (axis === 0 ? qx - r <= x : qy - r <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(nextAxis);\n }\n if (axis === 0 ? qx + r >= x : qy + r >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(nextAxis);\n }\n }\n\n return result;\n}\n\nfunction sqDist(ax, ay, bx, by) {\n var dx = ax - bx;\n var dy = ay - by;\n return dx * dx + dy * dy;\n}\n\nvar defaultGetX = function (p) { return p[0]; };\nvar defaultGetY = function (p) { return p[1]; };\n\nvar KDBush = function KDBush(points, getX, getY, nodeSize, ArrayType) {\n if ( getX === void 0 ) getX = defaultGetX;\n if ( getY === void 0 ) getY = defaultGetY;\n if ( nodeSize === void 0 ) nodeSize = 64;\n if ( ArrayType === void 0 ) ArrayType = Float64Array;\n\n this.nodeSize = nodeSize;\n this.points = points;\n\n var IndexArrayType = points.length < 65536 ? Uint16Array : Uint32Array;\n\n var ids = this.ids = new IndexArrayType(points.length);\n var coords = this.coords = new ArrayType(points.length * 2);\n\n for (var i = 0; i < points.length; i++) {\n ids[i] = i;\n coords[2 * i] = getX(points[i]);\n coords[2 * i + 1] = getY(points[i]);\n }\n\n sortKD(ids, coords, nodeSize, 0, ids.length - 1, 0);\n};\n\nKDBush.prototype.range = function range$1 (minX, minY, maxX, maxY) {\n return range(this.ids, this.coords, minX, minY, maxX, maxY, this.nodeSize);\n};\n\nKDBush.prototype.within = function within$1 (x, y, r) {\n return within(this.ids, this.coords, x, y, r, this.nodeSize);\n};\n\nvar defaultOptions = {\n minZoom: 0, // min zoom to generate clusters on\n maxZoom: 16, // max zoom level to cluster the points on\n minPoints: 2, // minimum points to form a cluster\n radius: 40, // cluster radius in pixels\n extent: 512, // tile extent (radius is calculated relative to it)\n nodeSize: 64, // size of the KD-tree leaf node, affects performance\n log: false, // whether to log timing info\n\n // whether to generate numeric ids for input features (in vector tiles)\n generateId: false,\n\n // a reduce function for calculating custom cluster properties\n reduce: null, // (accumulated, props) => { accumulated.sum += props.sum; }\n\n // properties to use for individual points when running the reducer\n map: function (props) { return props; } // props => ({sum: props.my_value})\n};\n\nvar fround = Math.fround || (function (tmp) { return (function (x) { tmp[0] = +x; return tmp[0]; }); })(new Float32Array(1));\n\nvar Supercluster = function Supercluster(options) {\n this.options = extend(Object.create(defaultOptions), options);\n this.trees = new Array(this.options.maxZoom + 1);\n};\n\nSupercluster.prototype.load = function load (points) {\n var ref = this.options;\n var log = ref.log;\n var minZoom = ref.minZoom;\n var maxZoom = ref.maxZoom;\n var nodeSize = ref.nodeSize;\n\n if (log) { console.time('total time'); }\n\n var timerId = \"prepare \" + (points.length) + \" points\";\n if (log) { console.time(timerId); }\n\n this.points = points;\n\n // generate a cluster object for each point and index input points into a KD-tree\n var clusters = [];\n for (var i = 0; i < points.length; i++) {\n if (!points[i].geometry) { continue; }\n clusters.push(createPointCluster(points[i], i));\n }\n this.trees[maxZoom + 1] = new KDBush(clusters, getX, getY, nodeSize, Float32Array);\n\n if (log) { console.timeEnd(timerId); }\n\n // cluster points on max zoom, then cluster the results on previous zoom, etc.;\n // results in a cluster hierarchy across zoom levels\n for (var z = maxZoom; z >= minZoom; z--) {\n var now = +Date.now();\n\n // create a new set of clusters for the zoom and index them with a KD-tree\n clusters = this._cluster(clusters, z);\n this.trees[z] = new KDBush(clusters, getX, getY, nodeSize, Float32Array);\n\n if (log) { console.log('z%d: %d clusters in %dms', z, clusters.length, +Date.now() - now); }\n }\n\n if (log) { console.timeEnd('total time'); }\n\n return this;\n};\n\nSupercluster.prototype.getClusters = function getClusters (bbox, zoom) {\n var minLng = ((bbox[0] + 180) % 360 + 360) % 360 - 180;\n var minLat = Math.max(-90, Math.min(90, bbox[1]));\n var maxLng = bbox[2] === 180 ? 180 : ((bbox[2] + 180) % 360 + 360) % 360 - 180;\n var maxLat = Math.max(-90, Math.min(90, bbox[3]));\n\n if (bbox[2] - bbox[0] >= 360) {\n minLng = -180;\n maxLng = 180;\n } else if (minLng > maxLng) {\n var easternHem = this.getClusters([minLng, minLat, 180, maxLat], zoom);\n var westernHem = this.getClusters([-180, minLat, maxLng, maxLat], zoom);\n return easternHem.concat(westernHem);\n }\n\n var tree = this.trees[this._limitZoom(zoom)];\n var ids = tree.range(lngX(minLng), latY(maxLat), lngX(maxLng), latY(minLat));\n var clusters = [];\n for (var i = 0, list = ids; i < list.length; i += 1) {\n var id = list[i];\n\n var c = tree.points[id];\n clusters.push(c.numPoints ? getClusterJSON(c) : this.points[c.index]);\n }\n return clusters;\n};\n\nSupercluster.prototype.getChildren = function getChildren (clusterId) {\n var originId = this._getOriginId(clusterId);\n var originZoom = this._getOriginZoom(clusterId);\n var errorMsg = 'No cluster with the specified id.';\n\n var index = this.trees[originZoom];\n if (!index) { throw new Error(errorMsg); }\n\n var origin = index.points[originId];\n if (!origin) { throw new Error(errorMsg); }\n\n var r = this.options.radius / (this.options.extent * Math.pow(2, originZoom - 1));\n var ids = index.within(origin.x, origin.y, r);\n var children = [];\n for (var i = 0, list = ids; i < list.length; i += 1) {\n var id = list[i];\n\n var c = index.points[id];\n if (c.parentId === clusterId) {\n children.push(c.numPoints ? getClusterJSON(c) : this.points[c.index]);\n }\n }\n\n if (children.length === 0) { throw new Error(errorMsg); }\n\n return children;\n};\n\nSupercluster.prototype.getLeaves = function getLeaves (clusterId, limit, offset) {\n limit = limit || 10;\n offset = offset || 0;\n\n var leaves = [];\n this._appendLeaves(leaves, clusterId, limit, offset, 0);\n\n return leaves;\n};\n\nSupercluster.prototype.getTile = function getTile (z, x, y) {\n var tree = this.trees[this._limitZoom(z)];\n var z2 = Math.pow(2, z);\n var ref = this.options;\n var extent = ref.extent;\n var radius = ref.radius;\n var p = radius / extent;\n var top = (y - p) / z2;\n var bottom = (y + 1 + p) / z2;\n\n var tile = {\n features: []\n };\n\n this._addTileFeatures(\n tree.range((x - p) / z2, top, (x + 1 + p) / z2, bottom),\n tree.points, x, y, z2, tile);\n\n if (x === 0) {\n this._addTileFeatures(\n tree.range(1 - p / z2, top, 1, bottom),\n tree.points, z2, y, z2, tile);\n }\n if (x === z2 - 1) {\n this._addTileFeatures(\n tree.range(0, top, p / z2, bottom),\n tree.points, -1, y, z2, tile);\n }\n\n return tile.features.length ? tile : null;\n};\n\nSupercluster.prototype.getClusterExpansionZoom = function getClusterExpansionZoom (clusterId) {\n var expansionZoom = this._getOriginZoom(clusterId) - 1;\n while (expansionZoom <= this.options.maxZoom) {\n var children = this.getChildren(clusterId);\n expansionZoom++;\n if (children.length !== 1) { break; }\n clusterId = children[0].properties.cluster_id;\n }\n return expansionZoom;\n};\n\nSupercluster.prototype._appendLeaves = function _appendLeaves (result, clusterId, limit, offset, skipped) {\n var children = this.getChildren(clusterId);\n\n for (var i = 0, list = children; i < list.length; i += 1) {\n var child = list[i];\n\n var props = child.properties;\n\n if (props && props.cluster) {\n if (skipped + props.point_count <= offset) {\n // skip the whole cluster\n skipped += props.point_count;\n } else {\n // enter the cluster\n skipped = this._appendLeaves(result, props.cluster_id, limit, offset, skipped);\n // exit the cluster\n }\n } else if (skipped < offset) {\n // skip a single point\n skipped++;\n } else {\n // add a single point\n result.push(child);\n }\n if (result.length === limit) { break; }\n }\n\n return skipped;\n};\n\nSupercluster.prototype._addTileFeatures = function _addTileFeatures (ids, points, x, y, z2, tile) {\n for (var i$1 = 0, list = ids; i$1 < list.length; i$1 += 1) {\n var i = list[i$1];\n\n var c = points[i];\n var isCluster = c.numPoints;\n\n var tags = (void 0), px = (void 0), py = (void 0);\n if (isCluster) {\n tags = getClusterProperties(c);\n px = c.x;\n py = c.y;\n } else {\n var p = this.points[c.index];\n tags = p.properties;\n px = lngX(p.geometry.coordinates[0]);\n py = latY(p.geometry.coordinates[1]);\n }\n\n var f = {\n type: 1,\n geometry: [[\n Math.round(this.options.extent * (px * z2 - x)),\n Math.round(this.options.extent * (py * z2 - y))\n ]],\n tags: tags\n };\n\n // assign id\n var id = (void 0);\n if (isCluster) {\n id = c.id;\n } else if (this.options.generateId) {\n // optionally generate id\n id = c.index;\n } else if (this.points[c.index].id) {\n // keep id if already assigned\n id = this.points[c.index].id;\n }\n\n if (id !== undefined) { f.id = id; }\n\n tile.features.push(f);\n }\n};\n\nSupercluster.prototype._limitZoom = function _limitZoom (z) {\n return Math.max(this.options.minZoom, Math.min(+z, this.options.maxZoom + 1));\n};\n\nSupercluster.prototype._cluster = function _cluster (points, zoom) {\n var clusters = [];\n var ref = this.options;\n var radius = ref.radius;\n var extent = ref.extent;\n var reduce = ref.reduce;\n var minPoints = ref.minPoints;\n var r = radius / (extent * Math.pow(2, zoom));\n\n // loop through each point\n for (var i = 0; i < points.length; i++) {\n var p = points[i];\n // if we've already visited the point at this zoom level, skip it\n if (p.zoom <= zoom) { continue; }\n p.zoom = zoom;\n\n // find all nearby points\n var tree = this.trees[zoom + 1];\n var neighborIds = tree.within(p.x, p.y, r);\n\n var numPointsOrigin = p.numPoints || 1;\n var numPoints = numPointsOrigin;\n\n // count the number of points in a potential cluster\n for (var i$1 = 0, list = neighborIds; i$1 < list.length; i$1 += 1) {\n var neighborId = list[i$1];\n\n var b = tree.points[neighborId];\n // filter out neighbors that are already processed\n if (b.zoom > zoom) { numPoints += b.numPoints || 1; }\n }\n\n // if there were neighbors to merge, and there are enough points to form a cluster\n if (numPoints > numPointsOrigin && numPoints >= minPoints) {\n var wx = p.x * numPointsOrigin;\n var wy = p.y * numPointsOrigin;\n\n var clusterProperties = reduce && numPointsOrigin > 1 ? this._map(p, true) : null;\n\n // encode both zoom and point index on which the cluster originated -- offset by total length of features\n var id = (i << 5) + (zoom + 1) + this.points.length;\n\n for (var i$2 = 0, list$1 = neighborIds; i$2 < list$1.length; i$2 += 1) {\n var neighborId$1 = list$1[i$2];\n\n var b$1 = tree.points[neighborId$1];\n\n if (b$1.zoom <= zoom) { continue; }\n b$1.zoom = zoom; // save the zoom (so it doesn't get processed twice)\n\n var numPoints2 = b$1.numPoints || 1;\n wx += b$1.x * numPoints2; // accumulate coordinates for calculating weighted center\n wy += b$1.y * numPoints2;\n\n b$1.parentId = id;\n\n if (reduce) {\n if (!clusterProperties) { clusterProperties = this._map(p, true); }\n reduce(clusterProperties, this._map(b$1));\n }\n }\n\n p.parentId = id;\n clusters.push(createCluster(wx / numPoints, wy / numPoints, id, numPoints, clusterProperties));\n\n } else { // left points as unclustered\n clusters.push(p);\n\n if (numPoints > 1) {\n for (var i$3 = 0, list$2 = neighborIds; i$3 < list$2.length; i$3 += 1) {\n var neighborId$2 = list$2[i$3];\n\n var b$2 = tree.points[neighborId$2];\n if (b$2.zoom <= zoom) { continue; }\n b$2.zoom = zoom;\n clusters.push(b$2);\n }\n }\n }\n }\n\n return clusters;\n};\n\n// get index of the point from which the cluster originated\nSupercluster.prototype._getOriginId = function _getOriginId (clusterId) {\n return (clusterId - this.points.length) >> 5;\n};\n\n// get zoom of the point from which the cluster originated\nSupercluster.prototype._getOriginZoom = function _getOriginZoom (clusterId) {\n return (clusterId - this.points.length) % 32;\n};\n\nSupercluster.prototype._map = function _map (point, clone) {\n if (point.numPoints) {\n return clone ? extend({}, point.properties) : point.properties;\n }\n var original = this.points[point.index].properties;\n var result = this.options.map(original);\n return clone && result === original ? extend({}, result) : result;\n};\n\nfunction createCluster(x, y, id, numPoints, properties) {\n return {\n x: fround(x), // weighted cluster center; round for consistency with Float32Array index\n y: fround(y),\n zoom: Infinity, // the last zoom the cluster was processed at\n id: id, // encodes index of the first child of the cluster and its zoom level\n parentId: -1, // parent cluster id\n numPoints: numPoints,\n properties: properties\n };\n}\n\nfunction createPointCluster(p, id) {\n var ref = p.geometry.coordinates;\n var x = ref[0];\n var y = ref[1];\n return {\n x: fround(lngX(x)), // projected point coordinates\n y: fround(latY(y)),\n zoom: Infinity, // the last zoom the point was processed at\n index: id, // index of the source feature in the original input array,\n parentId: -1 // parent cluster id\n };\n}\n\nfunction getClusterJSON(cluster) {\n return {\n type: 'Feature',\n id: cluster.id,\n properties: getClusterProperties(cluster),\n geometry: {\n type: 'Point',\n coordinates: [xLng(cluster.x), yLat(cluster.y)]\n }\n };\n}\n\nfunction getClusterProperties(cluster) {\n var count = cluster.numPoints;\n var abbrev =\n count >= 10000 ? ((Math.round(count / 1000)) + \"k\") :\n count >= 1000 ? ((Math.round(count / 100) / 10) + \"k\") : count;\n return extend(extend({}, cluster.properties), {\n cluster: true,\n cluster_id: cluster.id,\n point_count: count,\n point_count_abbreviated: abbrev\n });\n}\n\n// longitude/latitude to spherical mercator in [0..1] range\nfunction lngX(lng) {\n return lng / 360 + 0.5;\n}\nfunction latY(lat) {\n var sin = Math.sin(lat * Math.PI / 180);\n var y = (0.5 - 0.25 * Math.log((1 + sin) / (1 - sin)) / Math.PI);\n return y < 0 ? 0 : y > 1 ? 1 : y;\n}\n\n// spherical mercator to longitude/latitude\nfunction xLng(x) {\n return (x - 0.5) * 360;\n}\nfunction yLat(y) {\n var y2 = (180 - y * 360) * Math.PI / 180;\n return 360 * Math.atan(Math.exp(y2)) / Math.PI - 90;\n}\n\nfunction extend(dest, src) {\n for (var id in src) { dest[id] = src[id]; }\n return dest;\n}\n\nfunction getX(p) {\n return p.x;\n}\nfunction getY(p) {\n return p.y;\n}\n\nreturn Supercluster;\n\n}));\n","import { featureCollection, point } from '@turf/helpers';\nimport clustersKmeans from '@turf/clusters-kmeans';\nimport clustersDbscan from '@turf/clusters-dbscan';\nimport SuperCluster from 'supercluster';\nimport equal from 'fast-deep-equal/es6';\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\r\nfunction __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}\n\n/**\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Cluster {\r\n constructor({ markers, position }) {\r\n this.markers = markers;\r\n if (position) {\r\n if (position instanceof google.maps.LatLng) {\r\n this._position = position;\r\n }\r\n else {\r\n this._position = new google.maps.LatLng(position);\r\n }\r\n }\r\n }\r\n get bounds() {\r\n if (this.markers.length === 0 && !this._position) {\r\n return undefined;\r\n }\r\n return this.markers.reduce((bounds, marker) => {\r\n return bounds.extend(marker.getPosition());\r\n }, new google.maps.LatLngBounds(this._position, this._position));\r\n }\r\n get position() {\r\n return this._position || this.bounds.getCenter();\r\n }\r\n /**\r\n * Get the count of **visible** markers.\r\n */\r\n get count() {\r\n return this.markers.filter((m) => m.getVisible())\r\n .length;\r\n }\r\n /**\r\n * Add a marker to the cluster.\r\n */\r\n push(marker) {\r\n this.markers.push(marker);\r\n }\r\n /**\r\n * Cleanup references and remove marker from map.\r\n */\r\n delete() {\r\n if (this.marker) {\r\n this.marker.setMap(null);\r\n delete this.marker;\r\n }\r\n this.markers.length = 0;\r\n }\r\n}\n\n/**\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst filterMarkersToPaddedViewport = (map, mapCanvasProjection, markers, viewportPadding) => {\r\n const extendedMapBounds = extendBoundsToPaddedViewport(map.getBounds(), mapCanvasProjection, viewportPadding);\r\n return markers.filter((marker) => extendedMapBounds.contains(marker.getPosition()));\r\n};\r\n/**\r\n * Extends a bounds by a number of pixels in each direction.\r\n */\r\nconst extendBoundsToPaddedViewport = (bounds, projection, pixels) => {\r\n const { northEast, southWest } = latLngBoundsToPixelBounds(bounds, projection);\r\n const extendedPixelBounds = extendPixelBounds({ northEast, southWest }, pixels);\r\n return pixelBoundsToLatLngBounds(extendedPixelBounds, projection);\r\n};\r\n/**\r\n * @hidden\r\n */\r\nconst distanceBetweenPoints = (p1, p2) => {\r\n const R = 6371; // Radius of the Earth in km\r\n const dLat = ((p2.lat - p1.lat) * Math.PI) / 180;\r\n const dLon = ((p2.lng - p1.lng) * Math.PI) / 180;\r\n const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +\r\n Math.cos((p1.lat * Math.PI) / 180) *\r\n Math.cos((p2.lat * Math.PI) / 180) *\r\n Math.sin(dLon / 2) *\r\n Math.sin(dLon / 2);\r\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n return R * c;\r\n};\r\n/**\r\n * @hidden\r\n */\r\nconst latLngBoundsToPixelBounds = (bounds, projection) => {\r\n return {\r\n northEast: projection.fromLatLngToDivPixel(bounds.getNorthEast()),\r\n southWest: projection.fromLatLngToDivPixel(bounds.getSouthWest()),\r\n };\r\n};\r\n/**\r\n * @hidden\r\n */\r\nconst extendPixelBounds = ({ northEast, southWest }, pixels) => {\r\n northEast.x += pixels;\r\n northEast.y -= pixels;\r\n southWest.x -= pixels;\r\n southWest.y += pixels;\r\n return { northEast, southWest };\r\n};\r\n/**\r\n * @hidden\r\n */\r\nconst pixelBoundsToLatLngBounds = ({ northEast, southWest }, projection) => {\r\n const bounds = new google.maps.LatLngBounds();\r\n bounds.extend(projection.fromDivPixelToLatLng(northEast));\r\n bounds.extend(projection.fromDivPixelToLatLng(southWest));\r\n return bounds;\r\n};\n\n/**\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @hidden\r\n */\r\nclass AbstractAlgorithm {\r\n constructor({ maxZoom = 16 }) {\r\n this.maxZoom = maxZoom;\r\n }\r\n /**\r\n * Helper function to bypass clustering based upon some map state such as\r\n * zoom, number of markers, etc.\r\n *\r\n * ```typescript\r\n * cluster({markers, map}: AlgorithmInput): Cluster[] {\r\n * if (shouldBypassClustering(map)) {\r\n * return this.noop({markers, map})\r\n * }\r\n * }\r\n * ```\r\n */\r\n noop({ markers }) {\r\n return noop(markers);\r\n }\r\n}\r\n/**\r\n * Abstract viewport algorithm proves a class to filter markers by a padded\r\n * viewport. This is a common optimization.\r\n *\r\n * @hidden\r\n */\r\nclass AbstractViewportAlgorithm extends AbstractAlgorithm {\r\n constructor(_a) {\r\n var { viewportPadding = 60 } = _a, options = __rest(_a, [\"viewportPadding\"]);\r\n super(options);\r\n this.viewportPadding = 60;\r\n this.viewportPadding = viewportPadding;\r\n }\r\n calculate({ markers, map, mapCanvasProjection, }) {\r\n if (map.getZoom() >= this.maxZoom) {\r\n return {\r\n clusters: this.noop({\r\n markers,\r\n map,\r\n mapCanvasProjection,\r\n }),\r\n changed: false,\r\n };\r\n }\r\n return {\r\n clusters: this.cluster({\r\n markers: filterMarkersToPaddedViewport(map, mapCanvasProjection, markers, this.viewportPadding),\r\n map,\r\n mapCanvasProjection,\r\n }),\r\n };\r\n }\r\n}\r\n/**\r\n * @hidden\r\n */\r\nconst noop = (markers) => {\r\n const clusters = markers.map((marker) => new Cluster({\r\n position: marker.getPosition(),\r\n markers: [marker],\r\n }));\r\n return clusters;\r\n};\n\n/**\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The default Grid algorithm historically used in Google Maps marker\r\n * clustering.\r\n *\r\n * The Grid algorithm does not implement caching and markers may flash as the\r\n * viewport changes. Instead use {@link SuperClusterAlgorithm}.\r\n */\r\nclass GridAlgorithm extends AbstractViewportAlgorithm {\r\n constructor(_a) {\r\n var { maxDistance = 40000, gridSize = 40 } = _a, options = __rest(_a, [\"maxDistance\", \"gridSize\"]);\r\n super(options);\r\n this.clusters = [];\r\n this.maxDistance = maxDistance;\r\n this.gridSize = gridSize;\r\n }\r\n cluster({ markers, map, mapCanvasProjection, }) {\r\n this.clusters = [];\r\n markers.forEach((marker) => {\r\n this.addToClosestCluster(marker, map, mapCanvasProjection);\r\n });\r\n return this.clusters;\r\n }\r\n addToClosestCluster(marker, map, projection) {\r\n let maxDistance = this.maxDistance; // Some large number\r\n let cluster = null;\r\n for (let i = 0; i < this.clusters.length; i++) {\r\n const candidate = this.clusters[i];\r\n const distance = distanceBetweenPoints(candidate.bounds.getCenter().toJSON(), marker.getPosition().toJSON());\r\n if (distance < maxDistance) {\r\n maxDistance = distance;\r\n cluster = candidate;\r\n }\r\n }\r\n if (cluster &&\r\n extendBoundsToPaddedViewport(cluster.bounds, projection, this.gridSize).contains(marker.getPosition())) {\r\n cluster.push(marker);\r\n }\r\n else {\r\n const cluster = new Cluster({ markers: [marker] });\r\n this.clusters.push(cluster);\r\n }\r\n }\r\n}\n\n/**\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Noop algorithm does not generate any clusters or filter markers by the an extended viewport.\r\n */\r\nclass NoopAlgorithm extends AbstractAlgorithm {\r\n constructor(_a) {\r\n var options = __rest(_a, []);\r\n super(options);\r\n }\r\n calculate({ markers, map, mapCanvasProjection, }) {\r\n return {\r\n clusters: this.cluster({ markers, map, mapCanvasProjection }),\r\n changed: false,\r\n };\r\n }\r\n cluster(input) {\r\n return this.noop(input);\r\n }\r\n}\n\n/**\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Experimental algorithm using Kmeans.\r\n *\r\n * The Grid algorithm does not implement caching and markers may flash as the\r\n * viewport changes. Instead use {@link SuperClusterAlgorithm}.\r\n *\r\n * @see https://www.npmjs.com/package/@turf/clusters-kmeans\r\n */\r\nclass KmeansAlgorithm extends AbstractViewportAlgorithm {\r\n constructor(_a) {\r\n var { numberOfClusters } = _a, options = __rest(_a, [\"numberOfClusters\"]);\r\n super(options);\r\n this.numberOfClusters = numberOfClusters;\r\n }\r\n cluster({ markers, map }) {\r\n const clusters = [];\r\n if (markers.length === 0) {\r\n return clusters;\r\n }\r\n const points = featureCollection(markers.map((marker) => {\r\n return point([marker.getPosition().lng(), marker.getPosition().lat()]);\r\n }));\r\n let numberOfClusters;\r\n if (this.numberOfClusters instanceof Function) {\r\n numberOfClusters = this.numberOfClusters(markers.length, map.getZoom());\r\n }\r\n else {\r\n numberOfClusters = this.numberOfClusters;\r\n }\r\n clustersKmeans(points, { numberOfClusters }).features.forEach((point, i) => {\r\n if (!clusters[point.properties.cluster]) {\r\n clusters[point.properties.cluster] = new Cluster({\r\n position: {\r\n lng: point.properties.centroid[0],\r\n lat: point.properties.centroid[1],\r\n },\r\n markers: [],\r\n });\r\n }\r\n clusters[point.properties.cluster].push(markers[i]);\r\n });\r\n return clusters;\r\n }\r\n}\n\n/**\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DEFAULT_INTERNAL_DBSCAN_OPTION = {\r\n units: \"kilometers\",\r\n mutate: false,\r\n minPoints: 1,\r\n};\r\n/**\r\n *\r\n * **This algorithm is not yet ready for use!**\r\n *\r\n * Experimental algorithm using DBScan.\r\n *\r\n * The Grid algorithm does not implement caching and markers may flash as the\r\n * viewport changes. Instead use {@link SuperClusterAlgorithm}.\r\n *\r\n * @see https://www.npmjs.com/package/@turf/clusters-dbscan\r\n */\r\nclass DBScanAlgorithm extends AbstractViewportAlgorithm {\r\n constructor(_a) {\r\n var { maxDistance = 200, minPoints = DEFAULT_INTERNAL_DBSCAN_OPTION.minPoints } = _a, options = __rest(_a, [\"maxDistance\", \"minPoints\"]);\r\n super(options);\r\n this.maxDistance = maxDistance;\r\n this.options = Object.assign(Object.assign({}, DEFAULT_INTERNAL_DBSCAN_OPTION), { minPoints });\r\n }\r\n cluster({ markers, mapCanvasProjection, }) {\r\n const points = featureCollection(markers.map((marker) => {\r\n const projectedPoint = mapCanvasProjection.fromLatLngToContainerPixel(marker.getPosition());\r\n return point([projectedPoint.x, projectedPoint.y]);\r\n }));\r\n const grouped = [];\r\n clustersDbscan(points, this.maxDistance, this.options).features.forEach((point, i) => {\r\n if (!grouped[point.properties.cluster]) {\r\n grouped[point.properties.cluster] = [];\r\n }\r\n grouped[point.properties.cluster].push(markers[i]);\r\n });\r\n return grouped.map((markers) => new Cluster({ markers }));\r\n }\r\n}\n\n/**\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A very fast JavaScript algorithm for geospatial point clustering using KD trees.\r\n *\r\n * @see https://www.npmjs.com/package/supercluster for more information on options.\r\n */\r\nclass SuperClusterAlgorithm extends AbstractAlgorithm {\r\n constructor(_a) {\r\n var { maxZoom, radius = 60 } = _a, options = __rest(_a, [\"maxZoom\", \"radius\"]);\r\n super({ maxZoom });\r\n this.superCluster = new SuperCluster(Object.assign({ maxZoom: this.maxZoom, radius }, options));\r\n this.state = { zoom: null };\r\n }\r\n calculate(input) {\r\n let changed = false;\r\n if (!equal(input.markers, this.markers)) {\r\n changed = true;\r\n // TODO use proxy to avoid copy?\r\n this.markers = [...input.markers];\r\n const points = this.markers.map((marker) => {\r\n return {\r\n type: \"Feature\",\r\n geometry: {\r\n type: \"Point\",\r\n coordinates: [\r\n marker.getPosition().lng(),\r\n marker.getPosition().lat(),\r\n ],\r\n },\r\n properties: { marker },\r\n };\r\n });\r\n this.superCluster.load(points);\r\n }\r\n const state = { zoom: input.map.getZoom() };\r\n if (!changed) {\r\n if (this.state.zoom > this.maxZoom && state.zoom > this.maxZoom) ;\r\n else {\r\n changed = changed || !equal(this.state, state);\r\n }\r\n }\r\n this.state = state;\r\n if (changed) {\r\n this.clusters = this.cluster(input);\r\n }\r\n return { clusters: this.clusters, changed };\r\n }\r\n cluster({ map }) {\r\n return this.superCluster\r\n .getClusters([-180, -90, 180, 90], map.getZoom())\r\n .map(this.transformCluster.bind(this));\r\n }\r\n transformCluster({ geometry: { coordinates: [lng, lat], }, properties, }) {\r\n if (properties.cluster) {\r\n return new Cluster({\r\n markers: this.superCluster\r\n .getLeaves(properties.cluster_id, Infinity)\r\n .map((leaf) => leaf.properties.marker),\r\n position: new google.maps.LatLng({ lat, lng }),\r\n });\r\n }\r\n else {\r\n const marker = properties.marker;\r\n return new Cluster({\r\n markers: [marker],\r\n position: marker.getPosition(),\r\n });\r\n }\r\n }\r\n}\n\n/**\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provides statistics on all clusters in the current render cycle for use in {@link Renderer.render}.\r\n */\r\nclass ClusterStats {\r\n constructor(markers, clusters) {\r\n this.markers = { sum: markers.length };\r\n const clusterMarkerCounts = clusters.map((a) => a.count);\r\n const clusterMarkerSum = clusterMarkerCounts.reduce((a, b) => a + b, 0);\r\n this.clusters = {\r\n count: clusters.length,\r\n markers: {\r\n mean: clusterMarkerSum / clusters.length,\r\n sum: clusterMarkerSum,\r\n min: Math.min(...clusterMarkerCounts),\r\n max: Math.max(...clusterMarkerCounts),\r\n },\r\n };\r\n }\r\n}\r\nclass DefaultRenderer {\r\n /**\r\n * The default render function for the library used by {@link MarkerClusterer}.\r\n *\r\n * Currently set to use the following:\r\n *\r\n * ```typescript\r\n * // change color if this cluster has more markers than the mean cluster\r\n * const color =\r\n * count > Math.max(10, stats.clusters.markers.mean)\r\n * ? \"#ff0000\"\r\n * : \"#0000ff\";\r\n *\r\n * // create svg url with fill color\r\n * const svg = window.btoa(`\r\n * \r\n * \r\n * \r\n * \r\n * \r\n * `);\r\n *\r\n * // create marker using svg icon\r\n * return new google.maps.Marker({\r\n * position,\r\n * icon: {\r\n * url: `data:image/svg+xml;base64,${svg}`,\r\n * scaledSize: new google.maps.Size(45, 45),\r\n * },\r\n * label: {\r\n * text: String(count),\r\n * color: \"rgba(255,255,255,0.9)\",\r\n * fontSize: \"12px\",\r\n * },\r\n * // adjust zIndex to be above other markers\r\n * zIndex: 1000 + count,\r\n * });\r\n * ```\r\n */\r\n render({ count, position }, stats) {\r\n // change color if this cluster has more markers than the mean cluster\r\n const color = count > Math.max(10, stats.clusters.markers.mean) ? \"#ff0000\" : \"#0000ff\";\r\n // create svg url with fill color\r\n const svg = window.btoa(`\n \n \n \n \n `);\r\n // create marker using svg icon\r\n return new google.maps.Marker({\r\n position,\r\n icon: {\r\n url: `data:image/svg+xml;base64,${svg}`,\r\n scaledSize: new google.maps.Size(45, 45),\r\n },\r\n label: {\r\n text: String(count),\r\n color: \"rgba(255,255,255,0.9)\",\r\n fontSize: \"12px\",\r\n },\r\n // adjust zIndex to be above other markers\r\n zIndex: Number(google.maps.Marker.MAX_ZINDEX) + count,\r\n });\r\n }\r\n}\n\n/**\r\n * Copyright 2019 Google LLC. All Rights Reserved.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Extends an object's prototype by another's.\r\n *\r\n * @param type1 The Type to be extended.\r\n * @param type2 The Type to extend with.\r\n * @ignore\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction extend(type1, type2) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line prefer-const\r\n for (let property in type2.prototype) {\r\n type1.prototype[property] = type2.prototype[property];\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass OverlayViewSafe {\r\n constructor() {\r\n // MarkerClusterer implements google.maps.OverlayView interface. We use the\r\n // extend function to extend MarkerClusterer with google.maps.OverlayView\r\n // because it might not always be available when the code is defined so we\r\n // look for it at the last possible moment. If it doesn't exist now then\r\n // there is no point going ahead :)\r\n extend(OverlayViewSafe, google.maps.OverlayView);\r\n }\r\n}\n\n/**\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar MarkerClustererEvents;\r\n(function (MarkerClustererEvents) {\r\n MarkerClustererEvents[\"CLUSTERING_BEGIN\"] = \"clusteringbegin\";\r\n MarkerClustererEvents[\"CLUSTERING_END\"] = \"clusteringend\";\r\n MarkerClustererEvents[\"CLUSTER_CLICK\"] = \"click\";\r\n})(MarkerClustererEvents || (MarkerClustererEvents = {}));\r\nconst defaultOnClusterClickHandler = (_, cluster, map) => {\r\n map.fitBounds(cluster.bounds);\r\n};\r\n/**\r\n * MarkerClusterer creates and manages per-zoom-level clusters for large amounts\r\n * of markers. See {@link MarkerClustererOptions} for more details.\r\n *\r\n * \r\n */\r\nclass MarkerClusterer extends OverlayViewSafe {\r\n constructor({ map, markers = [], algorithm = new SuperClusterAlgorithm({}), renderer = new DefaultRenderer(), onClusterClick = defaultOnClusterClickHandler, }) {\r\n super();\r\n this.markers = [...markers];\r\n this.clusters = [];\r\n this.algorithm = algorithm;\r\n this.renderer = renderer;\r\n this.onClusterClick = onClusterClick;\r\n if (map) {\r\n this.setMap(map);\r\n }\r\n }\r\n addMarker(marker, noDraw) {\r\n if (this.markers.includes(marker)) {\r\n return;\r\n }\r\n this.markers.push(marker);\r\n if (!noDraw) {\r\n this.render();\r\n }\r\n }\r\n addMarkers(markers, noDraw) {\r\n markers.forEach((marker) => {\r\n this.addMarker(marker, true);\r\n });\r\n if (!noDraw) {\r\n this.render();\r\n }\r\n }\r\n removeMarker(marker, noDraw) {\r\n const index = this.markers.indexOf(marker);\r\n if (index === -1) {\r\n // Marker is not in our list of markers, so do nothing:\r\n return false;\r\n }\r\n marker.setMap(null);\r\n this.markers.splice(index, 1); // Remove the marker from the list of managed markers\r\n if (!noDraw) {\r\n this.render();\r\n }\r\n return true;\r\n }\r\n removeMarkers(markers, noDraw) {\r\n let removed = false;\r\n markers.forEach((marker) => {\r\n removed = this.removeMarker(marker, true) || removed;\r\n });\r\n if (removed && !noDraw) {\r\n this.render();\r\n }\r\n return removed;\r\n }\r\n clearMarkers(noDraw) {\r\n this.markers.length = 0;\r\n if (!noDraw) {\r\n this.render();\r\n }\r\n }\r\n /**\r\n * Recalculates and draws all the marker clusters.\r\n */\r\n render() {\r\n const map = this.getMap();\r\n if (map instanceof google.maps.Map && this.getProjection()) {\r\n google.maps.event.trigger(this, MarkerClustererEvents.CLUSTERING_BEGIN, this);\r\n const { clusters, changed } = this.algorithm.calculate({\r\n markers: this.markers,\r\n map,\r\n mapCanvasProjection: this.getProjection(),\r\n });\r\n // allow algorithms to return flag on whether the clusters/markers have changed\r\n if (changed || changed == undefined) {\r\n // reset visibility of markers and clusters\r\n this.reset();\r\n // store new clusters\r\n this.clusters = clusters;\r\n this.renderClusters();\r\n }\r\n google.maps.event.trigger(this, MarkerClustererEvents.CLUSTERING_END, this);\r\n }\r\n }\r\n onAdd() {\r\n this.idleListener = this.getMap().addListener(\"idle\", this.render.bind(this));\r\n this.render();\r\n }\r\n onRemove() {\r\n google.maps.event.removeListener(this.idleListener);\r\n this.reset();\r\n }\r\n reset() {\r\n this.markers.forEach((marker) => marker.setMap(null));\r\n this.clusters.forEach((cluster) => cluster.delete());\r\n this.clusters = [];\r\n }\r\n renderClusters() {\r\n // generate stats to pass to renderers\r\n const stats = new ClusterStats(this.markers, this.clusters);\r\n const map = this.getMap();\r\n this.clusters.forEach((cluster) => {\r\n if (cluster.markers.length === 1) {\r\n cluster.marker = cluster.markers[0];\r\n }\r\n else {\r\n cluster.marker = this.renderer.render(cluster, stats);\r\n if (this.onClusterClick) {\r\n cluster.marker.addListener(\"click\", \r\n /* istanbul ignore next */\r\n (event) => {\r\n google.maps.event.trigger(this, MarkerClustererEvents.CLUSTER_CLICK, cluster);\r\n this.onClusterClick(event, cluster, map);\r\n });\r\n }\r\n }\r\n cluster.marker.setMap(map);\r\n });\r\n }\r\n}\n\nexport { AbstractAlgorithm, AbstractViewportAlgorithm, Cluster, ClusterStats, DBScanAlgorithm, DefaultRenderer, GridAlgorithm, KmeansAlgorithm, MarkerClusterer, MarkerClustererEvents, NoopAlgorithm, SuperClusterAlgorithm, defaultOnClusterClickHandler, distanceBetweenPoints, extendBoundsToPaddedViewport, extendPixelBounds, filterMarkersToPaddedViewport, noop, pixelBoundsToLatLngBounds };\n//# sourceMappingURL=index.esm.js.map\n","/* global google */\nimport * as React from 'react'\nimport * as ReactDOM from 'react-dom'\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\nimport invariant from 'invariant'\n\nconst eventMap = {\n onCloseClick: 'closeclick',\n onContentChanged: 'content_changed',\n onDomReady: 'domready',\n onPositionChanged: 'position_changed',\n onZindexChanged: 'zindex_changed',\n}\n\nconst updaterMap = {\n options(instance: google.maps.InfoWindow, options: google.maps.InfoWindowOptions): void {\n instance.setOptions(options)\n },\n position(\n instance: google.maps.InfoWindow,\n position: google.maps.LatLng | google.maps.LatLngLiteral\n ): void {\n instance.setPosition(position)\n },\n zIndex(instance: google.maps.InfoWindow, zIndex: number): void {\n instance.setZIndex(zIndex)\n },\n}\n\ninterface InfoWindowState {\n infoWindow: google.maps.InfoWindow | null\n}\n\nexport interface InfoWindowProps {\n /** Can be any MVCObject that exposes a LatLng position property and optionally a Point anchorPoint property for calculating the pixelOffset. The anchorPoint is the offset from the anchor's position to the tip of the InfoWindow. */\n anchor?: google.maps.MVCObject\n options?: google.maps.InfoWindowOptions\n /** The LatLng at which to display this InfoWindow. If the InfoWindow is opened with an anchor, the anchor's position will be used instead. */\n position?: google.maps.LatLng | google.maps.LatLngLiteral\n /** All InfoWindows are displayed on the map in order of their zIndex, with higher values displaying in front of InfoWindows with lower values. By default, InfoWindows are displayed according to their latitude, with InfoWindows of lower latitudes appearing in front of InfoWindows at higher latitudes. InfoWindows are always displayed in front of markers. */\n zIndex?: number\n /** This event is fired when the close button was clicked. */\n onCloseClick?: () => void\n /** This event is fired when the
containing the InfoWindow's content is attached to the DOM. You may wish to monitor this event if you are building out your info window content dynamically. */\n onDomReady?: () => void\n /** This event is fired when the content property changes. */\n onContentChanged?: () => void\n /** This event is fired when the position property changes. */\n onPositionChanged?: () => void\n /** This event is fired when the InfoWindow's zIndex changes. */\n onZindexChanged?: () => void\n /** This callback is called when the infoWindow instance has loaded. It is called with the infoWindow instance. */\n onLoad?: (infoWindow: google.maps.InfoWindow) => void\n /** This callback is called when the component unmounts. It is called with the infoWindow instance. */\n onUnmount?: (infoWindow: google.maps.InfoWindow) => void\n}\n\nexport class InfoWindow extends React.PureComponent {\n static contextType = MapContext\n\n registeredEvents: google.maps.MapsEventListener[] = []\n containerElement: HTMLElement | null = null\n\n state: InfoWindowState = {\n infoWindow: null,\n }\n\n open = (infoWindow: google.maps.InfoWindow, anchor?: google.maps.MVCObject): void => {\n if (anchor) {\n infoWindow.open(this.context, anchor)\n } else if (infoWindow.getPosition()) {\n infoWindow.open(this.context)\n } else {\n invariant(\n false,\n `You must provide either an anchor (typically render it inside a ) or a position props for .`\n )\n }\n }\n\n setInfoWindowCallback = (): void => {\n if (this.state.infoWindow !== null && this.containerElement !== null) {\n this.state.infoWindow.setContent(this.containerElement)\n\n this.open(this.state.infoWindow, this.props.anchor)\n\n if (this.props.onLoad) {\n this.props.onLoad(this.state.infoWindow)\n }\n }\n }\n\n componentDidMount(): void {\n const infoWindow = new google.maps.InfoWindow({\n ...(this.props.options || {}),\n })\n\n this.containerElement = document.createElement('div')\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: infoWindow,\n })\n\n this.setState(function setInfoWindow() {\n return {\n infoWindow,\n }\n }, this.setInfoWindowCallback)\n }\n\n componentDidUpdate(prevProps: InfoWindowProps): void {\n if (this.state.infoWindow !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.infoWindow,\n })\n }\n }\n\n componentWillUnmount(): void {\n if (this.state.infoWindow !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.state.infoWindow.close()\n }\n }\n\n render(): React.ReactPortal | React.ReactNode {\n return this.containerElement ? (\n ReactDOM.createPortal(React.Children.only(this.props.children), this.containerElement)\n ) : (\n <>\n )\n }\n}\n\nexport default InfoWindow\n","import * as React from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onClick: 'click',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMouseDown: 'mousedown',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick',\n}\n\nconst updaterMap = {\n draggable(instance: google.maps.Polyline, draggable: boolean): void {\n instance.setDraggable(draggable)\n },\n editable(instance: google.maps.Polyline, editable: boolean): void {\n instance.setEditable(editable)\n },\n map(instance: google.maps.Polyline, map: google.maps.Map): void {\n instance.setMap(map)\n },\n options(instance: google.maps.Polyline, options: google.maps.PolylineOptions): void {\n instance.setOptions(options)\n },\n path(\n instance: google.maps.Polyline,\n path:\n | google.maps.MVCArray\n | google.maps.LatLng[]\n | google.maps.LatLngLiteral[]\n ): void {\n instance.setPath(path)\n },\n visible(instance: google.maps.Polyline, visible: boolean): void {\n instance.setVisible(visible)\n },\n}\n\ninterface PolylineState {\n polyline: google.maps.Polyline | null\n}\n\nexport interface PolylineProps {\n options?: google.maps.PolylineOptions\n /** If set to true, the user can drag this shape over the map. The geodesic property defines the mode of dragging. */\n draggable?: boolean\n /** If set to true, the user can edit this shape by dragging the control points shown at the vertices and on each segment. */\n editable?: boolean\n /** Hides this poly if set to false. */\n visible?: boolean\n /** Sets the path. The ordered sequence of coordinates of the Polyline. This path may be specified using either a simple array of LatLngs, or an MVCArray of LatLngs. Note that if you pass a simple array, it will be converted to an MVCArray Inserting or removing LatLngs in the MVCArray will automatically update the polyline on the map. */\n path?:\n | google.maps.MVCArray\n | google.maps.LatLng[]\n | google.maps.LatLngLiteral[]\n /** This event is fired when the DOM dblclick event is fired on the Polyline. */\n onDblClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the user stops dragging the polyline. */\n onDragEnd?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the user starts dragging the polyline. */\n onDragStart?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the DOM mousedown event is fired on the Polyline. */\n onMouseDown?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the DOM mousemove event is fired on the Polyline. */\n onMouseMove?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired on Polyline mouseout. */\n onMouseOut?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired on Polyline mouseover. */\n onMouseOver?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the DOM mouseup event is fired on the Polyline. */\n onMouseUp?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the Polyline is right-clicked on. */\n onRightClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the DOM click event is fired on the Polyline. */\n onClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is repeatedly fired while the user drags the polyline. */\n onDrag?: (e: google.maps.MapMouseEvent) => void\n /** This callback is called when the polyline instance has loaded. It is called with the polyline instance. */\n onLoad?: (polyline: google.maps.Polyline) => void\n /** This callback is called when the component unmounts. It is called with the polyline instance. */\n onUnmount?: (polyline: google.maps.Polyline) => void\n}\n\nexport class Polyline extends React.PureComponent {\n static contextType = MapContext\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n state: PolylineState = {\n polyline: null,\n }\n\n setPolylineCallback = (): void => {\n if (this.state.polyline !== null && this.props.onLoad) {\n this.props.onLoad(this.state.polyline)\n }\n }\n\n componentDidMount(): void {\n const polyline = new google.maps.Polyline({\n ...(this.props.options || {}),\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: polyline,\n })\n\n this.setState(function setPolyline() {\n return {\n polyline,\n }\n }, this.setPolylineCallback)\n }\n\n componentDidUpdate(prevProps: PolylineProps): void {\n if (this.state.polyline !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.polyline,\n })\n }\n }\n\n componentWillUnmount(): void {\n if (this.state.polyline !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.polyline)\n }\n\n unregisterEvents(this.registeredEvents)\n\n this.state.polyline.setMap(null)\n }\n }\n\n render(): React.ReactNode {\n return <>\n }\n}\n\nexport default Polyline\n","/* global google */\nimport * as React from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onClick: 'click',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMouseDown: 'mousedown',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick',\n}\n\nconst updaterMap = {\n draggable(instance: google.maps.Polygon, draggable: boolean): void {\n instance.setDraggable(draggable)\n },\n editable(instance: google.maps.Polygon, editable: boolean): void {\n instance.setEditable(editable)\n },\n map(instance: google.maps.Polygon, map: google.maps.Map): void {\n instance.setMap(map)\n },\n options(instance: google.maps.Polygon, options: google.maps.PolygonOptions): void {\n instance.setOptions(options)\n },\n path(\n instance: google.maps.Polygon,\n path:\n | google.maps.MVCArray\n | google.maps.LatLng[]\n | google.maps.LatLngLiteral[]\n ): void {\n instance.setPath(path)\n },\n\n paths(\n instance: google.maps.Polygon,\n paths:\n | google.maps.MVCArray\n | google.maps.MVCArray>\n | google.maps.LatLng[]\n | google.maps.LatLng[][]\n | google.maps.LatLngLiteral[]\n | google.maps.LatLngLiteral[][]\n ): void {\n instance.setPaths(paths)\n },\n\n visible(instance: google.maps.Polygon, visible: boolean): void {\n instance.setVisible(visible)\n },\n}\n\ninterface PolygonState {\n polygon: google.maps.Polygon | null\n}\n\nexport interface PolygonProps {\n options?: google.maps.PolygonOptions\n /** If set to true, the user can drag this shape over the map. The geodesic property defines the mode of dragging. */\n draggable?: boolean\n /** If set to true, the user can edit this shape by dragging the control points shown at the vertices and on each segment. */\n editable?: boolean\n /** Hides this poly if set to false. */\n visible?: boolean\n /** Sets the first path. See Paths for more details. */\n path?:\n | google.maps.MVCArray\n | google.maps.LatLng[]\n | google.maps.LatLngLiteral[]\n /** Sets the path for this polygon. The ordered sequence of coordinates that designates a closed loop. Unlike polylines, a polygon may consist of one or more paths. As a result, the paths property may specify one or more arrays of LatLng coordinates. Paths are closed automatically; do not repeat the first vertex of the path as the last vertex. Simple polygons may be defined using a single array of LatLngs. More complex polygons may specify an array of arrays. Any simple arrays are converted into MVCArrays. Inserting or removing LatLngs from the MVCArray will automatically update the polygon on the map. */\n paths?:\n | google.maps.MVCArray\n | google.maps.MVCArray>\n | google.maps.LatLng[]\n | google.maps.LatLng[][]\n | google.maps.LatLngLiteral[]\n | google.maps.LatLngLiteral[][]\n /** This event is fired when the DOM dblclick event is fired on the Polygon. */\n onDblClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the user stops dragging the polygon. */\n onDragEnd?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the user starts dragging the polygon. */\n onDragStart?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the DOM mousedown event is fired on the Polygon. */\n onMouseDown?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the DOM mousemove event is fired on the Polygon. */\n onMouseMove?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired on Polygon mouseout. */\n onMouseOut?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired on Polygon mouseover. */\n onMouseOver?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the DOM mouseup event is fired on the Polygon. */\n onMouseUp?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the Polygon is right-clicked on. */\n onRightClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the DOM click event is fired on the Polygon. */\n onClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is repeatedly fired while the user drags the polygon. */\n onDrag?: (e: google.maps.MapMouseEvent) => void\n /** This callback is called when the polygon instance has loaded. It is called with the polygon instance. */\n onLoad?: (polygon: google.maps.Polygon) => void\n /** This callback is called when the component unmounts. It is called with the polygon instance. */\n onUnmount?: (polygon: google.maps.Polygon) => void\n}\n\nexport class Polygon extends React.PureComponent {\n static contextType = MapContext\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n state: PolygonState = {\n polygon: null,\n }\n\n setPolygonCallback = (): void => {\n if (this.state.polygon !== null && this.props.onLoad) {\n this.props.onLoad(this.state.polygon)\n }\n }\n\n componentDidMount(): void {\n const polygon = new google.maps.Polygon({\n ...(this.props.options || {}),\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: polygon,\n })\n\n this.setState(function setPolygon() {\n return {\n polygon,\n }\n }, this.setPolygonCallback)\n }\n\n componentDidUpdate(prevProps: PolygonProps): void {\n if (this.state.polygon !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.polygon,\n })\n }\n }\n\n componentWillUnmount(): void {\n if (this.state.polygon !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.polygon)\n }\n\n unregisterEvents(this.registeredEvents)\n\n this.state.polygon && this.state.polygon.setMap(null)\n }\n }\n\n render(): React.ReactNode {\n return null\n }\n}\n\nexport default Polygon\n","import * as React from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onBoundsChanged: 'bounds_changed',\n onClick: 'click',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMouseDown: 'mousedown',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick',\n}\n\nconst updaterMap = {\n bounds(\n instance: google.maps.Rectangle,\n bounds: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral\n ): void {\n instance.setBounds(bounds)\n },\n draggable(instance: google.maps.Rectangle, draggable: boolean): void {\n instance.setDraggable(draggable)\n },\n editable(instance: google.maps.Rectangle, editable: boolean): void {\n instance.setEditable(editable)\n },\n map(instance: google.maps.Rectangle, map: google.maps.Map): void {\n instance.setMap(map)\n },\n options(instance: google.maps.Rectangle, options: google.maps.RectangleOptions): void {\n instance.setOptions(options)\n },\n visible(instance: google.maps.Rectangle, visible: boolean): void {\n instance.setVisible(visible)\n },\n}\n\ninterface RectangleState {\n rectangle: google.maps.Rectangle | null\n}\n\nexport interface RectangleProps {\n options?: google.maps.RectangleOptions\n /** Sets the bounds of this rectangle. */\n bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral\n /** If set to true, the user can drag this rectangle over the map. */\n draggable?: boolean\n /** If set to true, the user can edit this rectangle by dragging the control points shown at the corners and on each edge. */\n editable?: boolean\n /** Hides this rectangle if set to false. */\n visible?: boolean\n /** Indicates whether this Rectangle handles mouse events. Defaults to true. */\n clickable?: boolean\n /** This event is fired when the DOM dblclick event is fired on the rectangle. */\n onDblClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the user stops dragging the rectangle. */\n onDragEnd?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the user starts dragging the rectangle. */\n onDragStart?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the DOM mousedown event is fired on the rectangle. */\n onMouseDown?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the DOM mousemove event is fired on the rectangle. */\n onMouseMove?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired on rectangle mouseout. */\n onMouseOut?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired on rectangle mouseover. */\n onMouseOver?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the DOM mouseup event is fired on the rectangle. */\n onMouseUp?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the rectangle is right-clicked on. */\n onRightClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the DOM click event is fired on the rectangle. */\n onClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is repeatedly fired while the user drags the rectangle. */\n onDrag?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the rectangle's bounds are changed. */\n onBoundsChanged?: () => void\n /** This callback is called when the rectangle instance has loaded. It is called with the rectangle instance. */\n onLoad?: (rectangle: google.maps.Rectangle) => void\n /** This callback is called when the component unmounts. It is called with the rectangle instance. */\n onUnmount?: (rectangle: google.maps.Rectangle) => void\n}\n\nexport class Rectangle extends React.PureComponent {\n static contextType = MapContext\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n state: RectangleState = {\n rectangle: null,\n }\n\n setRectangleCallback = (): void => {\n if (this.state.rectangle !== null && this.props.onLoad) {\n this.props.onLoad(this.state.rectangle)\n }\n }\n\n componentDidMount(): void {\n const rectangle = new google.maps.Rectangle({\n ...(this.props.options || {}),\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: rectangle,\n })\n\n this.setState(function setRectangle() {\n return {\n rectangle,\n }\n }, this.setRectangleCallback)\n }\n\n componentDidUpdate(prevProps: RectangleProps): void {\n if (this.state.rectangle !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.rectangle,\n })\n }\n }\n\n componentWillUnmount(): void {\n if (this.state.rectangle !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.rectangle)\n }\n\n unregisterEvents(this.registeredEvents)\n\n this.state.rectangle.setMap(null)\n }\n }\n\n render(): React.ReactNode {\n return <>\n }\n}\n\nexport default Rectangle\n","import * as React from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onCenterChanged: 'center_changed',\n onClick: 'click',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMouseDown: 'mousedown',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRadiusChanged: 'radius_changed',\n onRightClick: 'rightclick',\n}\n\nconst updaterMap = {\n center(instance: google.maps.Circle, center: google.maps.LatLng): void {\n instance.setCenter(center)\n },\n draggable(instance: google.maps.Circle, draggable: boolean): void {\n instance.setDraggable(draggable)\n },\n editable(instance: google.maps.Circle, editable: boolean): void {\n instance.setEditable(editable)\n },\n map(instance: google.maps.Circle, map: google.maps.Map): void {\n instance.setMap(map)\n },\n options(instance: google.maps.Circle, options: google.maps.CircleOptions): void {\n instance.setOptions(options)\n },\n radius(instance: google.maps.Circle, radius: number): void {\n instance.setRadius(radius)\n },\n visible(instance: google.maps.Circle, visible: boolean): void {\n instance.setVisible(visible)\n },\n}\n\ninterface CircleState {\n circle: google.maps.Circle | null\n}\n\nexport interface CircleProps {\n options?: google.maps.CircleOptions\n\n // required\n /** sets the center of the circle */\n center: google.maps.LatLng | google.maps.LatLngLiteral\n\n // required\n /** Sets the radius of this circle (in meters) */\n radius: number\n /** If set to true, the user can drag this circle over the map */\n draggable?: boolean\n /** If set to true, the user can edit this circle by dragging the control points shown at the center and around the circumference of the circle. */\n editable?: boolean\n /** Hides this circle if set to false. */\n visible?: boolean\n /** This event is fired when the DOM dblclick event is fired on the circle. */\n onDblClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the user stops dragging the circle. */\n onDragEnd?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the user starts dragging the circle. */\n onDragStart?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the DOM mousedown event is fired on the circle. */\n onMouseDown?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the DOM mousemove event is fired on the circle. */\n onMouseMove?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired on circle mouseout. */\n onMouseOut?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired on circle mouseover. */\n onMouseOver?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the DOM mouseup event is fired on the circle. */\n onMouseUp?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the circle is right-clicked on. */\n onRightClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the circle's center is changed. */\n onCenterChanged?: () => void\n /** This event is fired when the DOM click event is fired on the circle. */\n onClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is repeatedly fired while the user drags the circle. */\n onDrag?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the circle's radius is changed. */\n onRadiusChanged?: () => void\n /** This callback is called when the circle instance has loaded. It is called with the circle instance. */\n onLoad?: (circle: google.maps.Circle) => void\n /** This callback is called when the component unmounts. It is called with the circle instance. */\n onUnmount?: (circle: google.maps.Circle) => void\n}\n\nexport class Circle extends React.PureComponent {\n static contextType = MapContext\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n state: CircleState = {\n circle: null,\n }\n\n setCircleCallback = (): void => {\n if (this.state.circle !== null && this.props.onLoad) {\n this.props.onLoad(this.state.circle)\n }\n }\n\n componentDidMount(): void {\n const circle = new google.maps.Circle({\n ...(this.props.options || {}),\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: circle,\n })\n\n this.setState(function setCircle() {\n return {\n circle,\n }\n }, this.setCircleCallback)\n }\n\n componentDidUpdate(prevProps: CircleProps): void {\n if (this.state.circle !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.circle,\n })\n }\n }\n\n componentWillUnmount(): void {\n if (this.state.circle !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.circle)\n }\n\n unregisterEvents(this.registeredEvents)\n\n this.state.circle && this.state.circle.setMap(null)\n }\n }\n\n render(): JSX.Element {\n return <>\n }\n}\n\nexport default Circle\n","import * as React from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onAddFeature: 'addfeature',\n onClick: 'click',\n onDblClick: 'dblclick',\n onMouseDown: 'mousedown',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRemoveFeature: 'removefeature',\n onRemoveProperty: 'removeproperty',\n onRightClick: 'rightclick',\n onSetGeometry: 'setgeometry',\n onSetProperty: 'setproperty',\n}\n\nconst updaterMap = {\n add(\n instance: google.maps.Data,\n features: google.maps.Data.Feature | google.maps.Data.FeatureOptions\n ): void {\n instance.add(features)\n },\n addgeojson(\n instance: google.maps.Data,\n geojson: object,\n options?: google.maps.Data.GeoJsonOptions\n ): void {\n instance.addGeoJson(geojson, options)\n },\n contains(instance: google.maps.Data, feature: google.maps.Data.Feature): void {\n instance.contains(feature)\n },\n foreach(instance: google.maps.Data, callback: (feature: google.maps.Data.Feature) => void): void {\n instance.forEach(callback)\n },\n loadgeojson(\n instance: google.maps.Data,\n url: string,\n options: google.maps.Data.GeoJsonOptions,\n callback: (features: google.maps.Data.Feature[]) => void\n ): void {\n instance.loadGeoJson(url, options, callback)\n },\n overridestyle(\n instance: google.maps.Data,\n feature: google.maps.Data.Feature,\n style: google.maps.Data.StyleOptions\n ): void {\n instance.overrideStyle(feature, style)\n },\n remove(instance: google.maps.Data, feature: google.maps.Data.Feature): void {\n instance.remove(feature)\n },\n revertstyle(instance: google.maps.Data, feature: google.maps.Data.Feature): void {\n instance.revertStyle(feature)\n },\n controlposition(instance: google.maps.Data, controlPosition: google.maps.ControlPosition): void {\n instance.setControlPosition(controlPosition)\n },\n controls(instance: google.maps.Data, controls: string[] | null): void {\n instance.setControls(controls)\n },\n drawingmode(instance: google.maps.Data, mode: string | null): void {\n instance.setDrawingMode(mode)\n },\n map(instance: google.maps.Data, map: google.maps.Map): void {\n instance.setMap(map)\n },\n style(\n instance: google.maps.Data,\n style: google.maps.Data.StylingFunction | google.maps.Data.StyleOptions\n ): void {\n instance.setStyle(style)\n },\n togeojson(instance: google.maps.Data, callback: (feature: object) => void): void {\n instance.toGeoJson(callback)\n },\n}\n\ninterface DataState {\n data: google.maps.Data | null\n}\nexport interface DataProps {\n options?: google.maps.Data.DataOptions\n /** This event is fired when a feature is added to the collection. */\n onAddFeature?: (e: google.maps.Data.AddFeatureEvent) => void\n /** This event is fired for a click on the geometry. */\n onClick?: (e: google.maps.Data.MouseEvent) => void\n /** This event is fired for a double click on the geometry. */\n onDblClick?: (e: google.maps.Data.MouseEvent) => void\n /** This event is fired for a mousedown on the geometry. */\n onMouseDown?: (e: google.maps.Data.MouseEvent) => void\n /** This event is fired when the mouse leaves the area of the geometry. */\n onMouseOut?: (e: google.maps.Data.MouseEvent) => void\n /** This event is fired when the mouse enters the area of the geometry. */\n onMouseOver?: (e: google.maps.Data.MouseEvent) => void\n /** This event is fired for a mouseup on the geometry. */\n onMouseUp?: (e: google.maps.Data.MouseEvent) => void\n /** This event is fired when a feature is removed from the collection. */\n onRemoveFeature?: (e: google.maps.Data.RemoveFeatureEvent) => void\n /** This event is fired when a feature's property is removed. */\n onRemoveProperty?: (e: google.maps.Data.RemovePropertyEvent) => void\n /** This event is fired for a rightclick on the geometry. */\n onRightClick?: (e: google.maps.Data.MouseEvent) => void\n /** This event is fired when a feature's geometry is set. */\n onSetGeometry?: (e: google.maps.Data.SetGeometryEvent) => void\n /** This event is fired when a feature's property is set. */\n onSetProperty?: (e: google.maps.Data.SetPropertyEvent) => void\n /** This callback is called when the data instance has loaded. It is called with the data instance. */\n onLoad?: (data: google.maps.Data) => void\n /** This callback is called when the component unmounts. It is called with the data instance. */\n onUnmount?: (data: google.maps.Data) => void\n}\n\nexport class Data extends React.PureComponent {\n static contextType = MapContext\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n state: DataState = {\n data: null,\n }\n\n setDataCallback = (): void => {\n if (this.state.data !== null && this.props.onLoad) {\n this.props.onLoad(this.state.data)\n }\n }\n\n componentDidMount(): void {\n const data = new google.maps.Data({\n ...(this.props.options || {}),\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: data,\n })\n\n this.setState(function setData() {\n return {\n data,\n }\n }, this.setDataCallback)\n }\n\n componentDidUpdate(prevProps: DataProps): void {\n if (this.state.data !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.data,\n })\n }\n }\n\n componentWillUnmount(): void {\n if (this.state.data !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.data)\n }\n\n unregisterEvents(this.registeredEvents)\n\n if (this.state.data) {\n this.state.data.setMap(null)\n }\n }\n }\n\n render(): null {\n return null\n }\n}\n\nexport default Data\n","import { PureComponent } from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onClick: 'click',\n onDefaultViewportChanged: 'defaultviewport_changed',\n onStatusChanged: 'status_changed',\n}\n\nconst updaterMap = {\n options(instance: google.maps.KmlLayer, options: google.maps.KmlLayerOptions): void {\n instance.setOptions(options)\n },\n url(instance: google.maps.KmlLayer, url: string): void {\n instance.setUrl(url)\n },\n zIndex(instance: google.maps.KmlLayer, zIndex: number): void {\n instance.setZIndex(zIndex)\n },\n}\n\ninterface KmlLayerState {\n kmlLayer: google.maps.KmlLayer | null\n}\n\nexport interface KmlLayerProps {\n options?: google.maps.KmlLayerOptions\n /** The URL of the KML document to display. */\n url?: string\n /** The z-index of the layer. */\n zIndex?: number\n /** This event is fired when a feature in the layer is clicked. */\n onClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the KML layers default viewport has changed. */\n onDefaultViewportChanged?: () => void\n /** This event is fired when the KML layer has finished loading. At this point it is safe to read the status property to determine if the layer loaded successfully. */\n onStatusChanged?: () => void\n /** This callback is called when the kmlLayer instance has loaded. It is called with the kmlLayer instance. */\n onLoad?: (kmlLayer: google.maps.KmlLayer) => void\n /** This callback is called when the component unmounts. It is called with the kmlLayer instance. */\n onUnmount?: (kmlLayer: google.maps.KmlLayer) => void\n}\n\nexport class KmlLayer extends PureComponent {\n static contextType = MapContext\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n state: KmlLayerState = {\n kmlLayer: null,\n }\n\n setKmlLayerCallback = (): void => {\n if (this.state.kmlLayer !== null && this.props.onLoad) {\n this.props.onLoad(this.state.kmlLayer)\n }\n }\n\n componentDidMount(): void {\n const kmlLayer = new google.maps.KmlLayer({\n ...this.props.options,\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: kmlLayer,\n })\n\n this.setState(function setLmlLayer() {\n return {\n kmlLayer,\n }\n }, this.setKmlLayerCallback)\n }\n\n componentDidUpdate(prevProps: KmlLayerProps): void {\n if (this.state.kmlLayer !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.kmlLayer,\n })\n }\n }\n\n componentWillUnmount(): void {\n if (this.state.kmlLayer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.kmlLayer)\n }\n\n unregisterEvents(this.registeredEvents)\n\n this.state.kmlLayer.setMap(null)\n }\n }\n\n render(): React.ReactNode {\n return null\n }\n}\n\nexport default KmlLayer\n","import { PositionDrawProps } from \"../../types\"\n\n/* eslint-disable filenames/match-regex */\nexport function getOffsetOverride(\n containerElement: HTMLElement,\n getPixelPositionOffset?: (offsetWidth: number, offsetHeight: number) => { x: number; y: number }\n): { x: number; y: number } | {} {\n return typeof getPixelPositionOffset === 'function'\n ? getPixelPositionOffset(containerElement.offsetWidth, containerElement.offsetHeight)\n : {}\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst createLatLng = (inst: any, Type: any): any => new Type(inst.lat, inst.lng)\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst createLatLngBounds = (inst: any, Type: any): any =>\n new Type(\n new google.maps.LatLng(inst.ne.lat, inst.ne.lng),\n new google.maps.LatLng(inst.sw.lat, inst.sw.lng)\n )\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst ensureOfType = (inst: any, type: any, factory: any): any => {\n return inst instanceof type ? inst : factory(inst, type)\n}\n\nconst getLayoutStylesByBounds = (\n mapCanvasProjection: google.maps.MapCanvasProjection,\n offset: { x: number; y: number },\n bounds: google.maps.LatLngBounds\n): { left: string; top: string; width?: string; height?: string } => {\n const ne = mapCanvasProjection && mapCanvasProjection.fromLatLngToDivPixel(bounds.getNorthEast())\n\n const sw = mapCanvasProjection && mapCanvasProjection.fromLatLngToDivPixel(bounds.getSouthWest())\n\n if (ne && sw) {\n return {\n left: `${sw.x + offset.x}px`,\n top: `${ne.y + offset.y}px`,\n width: `${ne.x - sw.x - offset.x}px`,\n height: `${sw.y - ne.y - offset.y}px`,\n }\n }\n\n return {\n left: '-9999px',\n top: '-9999px',\n }\n}\n\nconst getLayoutStylesByPosition = (\n mapCanvasProjection: google.maps.MapCanvasProjection,\n offset: { x: number; y: number },\n position: google.maps.LatLng\n): { left: string; top: string } => {\n const point = mapCanvasProjection && mapCanvasProjection.fromLatLngToDivPixel(position)\n\n if (point) {\n const { x, y } = point\n\n return {\n left: `${x + offset.x}px`,\n top: `${y + offset.y}px`,\n }\n }\n\n return {\n left: '-9999px',\n top: '-9999px',\n }\n}\n\nexport const getLayoutStyles = (\n mapCanvasProjection: google.maps.MapCanvasProjection,\n offset: { x: number; y: number },\n bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral,\n position?: google.maps.LatLng | google.maps.LatLngLiteral\n): PositionDrawProps => {\n return bounds !== undefined\n ? getLayoutStylesByBounds(\n mapCanvasProjection,\n offset,\n ensureOfType(bounds, google.maps.LatLngBounds, createLatLngBounds)\n )\n : getLayoutStylesByPosition(\n mapCanvasProjection,\n offset,\n ensureOfType(position, google.maps.LatLng, createLatLng)\n )\n}\n\nexport const arePositionsEqual = (\n currentPosition: PositionDrawProps,\n previousPosition: PositionDrawProps\n): boolean => {\n return currentPosition.left === previousPosition.left\n && currentPosition.top === previousPosition.top\n && currentPosition.width === previousPosition.height\n && currentPosition.height === previousPosition.height;\n}","import * as React from 'react'\nimport * as ReactDOM from 'react-dom'\n\nimport invariant from 'invariant'\n\nimport MapContext from '../../map-context'\n\nimport { getOffsetOverride, getLayoutStyles, arePositionsEqual } from './dom-helper'\n\ninterface OverlayViewState {\n paneEl: Element | null\n containerStyle: React.CSSProperties\n}\n\nfunction convertToLatLngString(latLngLike?: google.maps.LatLng | google.maps.LatLngLiteral | null) {\n if (!latLngLike) {\n return ''\n }\n\n const latLng = latLngLike instanceof google.maps.LatLng\n ? latLngLike\n : new google.maps.LatLng(latLngLike.lat, latLngLike.lng)\n\n return latLng + ''\n}\n\nfunction convertToLatLngBoundsString(latLngBoundsLike?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | null) {\n if (!latLngBoundsLike) {\n return ''\n }\n\n const latLngBounds = latLngBoundsLike instanceof google.maps.LatLngBounds\n ? latLngBoundsLike\n : new google.maps.LatLngBounds(\n new google.maps.LatLng(latLngBoundsLike.south, latLngBoundsLike.east),\n new google.maps.LatLng(latLngBoundsLike.north, latLngBoundsLike.west)\n )\n\n return latLngBounds + ''\n}\n\nexport type PaneNames = keyof google.maps.MapPanes\nexport interface OverlayViewProps {\n // required\n mapPaneName: PaneNames\n getPixelPositionOffset?: (offsetWidth: number, offsetHeight: number) => { x: number; y: number }\n bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral\n position?: google.maps.LatLng | google.maps.LatLngLiteral\n onLoad?: (overlayView: google.maps.OverlayView) => void\n onUnmount?: (overlayView: google.maps.OverlayView) => void\n}\n\nexport class OverlayView extends React.PureComponent {\n static FLOAT_PANE: PaneNames = `floatPane`\n static MAP_PANE: PaneNames = `mapPane`\n static MARKER_LAYER: PaneNames = `markerLayer`\n static OVERLAY_LAYER: PaneNames = `overlayLayer`\n static OVERLAY_MOUSE_TARGET: PaneNames = `overlayMouseTarget`\n\n static contextType = MapContext\n\n state: OverlayViewState = {\n paneEl: null,\n containerStyle: {\n // set initial position\n position: 'absolute'\n },\n }\n\n overlayView: google.maps.OverlayView\n containerRef: React.RefObject\n\n updatePane = (): void => {\n const mapPaneName = this.props.mapPaneName\n\n // https://developers.google.com/maps/documentation/javascript/3.exp/reference#MapPanes\n const mapPanes = this.overlayView.getPanes()\n invariant(\n !!mapPaneName,\n `OverlayView requires props.mapPaneName but got %s`,\n mapPaneName\n )\n\n if (mapPanes) {\n this.setState({\n paneEl: mapPanes[mapPaneName]\n })\n } else {\n this.setState({\n paneEl: null\n })\n }\n }\n onAdd = (): void => {\n this.updatePane()\n this.props.onLoad?.(this.overlayView)\n }\n\n onPositionElement = (): void => {\n const mapCanvasProjection = this.overlayView.getProjection()\n\n const offset = {\n x: 0,\n y: 0,\n ...(this.containerRef.current\n ? getOffsetOverride(this.containerRef.current, this.props.getPixelPositionOffset)\n : {}),\n }\n\n const layoutStyles = getLayoutStyles(\n mapCanvasProjection,\n offset,\n this.props.bounds,\n this.props.position\n )\n\n const { left, top, width, height } = this.state.containerStyle;\n if(!arePositionsEqual(layoutStyles, { left, top, width, height })) {\n this.setState({\n containerStyle: {\n ...layoutStyles,\n position: 'absolute'\n },\n })\n }\n }\n\n draw = (): void => {\n this.onPositionElement()\n }\n\n onRemove = (): void => {\n this.setState(() => ({\n paneEl: null\n }))\n // this.mapPaneEl = null\n this.props.onUnmount?.(this.overlayView)\n }\n\n constructor(props: OverlayViewProps) {\n super(props)\n\n this.containerRef = React.createRef()\n // You must implement three methods: onAdd(), draw(), and onRemove().\n const overlayView = new google.maps.OverlayView()\n overlayView.onAdd = this.onAdd\n overlayView.draw = this.draw\n overlayView.onRemove = this.onRemove\n this.overlayView = overlayView\n }\n\n componentDidMount(): void {\n // You must call setMap() with a valid Map object to trigger the call to\n // the onAdd() method and setMap(null) in order to trigger the onRemove() method.\n this.overlayView.setMap(this.context)\n }\n\n componentDidUpdate(prevProps: OverlayViewProps): void {\n const prevPositionString = convertToLatLngString(prevProps.position)\n const positionString = convertToLatLngString(this.props.position)\n const prevBoundsString = convertToLatLngBoundsString(prevProps.bounds)\n const boundsString = convertToLatLngBoundsString(this.props.bounds)\n\n if (prevPositionString !== positionString || prevBoundsString !== boundsString) {\n this.overlayView.draw()\n }\n if (prevProps.mapPaneName !== this.props.mapPaneName) {\n this.updatePane()\n }\n }\n\n componentWillUnmount(): void {\n this.overlayView.setMap(null)\n }\n\n render(): React.ReactPortal | React.ReactNode {\n const paneEl = this.state.paneEl\n if (paneEl) {\n return ReactDOM.createPortal(\n \n {React.Children.only(this.props.children)}\n
,\n paneEl\n )\n } else {\n return null\n }\n }\n}\n\nexport default OverlayView\n","import * as React from 'react'\n\nimport invariant from 'invariant'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\nimport { noop } from '../../utils/noop'\n\nconst eventMap = {\n onDblClick: 'dblclick',\n onClick: 'click',\n}\n\nconst updaterMap = {\n opacity(instance: google.maps.GroundOverlay, opacity: number): void {\n instance.setOpacity(opacity)\n },\n}\n\ninterface GroundOverlayState {\n groundOverlay: google.maps.GroundOverlay | null\n}\n\nexport interface GroundOverlayProps {\n options?: google.maps.GroundOverlayOptions\n /** The opacity of the overlay, expressed as a number between 0 and 1. Optional. Defaults to 1. */\n opacity?: number\n /** This event is fired when the DOM dblclick event is fired on the GroundOverlay. */\n onDblClick?: (e: google.maps.MapMouseEvent) => void\n /** This event is fired when the DOM click event is fired on the GroundOverlay. */\n onClick?: (e: google.maps.MapMouseEvent) => void\n /** The url of the projected image */\n url: string\n /** The bounds that the image will be scaled to fit */\n bounds: google.maps.LatLngBounds\n /** This callback is called when the groundOverlay instance has loaded. It is called with the groundOverlay instance. */\n onLoad?: (groundOverlay: google.maps.GroundOverlay) => void\n /** This callback is called when the component unmounts. It is called with the groundOverlay instance. */\n onUnmount?: (groundOverlay: google.maps.GroundOverlay) => void\n}\n\nexport class GroundOverlay extends React.PureComponent {\n public static defaultProps = {\n onLoad: noop,\n }\n\n static contextType = MapContext\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n state: GroundOverlayState = {\n groundOverlay: null,\n }\n\n setGroundOverlayCallback = (): void => {\n if (this.state.groundOverlay !== null && this.props.onLoad) {\n this.props.onLoad(this.state.groundOverlay)\n }\n }\n\n componentDidMount(): void {\n invariant(\n !!this.props.url || !!this.props.bounds,\n `For GroundOverlay, url and bounds are passed in to constructor and are immutable after instantiated. This is the behavior of Google Maps JavaScript API v3 ( See https://developers.google.com/maps/documentation/javascript/reference#GroundOverlay) Hence, use the corresponding two props provided by \\`react-google-maps-api\\`, url and bounds. In some cases, you'll need the GroundOverlay component to reflect the changes of url and bounds. You can leverage the React's key property to remount the component. Typically, just \\`key={url}\\` would serve your need. See https://github.com/tomchentw/react-google-maps/issues/655`\n )\n\n const groundOverlay = new google.maps.GroundOverlay(this.props.url, this.props.bounds, {\n ...this.props.options,\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: groundOverlay,\n })\n\n this.setState(function setGroundOverlay() {\n return {\n groundOverlay,\n }\n }, this.setGroundOverlayCallback)\n }\n\n componentDidUpdate(prevProps: GroundOverlayProps): void {\n if (this.state.groundOverlay !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.groundOverlay,\n })\n }\n }\n\n componentWillUnmount(): void {\n if (this.state.groundOverlay) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.groundOverlay)\n }\n\n this.state.groundOverlay.setMap(null)\n }\n }\n\n render(): React.ReactNode {\n return null\n }\n}\n\nexport default GroundOverlay\n","import * as React from 'react'\nimport invariant from 'invariant'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nconst eventMap = {}\n\nconst updaterMap = {\n data(\n instance: google.maps.visualization.HeatmapLayer,\n data:\n | google.maps.MVCArray\n | google.maps.LatLng[]\n | google.maps.visualization.WeightedLocation[]\n ): void {\n instance.setData(data)\n },\n map(instance: google.maps.visualization.HeatmapLayer, map: google.maps.Map): void {\n instance.setMap(map)\n },\n options(\n instance: google.maps.visualization.HeatmapLayer,\n options: google.maps.visualization.HeatmapLayerOptions\n ): void {\n instance.setOptions(options)\n },\n}\n\ninterface HeatmapLayerState {\n heatmapLayer: google.maps.visualization.HeatmapLayer | null\n}\n\nexport interface HeatmapLayerProps {\n // required\n /** The data points to display. Required. */\n data:\n | google.maps.MVCArray\n | google.maps.LatLng[]\n | google.maps.visualization.WeightedLocation[]\n options?: google.maps.visualization.HeatmapLayerOptions\n /** This callback is called when the heatmapLayer instance has loaded. It is called with the heatmapLayer instance. */\n onLoad?: (heatmapLayer: google.maps.visualization.HeatmapLayer) => void\n /** This callback is called when the component unmounts. It is called with the heatmapLayer instance. */\n onUnmount?: (heatmapLayer: google.maps.visualization.HeatmapLayer) => void\n}\n\nexport class HeatmapLayer extends React.PureComponent {\n static contextType = MapContext\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n state: HeatmapLayerState = {\n heatmapLayer: null,\n }\n\n setHeatmapLayerCallback = (): void => {\n if (this.state.heatmapLayer !== null && this.props.onLoad) {\n this.props.onLoad(this.state.heatmapLayer)\n }\n }\n\n componentDidMount(): void {\n invariant(\n !!google.maps.visualization,\n 'Did you include prop libraries={[\"visualization\"]} to ? %s',\n google.maps.visualization\n )\n\n invariant(!!this.props.data, 'data property is required in HeatmapLayer %s', this.props.data)\n\n const heatmapLayer = new google.maps.visualization.HeatmapLayer({\n ...(this.props.options || {}),\n data: this.props.data,\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: heatmapLayer,\n })\n\n this.setState(function setHeatmapLayer() {\n return {\n heatmapLayer,\n }\n }, this.setHeatmapLayerCallback)\n }\n\n componentDidUpdate(prevProps: HeatmapLayerProps): void {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.heatmapLayer,\n })\n }\n\n componentWillUnmount(): void {\n if (this.state.heatmapLayer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.heatmapLayer)\n }\n\n unregisterEvents(this.registeredEvents)\n\n this.state.heatmapLayer.setMap(null)\n }\n }\n\n render(): React.ReactNode {\n return null\n }\n}\n\nexport default HeatmapLayer\n","import * as React from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onCloseClick: 'closeclick',\n onPanoChanged: 'pano_changed',\n onPositionChanged: 'position_changed',\n onPovChanged: 'pov_changed',\n onResize: 'resize',\n onStatusChanged: 'status_changed',\n onVisibleChanged: 'visible_changed',\n onZoomChanged: 'zoom_changed',\n}\n\nconst updaterMap = {\n register(\n instance: google.maps.StreetViewPanorama,\n provider: (input: string) => google.maps.StreetViewPanoramaData,\n options: google.maps.PanoProviderOptions\n ): void {\n instance.registerPanoProvider(provider, options)\n },\n links(instance: google.maps.StreetViewPanorama, links: google.maps.StreetViewLink[]): void {\n instance.setLinks(links)\n },\n motionTracking(instance: google.maps.StreetViewPanorama, motionTracking: boolean): void {\n instance.setMotionTracking(motionTracking)\n },\n options(\n instance: google.maps.StreetViewPanorama,\n options: google.maps.StreetViewPanoramaOptions\n ): void {\n instance.setOptions(options)\n },\n pano(instance: google.maps.StreetViewPanorama, pano: string): void {\n instance.setPano(pano)\n },\n position(\n instance: google.maps.StreetViewPanorama,\n position: google.maps.LatLng | google.maps.LatLngLiteral\n ): void {\n instance.setPosition(position)\n },\n pov(instance: google.maps.StreetViewPanorama, pov: google.maps.StreetViewPov): void {\n instance.setPov(pov)\n },\n visible(instance: google.maps.StreetViewPanorama, visible: boolean): void {\n instance.setVisible(visible)\n },\n zoom(instance: google.maps.StreetViewPanorama, zoom: number): void {\n instance.setZoom(zoom)\n },\n}\n\ninterface StreetViewPanoramaState {\n streetViewPanorama: google.maps.StreetViewPanorama | null\n}\n\nexport interface StreetViewPanoramaProps {\n options?: google.maps.StreetViewPanoramaOptions\n /** This event is fired when the close button is clicked. */\n onCloseclick?: (event: google.maps.MapMouseEvent) => void\n /** This event is fired when the panorama's pano id changes. The pano may change as the user navigates through the panorama or the position is manually set. Note that not all position changes trigger a pano_changed. */\n onPanoChanged?: () => void\n /** This event is fired when the panorama's position changes. The position changes as the user navigates through the panorama or the position is set manually. */\n onPositionChanged?: () => void\n /** This event is fired when the panorama's point-of-view changes. The point of view changes as the pitch, zoom, or heading changes. */\n onPovChanged?: () => void\n /** Developers should trigger this event on the panorama when its div changes size: google.maps.event.trigger(panorama, 'resize'). */\n onResize?: () => void\n /** This event is fired after every panorama lookup by id or location, via setPosition() or setPano(). */\n onStatusChanged?: () => void\n /** This event is fired when the panorama's visibility changes. The visibility is changed when the Pegman is dragged onto the map, the close button is clicked, or setVisible() is called. */\n onVisibleChanged?: () => void\n /** This event is fired when the panorama's zoom level changes. */\n onZoomChange?: () => void\n /** This callback is called when the streetViewPanorama instance has loaded. It is called with the streetViewPanorama instance. */\n onLoad?: (streetViewPanorama: google.maps.StreetViewPanorama) => void\n /** This callback is called when the component unmounts. It is called with the streetViewPanorama instance. */\n onUnmount?: (streetViewPanorama: google.maps.StreetViewPanorama) => void\n}\n\nexport class StreetViewPanorama extends React.PureComponent<\n StreetViewPanoramaProps,\n StreetViewPanoramaState\n> {\n static contextType = MapContext\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n state: StreetViewPanoramaState = {\n streetViewPanorama: null,\n }\n\n setStreetViewPanoramaCallback = (): void => {\n if (this.state.streetViewPanorama !== null && this.props.onLoad) {\n this.props.onLoad(this.state.streetViewPanorama)\n }\n }\n\n componentDidMount(): void {\n const streetViewPanorama = this.context.getStreetView()\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: streetViewPanorama,\n })\n\n this.setState(function setStreetViewPanorama() {\n return {\n streetViewPanorama,\n }\n }, this.setStreetViewPanoramaCallback)\n }\n\n componentDidUpdate(prevProps: StreetViewPanoramaProps): void {\n if (this.state.streetViewPanorama !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.streetViewPanorama,\n })\n }\n }\n\n componentWillUnmount(): void {\n if (this.state.streetViewPanorama !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.streetViewPanorama)\n }\n\n unregisterEvents(this.registeredEvents)\n\n this.state.streetViewPanorama.setVisible(false)\n }\n }\n\n render(): React.ReactNode {\n return null\n }\n}\n\nexport default StreetViewPanorama\n","import * as React from 'react'\n\nimport MapContext from '../../map-context'\n\nexport interface StreetViewServiceProps {\n /** This callback is called when the streetViewService instance has loaded. It is called with the streetViewService instance. */\n onLoad?: (streetViewService: google.maps.StreetViewService | null) => void\n /** This callback is called when the component unmounts. It is called with the streetViewService instance. */\n onUnmount?: (streetViewService: google.maps.StreetViewService | null) => void\n}\n\ninterface StreetViewServiceState {\n streetViewService: google.maps.StreetViewService | null\n}\n\nexport class StreetViewService extends React.PureComponent<\n StreetViewServiceProps,\n StreetViewServiceState\n> {\n static contextType = MapContext\n\n state = {\n streetViewService: null,\n }\n\n setStreetViewServiceCallback = (): void => {\n if (this.state.streetViewService !== null && this.props.onLoad) {\n this.props.onLoad(this.state.streetViewService)\n }\n }\n\n componentDidMount(): void {\n const streetViewService = new google.maps.StreetViewService()\n\n this.setState(function setStreetViewService() {\n return {\n streetViewService,\n }\n }, this.setStreetViewServiceCallback)\n }\n\n componentWillUnmount(): void {\n if (this.state.streetViewService !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.streetViewService)\n }\n }\n }\n\n render(): React.ReactNode {\n return null\n }\n}\n\nexport default StreetViewService\n","import * as React from 'react'\nimport invariant from 'invariant'\n\ninterface DirectionsServiceState {\n directionsService: google.maps.DirectionsService | null\n}\n\nexport interface DirectionsServiceProps {\n // required for default functionality\n options: google.maps.DirectionsRequest\n\n // required for default functionality\n callback: (\n // required\n /** The directions response retrieved from the directions server. You can render these using a DirectionsRenderer or parse this object and render it yourself. You must display the warnings and copyrights as noted in the Google Maps Platform Terms of Service. Note that though this result is \"JSON-like,\" it is not strictly JSON, as it indirectly includes LatLng objects */\n result: google.maps.DirectionsResult | null,\n // required\n /** The status returned by the DirectionsService on the completion of a call to route(). Specify these by value, or by using the constant's name. For example, 'OK' or google.maps.DirectionsStatus.OK */\n status: google.maps.DirectionsStatus\n ) => void\n /** This callback is called when the directionsService instance has loaded. It is called with the directionsService instance. */\n onLoad?: (directionsService: google.maps.DirectionsService) => void\n /** This callback is called when the component unmounts. It is called with the directionsService instance. */\n onUnmount?: (directionsService: google.maps.DirectionsService) => void\n}\n\nexport class DirectionsService extends React.PureComponent<\n DirectionsServiceProps,\n DirectionsServiceState\n> {\n state: DirectionsServiceState = {\n directionsService: null,\n }\n\n setDirectionsServiceCallback = (): void => {\n if (this.state.directionsService !== null && this.props.onLoad) {\n this.props.onLoad(this.state.directionsService)\n }\n }\n\n componentDidMount(): void {\n invariant(\n !!this.props.options,\n 'DirectionsService expected options object as parameter, but got %s',\n this.props.options\n )\n\n const directionsService = new google.maps.DirectionsService()\n\n this.setState(function setDirectionsService() {\n return {\n directionsService,\n }\n }, this.setDirectionsServiceCallback)\n }\n\n componentDidUpdate(): void {\n if (this.state.directionsService !== null) {\n this.state.directionsService.route(this.props.options, this.props.callback)\n }\n }\n\n componentWillUnmount(): void {\n if (this.state.directionsService !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.directionsService)\n }\n }\n }\n\n render(): JSX.Element {\n return <>\n }\n}\n\nexport default DirectionsService\n","import * as React from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onDirectionsChanged: 'directions_changed',\n}\n\nconst updaterMap = {\n directions(\n instance: google.maps.DirectionsRenderer,\n directions: google.maps.DirectionsResult\n ): void {\n instance.setDirections(directions)\n },\n map(instance: google.maps.DirectionsRenderer, map: google.maps.Map): void {\n instance.setMap(map)\n },\n options(\n instance: google.maps.DirectionsRenderer,\n options: google.maps.DirectionsRendererOptions\n ): void {\n instance.setOptions(options)\n },\n panel(instance: google.maps.DirectionsRenderer, panel: Element): void {\n instance.setPanel(panel)\n },\n routeIndex(instance: google.maps.DirectionsRenderer, routeIndex: number): void {\n instance.setRouteIndex(routeIndex)\n },\n}\n\ninterface DirectionsRendererState {\n directionsRenderer: google.maps.DirectionsRenderer | null\n}\n\nexport interface DirectionsRendererProps {\n options?: google.maps.DirectionsRendererOptions\n /** The directions to display on the map and/or in a
panel, retrieved as a DirectionsResult object from DirectionsService. */\n directions?: google.maps.DirectionsResult\n /** The
in which to display the directions steps. */\n panel?: Element\n /** The index of the route within the DirectionsResult object. The default value is 0. */\n routeIndex?: number\n /** This event is fired when the rendered directions change, either when a new DirectionsResult is set or when the user finishes dragging a change to the directions path. */\n onDirectionsChanged?: () => void\n /** This callback is called when the directionsRenderer instance has loaded. It is called with the directionsRenderer instance. */\n onLoad?: (directionsRenderer: google.maps.DirectionsRenderer) => void\n /** This callback is called when the component unmounts. It is called with the directionsRenderer instance. */\n onUnmount?: (directionsRenderer: google.maps.DirectionsRenderer) => void\n}\n\nexport class DirectionsRenderer extends React.PureComponent<\n DirectionsRendererProps,\n DirectionsRendererState\n> {\n static contextType = MapContext\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n state: DirectionsRendererState = {\n directionsRenderer: null,\n }\n\n setDirectionsRendererCallback = (): void => {\n if (this.state.directionsRenderer !== null) {\n this.state.directionsRenderer.setMap(this.context)\n\n if (this.props.onLoad) {\n this.props.onLoad(this.state.directionsRenderer)\n }\n }\n }\n\n componentDidMount(): void {\n const directionsRenderer = new google.maps.DirectionsRenderer(this.props.options)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: directionsRenderer,\n })\n\n this.setState(function setDirectionsRenderer() {\n return {\n directionsRenderer,\n }\n }, this.setDirectionsRendererCallback)\n }\n\n componentDidUpdate(prevProps: DirectionsRendererProps): void {\n if (this.state.directionsRenderer !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.directionsRenderer,\n })\n }\n }\n\n componentWillUnmount(): void {\n if (this.state.directionsRenderer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.directionsRenderer)\n }\n\n unregisterEvents(this.registeredEvents)\n\n if (this.state.directionsRenderer) {\n this.state.directionsRenderer.setMap(null)\n }\n }\n }\n\n render(): JSX.Element {\n return <>\n }\n}\n\nexport default DirectionsRenderer\n","import * as React from 'react'\n\nimport invariant from 'invariant'\n\ninterface DistanceMatrixServiceState {\n distanceMatrixService: google.maps.DistanceMatrixService | null\n}\n\nexport interface DistanceMatrixServiceProps {\n // required for default functionality\n options: google.maps.DistanceMatrixRequest\n\n // required for default functionality\n callback: (\n // required\n /** The response to a DistanceMatrixService request, consisting of the formatted origin and destination addresses, and a sequence of DistanceMatrixResponseRows, one for each corresponding origin address. */\n response: google.maps.DistanceMatrixResponse | null,\n // required\n /** The top-level status about the request in general returned by the DistanceMatrixService upon completion of a distance matrix request. Specify these by value, or by using the constant's name. For example, 'OK' or google.maps.DistanceMatrixStatus.OK. */\n status: google.maps.DistanceMatrixStatus\n ) => void\n /** This callback is called when the distanceMatrixService instance has loaded. It is called with the distanceMatrixService instance. */\n onLoad?: (distanceMatrixService: google.maps.DistanceMatrixService) => void\n /** This callback is called when the component unmounts. It is called with the distanceMatrixService instance. */\n onUnmount?: (distanceMatrixService: google.maps.DistanceMatrixService) => void\n}\n\nexport class DistanceMatrixService extends React.PureComponent<\n DistanceMatrixServiceProps,\n DistanceMatrixServiceState\n> {\n state: DistanceMatrixServiceState = {\n distanceMatrixService: null,\n }\n\n setDistanceMatrixServiceCallback = (): void => {\n if (this.state.distanceMatrixService !== null && this.props.onLoad) {\n this.props.onLoad(this.state.distanceMatrixService)\n }\n }\n\n componentDidMount(): void {\n invariant(\n !!this.props.options,\n 'DistanceMatrixService expected options object as parameter, but go %s',\n this.props.options\n )\n\n const distanceMatrixService = new google.maps.DistanceMatrixService()\n\n this.setState(function setDistanceMatrixService() {\n return {\n distanceMatrixService,\n }\n }, this.setDistanceMatrixServiceCallback)\n }\n\n componentDidUpdate(): void {\n if (this.state.distanceMatrixService !== null) {\n this.state.distanceMatrixService.getDistanceMatrix(this.props.options, this.props.callback)\n }\n }\n\n componentWillUnmount(): void {\n if (this.state.distanceMatrixService !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.distanceMatrixService)\n }\n }\n }\n\n render(): JSX.Element {\n return <>\n }\n}\n\nexport default DistanceMatrixService\n","import * as React from 'react'\n\nimport invariant from 'invariant'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onPlacesChanged: 'places_changed',\n}\n\nconst updaterMap = {\n bounds(\n instance: google.maps.places.SearchBox,\n bounds: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral\n ): void {\n instance.setBounds(bounds)\n },\n}\n\ninterface StandaloneSearchBoxState {\n searchBox: google.maps.places.SearchBox | null\n}\n\nexport interface StandaloneSearchBoxProps {\n /** The area towards which to bias query predictions. Predictions are biased towards, but not restricted to, queries targeting these bounds. */\n bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral\n options?: google.maps.places.SearchBoxOptions\n /** This event is fired when the user selects a query, getPlaces should be used to get new places. */\n onPlacesChanged?: () => void\n /** This callback is called when the searchBox instance has loaded. It is called with the searchBox instance. */\n onLoad?: (searchBox: google.maps.places.SearchBox) => void\n /** This callback is called when the component unmounts. It is called with the searchBox instance. */\n onUnmount?: (searchBox: google.maps.places.SearchBox) => void\n}\n\nclass StandaloneSearchBox extends React.PureComponent<\n StandaloneSearchBoxProps,\n StandaloneSearchBoxState\n> {\n static contextType = MapContext\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n containerElement: React.RefObject = React.createRef()\n\n state: StandaloneSearchBoxState = {\n searchBox: null,\n }\n\n setSearchBoxCallback = (): void => {\n if (this.state.searchBox !== null && this.props.onLoad) {\n this.props.onLoad(this.state.searchBox)\n }\n }\n\n componentDidMount(): void {\n invariant(\n !!google.maps.places,\n 'You need to provide libraries={[\"places\"]} prop to component %s',\n google.maps.places\n )\n\n if (this.containerElement !== null && this.containerElement.current !== null) {\n const input = this.containerElement.current.querySelector('input')\n\n if (input !== null) {\n const searchBox = new google.maps.places.SearchBox(input, this.props.options)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: searchBox,\n })\n\n this.setState(function setSearchBox() {\n return {\n searchBox,\n }\n }, this.setSearchBoxCallback)\n }\n }\n }\n\n componentDidUpdate(prevProps: StandaloneSearchBoxProps): void {\n if (this.state.searchBox !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.searchBox,\n })\n }\n }\n\n componentWillUnmount(): void {\n if (this.state.searchBox !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.searchBox)\n }\n\n unregisterEvents(this.registeredEvents)\n }\n }\n\n render(): React.ReactNode {\n return
{React.Children.only(this.props.children)}
\n }\n}\n\nexport default StandaloneSearchBox\n","import * as React from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nimport invariant from 'invariant'\n\nconst eventMap = {\n onPlaceChanged: 'place_changed',\n}\n\nconst updaterMap = {\n bounds(\n instance: google.maps.places.Autocomplete,\n bounds: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral\n ): void {\n instance.setBounds(bounds)\n },\n restrictions(\n instance: google.maps.places.Autocomplete,\n restrictions: google.maps.places.ComponentRestrictions\n ): void {\n instance.setComponentRestrictions(restrictions)\n },\n fields(instance: google.maps.places.Autocomplete, fields: string[]): void {\n instance.setFields(fields)\n },\n options(\n instance: google.maps.places.Autocomplete,\n options: google.maps.places.AutocompleteOptions\n ): void {\n instance.setOptions(options)\n },\n types(instance: google.maps.places.Autocomplete, types: string[]): void {\n instance.setTypes(types)\n },\n}\n\ninterface AutocompleteState {\n autocomplete: google.maps.places.Autocomplete | null\n}\n\nexport interface AutocompleteProps {\n // required\n children: React.ReactChild\n /** The area in which to search for places. */\n bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral\n /** The component restrictions. Component restrictions are used to restrict predictions to only those within the parent component. For example, the country. */\n restrictions?: google.maps.places.ComponentRestrictions\n /** Fields to be included for the Place in the details response when the details are successfully retrieved. For a list of fields see PlaceResult. Nested fields can be specified with dot-paths (for example, \"geometry.location\"). */\n fields?: string[]\n options?: google.maps.places.AutocompleteOptions\n /** The types of predictions to be returned. For a list of supported types, see the developer's guide. If nothing is specified, all types are returned. In general only a single type is allowed. The exception is that you can safely mix the 'geocode' and 'establishment' types, but note that this will have the same effect as specifying no types. */\n types?: string[]\n /** This event is fired when a PlaceResult is made available for a Place the user has selected. If the user enters the name of a Place that was not suggested by the control and presses the Enter key, or if a Place Details request fails, the PlaceResult contains the user input in the name property, with no other properties defined. */\n onPlaceChanged?: () => void\n /** This callback is called when the autocomplete instance has loaded. It is called with the autocomplete instance. */\n onLoad?: (autocomplete: google.maps.places.Autocomplete) => void\n /** This callback is called when the component unmounts. It is called with the autocomplete instance. */\n onUnmount?: (autocomplete: google.maps.places.Autocomplete) => void\n className?: string\n}\n\nexport class Autocomplete extends React.PureComponent {\n static contextType = MapContext\n\n registeredEvents: google.maps.MapsEventListener[] = []\n containerElement: React.RefObject = React.createRef()\n\n state: AutocompleteState = {\n autocomplete: null,\n }\n\n setAutocompleteCallback = (): void => {\n if (this.state.autocomplete !== null && this.props.onLoad) {\n this.props.onLoad(this.state.autocomplete)\n }\n }\n\n componentDidMount(): void {\n invariant(\n !!google.maps.places,\n 'You need to provide libraries={[\"places\"]} prop to component %s',\n google.maps.places\n )\n\n // TODO: why current could be equal null?\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n const input = this.containerElement.current.querySelector('input')\n\n if (input) {\n const autocomplete = new google.maps.places.Autocomplete(input, this.props.options)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: autocomplete,\n })\n\n this.setState(function setAutocomplete() {\n return {\n autocomplete,\n }\n }, this.setAutocompleteCallback)\n }\n }\n\n componentDidUpdate(prevProps: AutocompleteProps): void {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.autocomplete,\n })\n }\n\n componentWillUnmount(): void {\n if (this.state.autocomplete !== null) {\n unregisterEvents(this.registeredEvents)\n }\n }\n\n render(): React.ReactNode {\n return
{React.Children.only(this.props.children)}
\n }\n}\n\nexport default Autocomplete\n","/* The following list is defined in React's core */\nvar IS_UNITLESS = {\n animationIterationCount: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n flex: true,\n flexGrow: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n flexOrder: true,\n gridRow: true,\n gridColumn: true,\n fontWeight: true,\n lineClamp: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n\n // SVG-related properties\n fillOpacity: true,\n stopOpacity: true,\n strokeDashoffset: true,\n strokeOpacity: true,\n strokeWidth: true\n};\n\nmodule.exports = function(name, value) {\n if(typeof value === 'number' && !IS_UNITLESS[ name ]) {\n return value + 'px';\n } else {\n return value;\n }\n};","var prefix = require('prefix-style')\nvar toCamelCase = require('to-camel-case')\nvar cache = { 'float': 'cssFloat' }\nvar addPxToStyle = require('add-px-to-style')\n\nfunction style (element, property, value) {\n var camel = cache[property]\n if (typeof camel === 'undefined') {\n camel = detect(property)\n }\n\n // may be false if CSS prop is unsupported\n if (camel) {\n if (value === undefined) {\n return element.style[camel]\n }\n\n element.style[camel] = addPxToStyle(camel, value)\n }\n}\n\nfunction each (element, properties) {\n for (var k in properties) {\n if (properties.hasOwnProperty(k)) {\n style(element, k, properties[k])\n }\n }\n}\n\nfunction detect (cssProp) {\n var camel = toCamelCase(cssProp)\n var result = prefix(camel)\n cache[camel] = cache[cssProp] = cache[result] = result\n return result\n}\n\nfunction set () {\n if (arguments.length === 2) {\n if (typeof arguments[1] === 'string') {\n arguments[0].style.cssText = arguments[1]\n } else {\n each(arguments[0], arguments[1])\n }\n } else {\n style(arguments[0], arguments[1], arguments[2])\n }\n}\n\nmodule.exports = set\nmodule.exports.set = set\n\nmodule.exports.get = function (element, properties) {\n if (Array.isArray(properties)) {\n return properties.reduce(function (obj, prop) {\n obj[prop] = style(element, prop || '')\n return obj\n }, {})\n } else {\n return style(element, properties || '')\n }\n}\n","import React, { useEffect, useRef, useState, } from \"react\";\nimport lottie from \"lottie-web\";\nconst useLottie = (props, style) => {\n const { animationData, loop, autoplay, initialSegment, onComplete, onLoopComplete, onEnterFrame, onSegmentStart, onConfigReady, onDataReady, onDataFailed, onLoadedImages, onDOMLoaded, onDestroy, \n // Specified here to take them out from the 'rest'\n lottieRef, renderer, name, assetsPath, rendererSettings, \n // TODO: find a better way to extract the html props to avoid specifying\n // all the props that we want to exclude (as you can see above)\n ...rest } = props;\n const [animationLoaded, setAnimationLoaded] = useState(false);\n const animationInstanceRef = useRef();\n const animationContainer = useRef(null);\n /*\n ======================================\n INTERACTION METHODS\n ======================================\n */\n /**\n * Play\n */\n const play = () => {\n var _a;\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.play();\n };\n /**\n * Stop\n */\n const stop = () => {\n var _a;\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.stop();\n };\n /**\n * Pause\n */\n const pause = () => {\n var _a;\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.pause();\n };\n /**\n * Set animation speed\n * @param speed\n */\n const setSpeed = (speed) => {\n var _a;\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.setSpeed(speed);\n };\n /**\n * Got to frame and play\n * @param value\n * @param isFrame\n */\n const goToAndPlay = (value, isFrame) => {\n var _a;\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.goToAndPlay(value, isFrame);\n };\n /**\n * Got to frame and stop\n * @param value\n * @param isFrame\n */\n const goToAndStop = (value, isFrame) => {\n var _a;\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.goToAndStop(value, isFrame);\n };\n /**\n * Set animation direction\n * @param direction\n */\n const setDirection = (direction) => {\n var _a;\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.setDirection(direction);\n };\n /**\n * Play animation segments\n * @param segments\n * @param forceFlag\n */\n const playSegments = (segments, forceFlag) => {\n var _a;\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.playSegments(segments, forceFlag);\n };\n /**\n * Set sub frames\n * @param useSubFrames\n */\n const setSubframe = (useSubFrames) => {\n var _a;\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.setSubframe(useSubFrames);\n };\n /**\n * Get animation duration\n * @param inFrames\n */\n const getDuration = (inFrames) => {\n var _a;\n return (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.getDuration(inFrames);\n };\n /**\n * Destroy animation\n */\n const destroy = () => {\n var _a;\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.destroy();\n };\n /*\n ======================================\n LOTTIE\n ======================================\n */\n /**\n * Load a new animation, and if it's the case, destroy the previous one\n * @param {Object} forcedConfigs\n */\n const loadAnimation = (forcedConfigs = {}) => {\n var _a;\n // Return if the container ref is null\n if (!animationContainer.current) {\n return;\n }\n // Destroy any previous instance\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.destroy();\n // Build the animation configuration\n const config = {\n ...props,\n ...forcedConfigs,\n container: animationContainer.current,\n };\n // Save the animation instance\n animationInstanceRef.current = lottie.loadAnimation(config);\n setAnimationLoaded(!!animationInstanceRef.current);\n };\n /**\n * Initialize and listen for changes that affect the animation state\n */\n // Reinitialize when animation data changed\n useEffect(() => {\n loadAnimation();\n }, [animationData]);\n // Update the loop state\n useEffect(() => {\n if (!animationInstanceRef.current) {\n return;\n }\n animationInstanceRef.current.loop = !!loop;\n if (loop && animationInstanceRef.current.isPaused) {\n animationInstanceRef.current.play();\n }\n }, [loop]);\n // Update the autoplay state\n useEffect(() => {\n if (!animationInstanceRef.current) {\n return;\n }\n animationInstanceRef.current.autoplay = !!autoplay;\n }, [autoplay]);\n // Update the initial segment state\n useEffect(() => {\n if (!animationInstanceRef.current) {\n return;\n }\n // When null should reset to default animation length\n if (!initialSegment) {\n animationInstanceRef.current.resetSegments(false);\n return;\n }\n // If it's not a valid segment, do nothing\n if (!Array.isArray(initialSegment) || !initialSegment.length) {\n return;\n }\n // If the current position it's not in the new segment\n // set the current position to start\n if (animationInstanceRef.current.currentRawFrame < initialSegment[0] ||\n animationInstanceRef.current.currentRawFrame > initialSegment[1]) {\n animationInstanceRef.current.currentRawFrame = initialSegment[0];\n }\n // Update the segment\n animationInstanceRef.current.setSegment(initialSegment[0], initialSegment[1]);\n }, [initialSegment]);\n /*\n ======================================\n EVENTS\n ======================================\n */\n /**\n * Reinitialize listener on change\n */\n useEffect(() => {\n const partialListeners = [\n { name: \"complete\", handler: onComplete },\n { name: \"loopComplete\", handler: onLoopComplete },\n { name: \"enterFrame\", handler: onEnterFrame },\n { name: \"segmentStart\", handler: onSegmentStart },\n { name: \"config_ready\", handler: onConfigReady },\n { name: \"data_ready\", handler: onDataReady },\n { name: \"data_failed\", handler: onDataFailed },\n { name: \"loaded_images\", handler: onLoadedImages },\n { name: \"DOMLoaded\", handler: onDOMLoaded },\n { name: \"destroy\", handler: onDestroy },\n ];\n const listeners = partialListeners.filter((listener) => listener.handler != null);\n if (!listeners.length) {\n return;\n }\n const deregisterList = listeners.map(\n /**\n * Handle the process of adding an event listener\n * @param {Listener} listener\n * @return {Function} Function that deregister the listener\n */\n (listener) => {\n var _a;\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.addEventListener(listener.name, listener.handler);\n // Return a function to deregister this listener\n return () => {\n var _a;\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener(listener.name, listener.handler);\n };\n });\n // Deregister listeners on unmount\n return () => {\n deregisterList.forEach((deregister) => deregister());\n };\n }, [\n onComplete,\n onLoopComplete,\n onEnterFrame,\n onSegmentStart,\n onConfigReady,\n onDataReady,\n onDataFailed,\n onLoadedImages,\n onDOMLoaded,\n onDestroy,\n ]);\n /**\n * Build the animation view\n */\n const View = React.createElement(\"div\", { style: style, ref: animationContainer, ...rest });\n return {\n View,\n play,\n stop,\n pause,\n setSpeed,\n goToAndStop,\n goToAndPlay,\n setDirection,\n playSegments,\n setSubframe,\n getDuration,\n destroy,\n animationContainerRef: animationContainer,\n animationLoaded,\n animationItem: animationInstanceRef.current,\n };\n};\nexport default useLottie;\n","import { useEffect } from \"react\";\n// helpers\nexport function getContainerVisibility(container) {\n const { top, height } = container.getBoundingClientRect();\n const current = window.innerHeight - top;\n const max = window.innerHeight + height;\n return current / max;\n}\nexport function getContainerCursorPosition(container, cursorX, cursorY) {\n const { top, left, width, height } = container.getBoundingClientRect();\n const x = (cursorX - left) / width;\n const y = (cursorY - top) / height;\n return { x, y };\n}\nexport const useInitInteractivity = ({ wrapperRef, animationItem, mode, actions, }) => {\n useEffect(() => {\n const wrapper = wrapperRef.current;\n if (!wrapper || !animationItem) {\n return;\n }\n animationItem.stop();\n const scrollModeHandler = () => {\n let assignedSegment = null;\n const scrollHandler = () => {\n const currentPercent = getContainerVisibility(wrapper);\n // Find the first action that satisfies the current position conditions\n const action = actions.find(({ visibility }) => visibility &&\n currentPercent >= visibility[0] &&\n currentPercent <= visibility[1]);\n // Skip if no matching action was found!\n if (!action) {\n return;\n }\n if (action.type === \"seek\" &&\n action.visibility &&\n action.frames.length === 2) {\n // Seek: Go to a frame based on player scroll position action\n const frameToGo = action.frames[0] +\n Math.ceil(((currentPercent - action.visibility[0]) /\n (action.visibility[1] - action.visibility[0])) *\n action.frames[1]);\n //! goToAndStop must be relative to the start of the current segment\n animationItem.goToAndStop(frameToGo - animationItem.firstFrame - 1, true);\n }\n if (action.type === \"loop\") {\n // Loop: Loop a given frames\n if (assignedSegment === null) {\n // if not playing any segments currently. play those segments and save to state\n animationItem.playSegments(action.frames, true);\n assignedSegment = action.frames;\n }\n else {\n // if playing any segments currently.\n //check if segments in state are equal to the frames selected by action\n if (assignedSegment !== action.frames) {\n // if they are not equal. new segments are to be loaded\n animationItem.playSegments(action.frames, true);\n assignedSegment = action.frames;\n }\n else if (animationItem.isPaused) {\n // if they are equal the play method must be called only if lottie is paused\n animationItem.playSegments(action.frames, true);\n assignedSegment = action.frames;\n }\n }\n }\n if (action.type === \"play\" && animationItem.isPaused) {\n // Play: Reset segments and continue playing full animation from current position\n animationItem.resetSegments(true);\n animationItem.play();\n }\n if (action.type === \"stop\") {\n // Stop: Stop playback\n animationItem.goToAndStop(action.frames[0] - animationItem.firstFrame - 1, true);\n }\n };\n document.addEventListener(\"scroll\", scrollHandler);\n return () => {\n document.removeEventListener(\"scroll\", scrollHandler);\n };\n };\n const cursorModeHandler = () => {\n const handleCursor = (_x, _y) => {\n let x = _x;\n let y = _y;\n // Resolve cursor position if cursor is inside container\n if (x !== -1 && y !== -1) {\n // Get container cursor position\n const pos = getContainerCursorPosition(wrapper, x, y);\n // Use the resolved position\n x = pos.x;\n y = pos.y;\n }\n // Find the first action that satisfies the current position conditions\n const action = actions.find(({ position }) => {\n if (position &&\n Array.isArray(position.x) &&\n Array.isArray(position.y)) {\n return (x >= position.x[0] &&\n x <= position.x[1] &&\n y >= position.y[0] &&\n y <= position.y[1]);\n }\n if (position &&\n !Number.isNaN(position.x) &&\n !Number.isNaN(position.y)) {\n return x === position.x && y === position.y;\n }\n return false;\n });\n // Skip if no matching action was found!\n if (!action) {\n return;\n }\n // Process action types:\n if (action.type === \"seek\" &&\n action.position &&\n Array.isArray(action.position.x) &&\n Array.isArray(action.position.y) &&\n action.frames.length === 2) {\n // Seek: Go to a frame based on player scroll position action\n const xPercent = (x - action.position.x[0]) /\n (action.position.x[1] - action.position.x[0]);\n const yPercent = (y - action.position.y[0]) /\n (action.position.y[1] - action.position.y[0]);\n animationItem.playSegments(action.frames, true);\n animationItem.goToAndStop(Math.ceil(((xPercent + yPercent) / 2) *\n (action.frames[1] - action.frames[0])), true);\n }\n if (action.type === \"loop\") {\n animationItem.playSegments(action.frames, true);\n }\n if (action.type === \"play\") {\n // Play: Reset segments and continue playing full animation from current position\n if (animationItem.isPaused) {\n animationItem.resetSegments(false);\n }\n animationItem.playSegments(action.frames);\n }\n if (action.type === \"stop\") {\n animationItem.goToAndStop(action.frames[0], true);\n }\n };\n const mouseMoveHandler = (ev) => {\n handleCursor(ev.clientX, ev.clientY);\n };\n const mouseOutHandler = () => {\n handleCursor(-1, -1);\n };\n wrapper.addEventListener(\"mousemove\", mouseMoveHandler);\n wrapper.addEventListener(\"mouseout\", mouseOutHandler);\n return () => {\n wrapper.removeEventListener(\"mousemove\", mouseMoveHandler);\n wrapper.removeEventListener(\"mouseout\", mouseOutHandler);\n };\n };\n switch (mode) {\n case \"scroll\":\n return scrollModeHandler();\n case \"cursor\":\n return cursorModeHandler();\n }\n }, [mode, animationItem]);\n};\nconst useLottieInteractivity = ({ actions, mode, lottieObj, }) => {\n const { animationItem, View } = lottieObj;\n useInitInteractivity({ actions, animationItem, mode, wrapperRef: lottieObj.animationContainerRef });\n return View;\n};\nexport default useLottieInteractivity;\n","import { useEffect } from \"react\";\nimport useLottie from \"../hooks/useLottie\";\nimport useLottieInteractivity from \"../hooks/useLottieInteractivity\";\nconst Lottie = (props) => {\n var _a;\n const { style, interactivity, ...lottieProps } = props;\n /**\n * Initialize the 'useLottie' hook\n */\n const { View, play, stop, pause, setSpeed, goToAndStop, goToAndPlay, setDirection, playSegments, setSubframe, getDuration, destroy, animationContainerRef, animationLoaded, animationItem, } = useLottie(lottieProps, style);\n /**\n * Make the hook variables/methods available through the provided 'lottieRef'\n */\n useEffect(() => {\n if (props.lottieRef) {\n props.lottieRef.current = {\n play,\n stop,\n pause,\n setSpeed,\n goToAndPlay,\n goToAndStop,\n setDirection,\n playSegments,\n setSubframe,\n getDuration,\n destroy,\n animationContainerRef,\n animationLoaded,\n animationItem,\n };\n }\n }, [(_a = props.lottieRef) === null || _a === void 0 ? void 0 : _a.current]);\n if (interactivity) {\n return useLottieInteractivity({\n lottieObj: {\n View,\n play,\n stop,\n pause,\n setSpeed,\n goToAndStop,\n goToAndPlay,\n setDirection,\n playSegments,\n setSubframe,\n getDuration,\n destroy,\n animationContainerRef,\n animationLoaded,\n animationItem,\n },\n ...interactivity,\n });\n }\n return View;\n};\nexport default Lottie;\n","import LottiePlayer from \"lottie-web\";\nimport Lottie from \"./components/Lottie\";\nimport useLottie from \"./hooks/useLottie\";\nimport useLottieInteractivity from \"./hooks/useLottieInteractivity\";\n// TODO: For backward compatibility, remove on v2\nexport const Animator = Lottie;\nexport const useAnimator = useLottie;\nexport { LottiePlayer, useLottie, useLottieInteractivity };\nexport default Lottie;\nexport * from \"./types\";\n","(typeof navigator !== \"undefined\") && (function (global, factory) {\r\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n typeof define === 'function' && define.amd ? define(factory) :\r\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lottie = factory());\r\n})(this, (function () { 'use strict';\r\n\r\n var svgNS = 'http://www.w3.org/2000/svg';\r\n var locationHref = '';\r\n var _useWebWorker = false;\r\n var initialDefaultFrame = -999999;\r\n\r\n var setWebWorker = function setWebWorker(flag) {\r\n _useWebWorker = !!flag;\r\n };\r\n\r\n var getWebWorker = function getWebWorker() {\r\n return _useWebWorker;\r\n };\r\n\r\n var setLocationHref = function setLocationHref(value) {\r\n locationHref = value;\r\n };\r\n\r\n var getLocationHref = function getLocationHref() {\r\n return locationHref;\r\n };\r\n\r\n function createTag(type) {\r\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\r\n return document.createElement(type);\r\n }\r\n\r\n function extendPrototype(sources, destination) {\r\n var i;\r\n var len = sources.length;\r\n var sourcePrototype;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n sourcePrototype = sources[i].prototype;\r\n\r\n for (var attr in sourcePrototype) {\r\n if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\r\n }\r\n }\r\n }\r\n\r\n function getDescriptor(object, prop) {\r\n return Object.getOwnPropertyDescriptor(object, prop);\r\n }\r\n\r\n function createProxyFunction(prototype) {\r\n function ProxyFunction() {}\r\n\r\n ProxyFunction.prototype = prototype;\r\n return ProxyFunction;\r\n }\r\n\r\n // import Howl from '../../3rd_party/howler';\r\n var audioControllerFactory = function () {\r\n function AudioController(audioFactory) {\r\n this.audios = [];\r\n this.audioFactory = audioFactory;\r\n this._volume = 1;\r\n this._isMuted = false;\r\n }\r\n\r\n AudioController.prototype = {\r\n addAudio: function addAudio(audio) {\r\n this.audios.push(audio);\r\n },\r\n pause: function pause() {\r\n var i;\r\n var len = this.audios.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.audios[i].pause();\r\n }\r\n },\r\n resume: function resume() {\r\n var i;\r\n var len = this.audios.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.audios[i].resume();\r\n }\r\n },\r\n setRate: function setRate(rateValue) {\r\n var i;\r\n var len = this.audios.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.audios[i].setRate(rateValue);\r\n }\r\n },\r\n createAudio: function createAudio(assetPath) {\r\n if (this.audioFactory) {\r\n return this.audioFactory(assetPath);\r\n }\r\n\r\n if (window.Howl) {\r\n return new window.Howl({\r\n src: [assetPath]\r\n });\r\n }\r\n\r\n return {\r\n isPlaying: false,\r\n play: function play() {\r\n this.isPlaying = true;\r\n },\r\n seek: function seek() {\r\n this.isPlaying = false;\r\n },\r\n playing: function playing() {},\r\n rate: function rate() {},\r\n setVolume: function setVolume() {}\r\n };\r\n },\r\n setAudioFactory: function setAudioFactory(audioFactory) {\r\n this.audioFactory = audioFactory;\r\n },\r\n setVolume: function setVolume(value) {\r\n this._volume = value;\r\n\r\n this._updateVolume();\r\n },\r\n mute: function mute() {\r\n this._isMuted = true;\r\n\r\n this._updateVolume();\r\n },\r\n unmute: function unmute() {\r\n this._isMuted = false;\r\n\r\n this._updateVolume();\r\n },\r\n getVolume: function getVolume() {\r\n return this._volume;\r\n },\r\n _updateVolume: function _updateVolume() {\r\n var i;\r\n var len = this.audios.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\r\n }\r\n }\r\n };\r\n return function () {\r\n return new AudioController();\r\n };\r\n }();\r\n\r\n var createTypedArray = function () {\r\n function createRegularArray(type, len) {\r\n var i = 0;\r\n var arr = [];\r\n var value;\r\n\r\n switch (type) {\r\n case 'int16':\r\n case 'uint8c':\r\n value = 1;\r\n break;\r\n\r\n default:\r\n value = 1.1;\r\n break;\r\n }\r\n\r\n for (i = 0; i < len; i += 1) {\r\n arr.push(value);\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n function createTypedArrayFactory(type, len) {\r\n if (type === 'float32') {\r\n return new Float32Array(len);\r\n }\r\n\r\n if (type === 'int16') {\r\n return new Int16Array(len);\r\n }\r\n\r\n if (type === 'uint8c') {\r\n return new Uint8ClampedArray(len);\r\n }\r\n\r\n return createRegularArray(type, len);\r\n }\r\n\r\n if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\r\n return createTypedArrayFactory;\r\n }\r\n\r\n return createRegularArray;\r\n }();\r\n\r\n function createSizedArray(len) {\r\n return Array.apply(null, {\r\n length: len\r\n });\r\n }\r\n\r\n function _typeof$6(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$6 = function _typeof(obj) { return typeof obj; }; } else { _typeof$6 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$6(obj); }\r\n var subframeEnabled = true;\r\n var expressionsPlugin = null;\r\n var idPrefix = '';\r\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\r\n var _shouldRoundValues = false;\r\n var bmPow = Math.pow;\r\n var bmSqrt = Math.sqrt;\r\n var bmFloor = Math.floor;\r\n var bmMax = Math.max;\r\n var bmMin = Math.min;\r\n var BMMath = {};\r\n\r\n (function () {\r\n var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];\r\n var i;\r\n var len = propertyNames.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\r\n }\r\n })();\r\n\r\n function ProjectInterface$1() {\r\n return {};\r\n }\r\n\r\n BMMath.random = Math.random;\r\n\r\n BMMath.abs = function (val) {\r\n var tOfVal = _typeof$6(val);\r\n\r\n if (tOfVal === 'object' && val.length) {\r\n var absArr = createSizedArray(val.length);\r\n var i;\r\n var len = val.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n absArr[i] = Math.abs(val[i]);\r\n }\r\n\r\n return absArr;\r\n }\r\n\r\n return Math.abs(val);\r\n };\r\n\r\n var defaultCurveSegments = 150;\r\n var degToRads = Math.PI / 180;\r\n var roundCorner = 0.5519;\r\n\r\n function roundValues(flag) {\r\n _shouldRoundValues = !!flag;\r\n }\r\n\r\n function bmRnd(value) {\r\n if (_shouldRoundValues) {\r\n return Math.round(value);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n function styleDiv(element) {\r\n element.style.position = 'absolute';\r\n element.style.top = 0;\r\n element.style.left = 0;\r\n element.style.display = 'block';\r\n element.style.transformOrigin = '0 0';\r\n element.style.webkitTransformOrigin = '0 0';\r\n element.style.backfaceVisibility = 'visible';\r\n element.style.webkitBackfaceVisibility = 'visible';\r\n element.style.transformStyle = 'preserve-3d';\r\n element.style.webkitTransformStyle = 'preserve-3d';\r\n element.style.mozTransformStyle = 'preserve-3d';\r\n }\r\n\r\n function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\r\n this.type = type;\r\n this.currentTime = currentTime;\r\n this.totalTime = totalTime;\r\n this.direction = frameMultiplier < 0 ? -1 : 1;\r\n }\r\n\r\n function BMCompleteEvent(type, frameMultiplier) {\r\n this.type = type;\r\n this.direction = frameMultiplier < 0 ? -1 : 1;\r\n }\r\n\r\n function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\r\n this.type = type;\r\n this.currentLoop = currentLoop;\r\n this.totalLoops = totalLoops;\r\n this.direction = frameMultiplier < 0 ? -1 : 1;\r\n }\r\n\r\n function BMSegmentStartEvent(type, firstFrame, totalFrames) {\r\n this.type = type;\r\n this.firstFrame = firstFrame;\r\n this.totalFrames = totalFrames;\r\n }\r\n\r\n function BMDestroyEvent(type, target) {\r\n this.type = type;\r\n this.target = target;\r\n }\r\n\r\n function BMRenderFrameErrorEvent(nativeError, currentTime) {\r\n this.type = 'renderFrameError';\r\n this.nativeError = nativeError;\r\n this.currentTime = currentTime;\r\n }\r\n\r\n function BMConfigErrorEvent(nativeError) {\r\n this.type = 'configError';\r\n this.nativeError = nativeError;\r\n }\r\n\r\n function BMAnimationConfigErrorEvent(type, nativeError) {\r\n this.type = type;\r\n this.nativeError = nativeError;\r\n }\r\n\r\n var createElementID = function () {\r\n var _count = 0;\r\n return function createID() {\r\n _count += 1;\r\n return idPrefix + '__lottie_element_' + _count;\r\n };\r\n }();\r\n\r\n function HSVtoRGB(h, s, v) {\r\n var r;\r\n var g;\r\n var b;\r\n var i;\r\n var f;\r\n var p;\r\n var q;\r\n var t;\r\n i = Math.floor(h * 6);\r\n f = h * 6 - i;\r\n p = v * (1 - s);\r\n q = v * (1 - f * s);\r\n t = v * (1 - (1 - f) * s);\r\n\r\n switch (i % 6) {\r\n case 0:\r\n r = v;\r\n g = t;\r\n b = p;\r\n break;\r\n\r\n case 1:\r\n r = q;\r\n g = v;\r\n b = p;\r\n break;\r\n\r\n case 2:\r\n r = p;\r\n g = v;\r\n b = t;\r\n break;\r\n\r\n case 3:\r\n r = p;\r\n g = q;\r\n b = v;\r\n break;\r\n\r\n case 4:\r\n r = t;\r\n g = p;\r\n b = v;\r\n break;\r\n\r\n case 5:\r\n r = v;\r\n g = p;\r\n b = q;\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n\r\n return [r, g, b];\r\n }\r\n\r\n function RGBtoHSV(r, g, b) {\r\n var max = Math.max(r, g, b);\r\n var min = Math.min(r, g, b);\r\n var d = max - min;\r\n var h;\r\n var s = max === 0 ? 0 : d / max;\r\n var v = max / 255;\r\n\r\n switch (max) {\r\n case min:\r\n h = 0;\r\n break;\r\n\r\n case r:\r\n h = g - b + d * (g < b ? 6 : 0);\r\n h /= 6 * d;\r\n break;\r\n\r\n case g:\r\n h = b - r + d * 2;\r\n h /= 6 * d;\r\n break;\r\n\r\n case b:\r\n h = r - g + d * 4;\r\n h /= 6 * d;\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n\r\n return [h, s, v];\r\n }\r\n\r\n function addSaturationToRGB(color, offset) {\r\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\r\n hsv[1] += offset;\r\n\r\n if (hsv[1] > 1) {\r\n hsv[1] = 1;\r\n } else if (hsv[1] <= 0) {\r\n hsv[1] = 0;\r\n }\r\n\r\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\r\n }\r\n\r\n function addBrightnessToRGB(color, offset) {\r\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\r\n hsv[2] += offset;\r\n\r\n if (hsv[2] > 1) {\r\n hsv[2] = 1;\r\n } else if (hsv[2] < 0) {\r\n hsv[2] = 0;\r\n }\r\n\r\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\r\n }\r\n\r\n function addHueToRGB(color, offset) {\r\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\r\n hsv[0] += offset / 360;\r\n\r\n if (hsv[0] > 1) {\r\n hsv[0] -= 1;\r\n } else if (hsv[0] < 0) {\r\n hsv[0] += 1;\r\n }\r\n\r\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\r\n }\r\n\r\n var rgbToHex = function () {\r\n var colorMap = [];\r\n var i;\r\n var hex;\r\n\r\n for (i = 0; i < 256; i += 1) {\r\n hex = i.toString(16);\r\n colorMap[i] = hex.length === 1 ? '0' + hex : hex;\r\n }\r\n\r\n return function (r, g, b) {\r\n if (r < 0) {\r\n r = 0;\r\n }\r\n\r\n if (g < 0) {\r\n g = 0;\r\n }\r\n\r\n if (b < 0) {\r\n b = 0;\r\n }\r\n\r\n return '#' + colorMap[r] + colorMap[g] + colorMap[b];\r\n };\r\n }();\r\n\r\n var setSubframeEnabled = function setSubframeEnabled(flag) {\r\n subframeEnabled = !!flag;\r\n };\r\n\r\n var getSubframeEnabled = function getSubframeEnabled() {\r\n return subframeEnabled;\r\n };\r\n\r\n var setExpressionsPlugin = function setExpressionsPlugin(value) {\r\n expressionsPlugin = value;\r\n };\r\n\r\n var getExpressionsPlugin = function getExpressionsPlugin() {\r\n return expressionsPlugin;\r\n };\r\n\r\n var setDefaultCurveSegments = function setDefaultCurveSegments(value) {\r\n defaultCurveSegments = value;\r\n };\r\n\r\n var getDefaultCurveSegments = function getDefaultCurveSegments() {\r\n return defaultCurveSegments;\r\n };\r\n\r\n var setIdPrefix = function setIdPrefix(value) {\r\n idPrefix = value;\r\n };\r\n\r\n var getIdPrefix = function getIdPrefix() {\r\n return idPrefix;\r\n };\r\n\r\n function createNS(type) {\r\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\r\n return document.createElementNS(svgNS, type);\r\n }\r\n\r\n function _typeof$5(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$5 = function _typeof(obj) { return typeof obj; }; } else { _typeof$5 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$5(obj); }\r\n\r\n var dataManager = function () {\r\n var _counterId = 1;\r\n var processes = [];\r\n var workerFn;\r\n var workerInstance;\r\n var workerProxy = {\r\n onmessage: function onmessage() {},\r\n postMessage: function postMessage(path) {\r\n workerFn({\r\n data: path\r\n });\r\n }\r\n };\r\n var _workerSelf = {\r\n postMessage: function postMessage(data) {\r\n workerProxy.onmessage({\r\n data: data\r\n });\r\n }\r\n };\r\n\r\n function createWorker(fn) {\r\n if (window.Worker && window.Blob && getWebWorker()) {\r\n var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], {\r\n type: 'text/javascript'\r\n }); // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\r\n\r\n var url = URL.createObjectURL(blob);\r\n return new Worker(url);\r\n }\r\n\r\n workerFn = fn;\r\n return workerProxy;\r\n }\r\n\r\n function setupWorker() {\r\n if (!workerInstance) {\r\n workerInstance = createWorker(function workerStart(e) {\r\n function dataFunctionManager() {\r\n function completeLayers(layers, comps) {\r\n var layerData;\r\n var i;\r\n var len = layers.length;\r\n var j;\r\n var jLen;\r\n var k;\r\n var kLen;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n layerData = layers[i];\r\n\r\n if ('ks' in layerData && !layerData.completed) {\r\n layerData.completed = true;\r\n\r\n if (layerData.tt) {\r\n layers[i - 1].td = layerData.tt;\r\n }\r\n\r\n if (layerData.hasMask) {\r\n var maskProps = layerData.masksProperties;\r\n jLen = maskProps.length;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n if (maskProps[j].pt.k.i) {\r\n convertPathsToAbsoluteValues(maskProps[j].pt.k);\r\n } else {\r\n kLen = maskProps[j].pt.k.length;\r\n\r\n for (k = 0; k < kLen; k += 1) {\r\n if (maskProps[j].pt.k[k].s) {\r\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\r\n }\r\n\r\n if (maskProps[j].pt.k[k].e) {\r\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (layerData.ty === 0) {\r\n layerData.layers = findCompLayers(layerData.refId, comps);\r\n completeLayers(layerData.layers, comps);\r\n } else if (layerData.ty === 4) {\r\n completeShapes(layerData.shapes);\r\n } else if (layerData.ty === 5) {\r\n completeText(layerData);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function completeChars(chars, assets) {\r\n if (chars) {\r\n var i = 0;\r\n var len = chars.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (chars[i].t === 1) {\r\n // var compData = findComp(chars[i].data.refId, assets);\r\n chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); // chars[i].data.ip = 0;\r\n // chars[i].data.op = 99999;\r\n // chars[i].data.st = 0;\r\n // chars[i].data.sr = 1;\r\n // chars[i].w = compData.w;\r\n // chars[i].data.ks = {\r\n // a: { k: [0, 0, 0], a: 0 },\r\n // p: { k: [0, -compData.h, 0], a: 0 },\r\n // r: { k: 0, a: 0 },\r\n // s: { k: [100, 100], a: 0 },\r\n // o: { k: 100, a: 0 },\r\n // };\r\n\r\n completeLayers(chars[i].data.layers, assets);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function findComp(id, comps) {\r\n var i = 0;\r\n var len = comps.length;\r\n\r\n while (i < len) {\r\n if (comps[i].id === id) {\r\n return comps[i];\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n function findCompLayers(id, comps) {\r\n var comp = findComp(id, comps);\r\n\r\n if (comp) {\r\n if (!comp.layers.__used) {\r\n comp.layers.__used = true;\r\n return comp.layers;\r\n }\r\n\r\n return JSON.parse(JSON.stringify(comp.layers));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n function completeShapes(arr) {\r\n var i;\r\n var len = arr.length;\r\n var j;\r\n var jLen;\r\n\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n if (arr[i].ty === 'sh') {\r\n if (arr[i].ks.k.i) {\r\n convertPathsToAbsoluteValues(arr[i].ks.k);\r\n } else {\r\n jLen = arr[i].ks.k.length;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n if (arr[i].ks.k[j].s) {\r\n convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\r\n }\r\n\r\n if (arr[i].ks.k[j].e) {\r\n convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\r\n }\r\n }\r\n }\r\n } else if (arr[i].ty === 'gr') {\r\n completeShapes(arr[i].it);\r\n }\r\n }\r\n }\r\n\r\n function convertPathsToAbsoluteValues(path) {\r\n var i;\r\n var len = path.i.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n path.i[i][0] += path.v[i][0];\r\n path.i[i][1] += path.v[i][1];\r\n path.o[i][0] += path.v[i][0];\r\n path.o[i][1] += path.v[i][1];\r\n }\r\n }\r\n\r\n function checkVersion(minimum, animVersionString) {\r\n var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\r\n\r\n if (minimum[0] > animVersion[0]) {\r\n return true;\r\n }\r\n\r\n if (animVersion[0] > minimum[0]) {\r\n return false;\r\n }\r\n\r\n if (minimum[1] > animVersion[1]) {\r\n return true;\r\n }\r\n\r\n if (animVersion[1] > minimum[1]) {\r\n return false;\r\n }\r\n\r\n if (minimum[2] > animVersion[2]) {\r\n return true;\r\n }\r\n\r\n if (animVersion[2] > minimum[2]) {\r\n return false;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n var checkText = function () {\r\n var minimumVersion = [4, 4, 14];\r\n\r\n function updateTextLayer(textLayer) {\r\n var documentData = textLayer.t.d;\r\n textLayer.t.d = {\r\n k: [{\r\n s: documentData,\r\n t: 0\r\n }]\r\n };\r\n }\r\n\r\n function iterateLayers(layers) {\r\n var i;\r\n var len = layers.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (layers[i].ty === 5) {\r\n updateTextLayer(layers[i]);\r\n }\r\n }\r\n }\r\n\r\n return function (animationData) {\r\n if (checkVersion(minimumVersion, animationData.v)) {\r\n iterateLayers(animationData.layers);\r\n\r\n if (animationData.assets) {\r\n var i;\r\n var len = animationData.assets.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (animationData.assets[i].layers) {\r\n iterateLayers(animationData.assets[i].layers);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }();\r\n\r\n var checkChars = function () {\r\n var minimumVersion = [4, 7, 99];\r\n return function (animationData) {\r\n if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\r\n var i;\r\n var len = animationData.chars.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n var charData = animationData.chars[i];\r\n\r\n if (charData.data && charData.data.shapes) {\r\n completeShapes(charData.data.shapes);\r\n charData.data.ip = 0;\r\n charData.data.op = 99999;\r\n charData.data.st = 0;\r\n charData.data.sr = 1;\r\n charData.data.ks = {\r\n p: {\r\n k: [0, 0],\r\n a: 0\r\n },\r\n s: {\r\n k: [100, 100],\r\n a: 0\r\n },\r\n a: {\r\n k: [0, 0],\r\n a: 0\r\n },\r\n r: {\r\n k: 0,\r\n a: 0\r\n },\r\n o: {\r\n k: 100,\r\n a: 0\r\n }\r\n };\r\n\r\n if (!animationData.chars[i].t) {\r\n charData.data.shapes.push({\r\n ty: 'no'\r\n });\r\n charData.data.shapes[0].it.push({\r\n p: {\r\n k: [0, 0],\r\n a: 0\r\n },\r\n s: {\r\n k: [100, 100],\r\n a: 0\r\n },\r\n a: {\r\n k: [0, 0],\r\n a: 0\r\n },\r\n r: {\r\n k: 0,\r\n a: 0\r\n },\r\n o: {\r\n k: 100,\r\n a: 0\r\n },\r\n sk: {\r\n k: 0,\r\n a: 0\r\n },\r\n sa: {\r\n k: 0,\r\n a: 0\r\n },\r\n ty: 'tr'\r\n });\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }();\r\n\r\n var checkPathProperties = function () {\r\n var minimumVersion = [5, 7, 15];\r\n\r\n function updateTextLayer(textLayer) {\r\n var pathData = textLayer.t.p;\r\n\r\n if (typeof pathData.a === 'number') {\r\n pathData.a = {\r\n a: 0,\r\n k: pathData.a\r\n };\r\n }\r\n\r\n if (typeof pathData.p === 'number') {\r\n pathData.p = {\r\n a: 0,\r\n k: pathData.p\r\n };\r\n }\r\n\r\n if (typeof pathData.r === 'number') {\r\n pathData.r = {\r\n a: 0,\r\n k: pathData.r\r\n };\r\n }\r\n }\r\n\r\n function iterateLayers(layers) {\r\n var i;\r\n var len = layers.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (layers[i].ty === 5) {\r\n updateTextLayer(layers[i]);\r\n }\r\n }\r\n }\r\n\r\n return function (animationData) {\r\n if (checkVersion(minimumVersion, animationData.v)) {\r\n iterateLayers(animationData.layers);\r\n\r\n if (animationData.assets) {\r\n var i;\r\n var len = animationData.assets.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (animationData.assets[i].layers) {\r\n iterateLayers(animationData.assets[i].layers);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }();\r\n\r\n var checkColors = function () {\r\n var minimumVersion = [4, 1, 9];\r\n\r\n function iterateShapes(shapes) {\r\n var i;\r\n var len = shapes.length;\r\n var j;\r\n var jLen;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (shapes[i].ty === 'gr') {\r\n iterateShapes(shapes[i].it);\r\n } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\r\n if (shapes[i].c.k && shapes[i].c.k[0].i) {\r\n jLen = shapes[i].c.k.length;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n if (shapes[i].c.k[j].s) {\r\n shapes[i].c.k[j].s[0] /= 255;\r\n shapes[i].c.k[j].s[1] /= 255;\r\n shapes[i].c.k[j].s[2] /= 255;\r\n shapes[i].c.k[j].s[3] /= 255;\r\n }\r\n\r\n if (shapes[i].c.k[j].e) {\r\n shapes[i].c.k[j].e[0] /= 255;\r\n shapes[i].c.k[j].e[1] /= 255;\r\n shapes[i].c.k[j].e[2] /= 255;\r\n shapes[i].c.k[j].e[3] /= 255;\r\n }\r\n }\r\n } else {\r\n shapes[i].c.k[0] /= 255;\r\n shapes[i].c.k[1] /= 255;\r\n shapes[i].c.k[2] /= 255;\r\n shapes[i].c.k[3] /= 255;\r\n }\r\n }\r\n }\r\n }\r\n\r\n function iterateLayers(layers) {\r\n var i;\r\n var len = layers.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (layers[i].ty === 4) {\r\n iterateShapes(layers[i].shapes);\r\n }\r\n }\r\n }\r\n\r\n return function (animationData) {\r\n if (checkVersion(minimumVersion, animationData.v)) {\r\n iterateLayers(animationData.layers);\r\n\r\n if (animationData.assets) {\r\n var i;\r\n var len = animationData.assets.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (animationData.assets[i].layers) {\r\n iterateLayers(animationData.assets[i].layers);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }();\r\n\r\n var checkShapes = function () {\r\n var minimumVersion = [4, 4, 18];\r\n\r\n function completeClosingShapes(arr) {\r\n var i;\r\n var len = arr.length;\r\n var j;\r\n var jLen;\r\n\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n if (arr[i].ty === 'sh') {\r\n if (arr[i].ks.k.i) {\r\n arr[i].ks.k.c = arr[i].closed;\r\n } else {\r\n jLen = arr[i].ks.k.length;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n if (arr[i].ks.k[j].s) {\r\n arr[i].ks.k[j].s[0].c = arr[i].closed;\r\n }\r\n\r\n if (arr[i].ks.k[j].e) {\r\n arr[i].ks.k[j].e[0].c = arr[i].closed;\r\n }\r\n }\r\n }\r\n } else if (arr[i].ty === 'gr') {\r\n completeClosingShapes(arr[i].it);\r\n }\r\n }\r\n }\r\n\r\n function iterateLayers(layers) {\r\n var layerData;\r\n var i;\r\n var len = layers.length;\r\n var j;\r\n var jLen;\r\n var k;\r\n var kLen;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n layerData = layers[i];\r\n\r\n if (layerData.hasMask) {\r\n var maskProps = layerData.masksProperties;\r\n jLen = maskProps.length;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n if (maskProps[j].pt.k.i) {\r\n maskProps[j].pt.k.c = maskProps[j].cl;\r\n } else {\r\n kLen = maskProps[j].pt.k.length;\r\n\r\n for (k = 0; k < kLen; k += 1) {\r\n if (maskProps[j].pt.k[k].s) {\r\n maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\r\n }\r\n\r\n if (maskProps[j].pt.k[k].e) {\r\n maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (layerData.ty === 4) {\r\n completeClosingShapes(layerData.shapes);\r\n }\r\n }\r\n }\r\n\r\n return function (animationData) {\r\n if (checkVersion(minimumVersion, animationData.v)) {\r\n iterateLayers(animationData.layers);\r\n\r\n if (animationData.assets) {\r\n var i;\r\n var len = animationData.assets.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (animationData.assets[i].layers) {\r\n iterateLayers(animationData.assets[i].layers);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }();\r\n\r\n function completeData(animationData) {\r\n if (animationData.__complete) {\r\n return;\r\n }\r\n\r\n checkColors(animationData);\r\n checkText(animationData);\r\n checkChars(animationData);\r\n checkPathProperties(animationData);\r\n checkShapes(animationData);\r\n completeLayers(animationData.layers, animationData.assets);\r\n completeChars(animationData.chars, animationData.assets);\r\n animationData.__complete = true;\r\n }\r\n\r\n function completeText(data) {\r\n if (data.t.a.length === 0 && !('m' in data.t.p)) {// data.singleShape = true;\r\n }\r\n }\r\n\r\n var moduleOb = {};\r\n moduleOb.completeData = completeData;\r\n moduleOb.checkColors = checkColors;\r\n moduleOb.checkChars = checkChars;\r\n moduleOb.checkPathProperties = checkPathProperties;\r\n moduleOb.checkShapes = checkShapes;\r\n moduleOb.completeLayers = completeLayers;\r\n return moduleOb;\r\n }\r\n\r\n if (!_workerSelf.dataManager) {\r\n _workerSelf.dataManager = dataFunctionManager();\r\n }\r\n\r\n if (!_workerSelf.assetLoader) {\r\n _workerSelf.assetLoader = function () {\r\n function formatResponse(xhr) {\r\n // using typeof doubles the time of execution of this method,\r\n // so if available, it's better to use the header to validate the type\r\n var contentTypeHeader = xhr.getResponseHeader('content-type');\r\n\r\n if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\r\n return xhr.response;\r\n }\r\n\r\n if (xhr.response && _typeof$5(xhr.response) === 'object') {\r\n return xhr.response;\r\n }\r\n\r\n if (xhr.response && typeof xhr.response === 'string') {\r\n return JSON.parse(xhr.response);\r\n }\r\n\r\n if (xhr.responseText) {\r\n return JSON.parse(xhr.responseText);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n function loadAsset(path, fullPath, callback, errorCallback) {\r\n var response;\r\n var xhr = new XMLHttpRequest(); // set responseType after calling open or IE will break.\r\n\r\n try {\r\n // This crashes on Android WebView prior to KitKat\r\n xhr.responseType = 'json';\r\n } catch (err) {} // eslint-disable-line no-empty\r\n\r\n\r\n xhr.onreadystatechange = function () {\r\n if (xhr.readyState === 4) {\r\n if (xhr.status === 200) {\r\n response = formatResponse(xhr);\r\n callback(response);\r\n } else {\r\n try {\r\n response = formatResponse(xhr);\r\n callback(response);\r\n } catch (err) {\r\n if (errorCallback) {\r\n errorCallback(err);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n try {\r\n xhr.open('GET', path, true);\r\n } catch (error) {\r\n xhr.open('GET', fullPath + '/' + path, true);\r\n }\r\n\r\n xhr.send();\r\n }\r\n\r\n return {\r\n load: loadAsset\r\n };\r\n }();\r\n }\r\n\r\n if (e.data.type === 'loadAnimation') {\r\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\r\n _workerSelf.dataManager.completeData(data);\r\n\r\n _workerSelf.postMessage({\r\n id: e.data.id,\r\n payload: data,\r\n status: 'success'\r\n });\r\n }, function () {\r\n _workerSelf.postMessage({\r\n id: e.data.id,\r\n status: 'error'\r\n });\r\n });\r\n } else if (e.data.type === 'complete') {\r\n var animation = e.data.animation;\r\n\r\n _workerSelf.dataManager.completeData(animation);\r\n\r\n _workerSelf.postMessage({\r\n id: e.data.id,\r\n payload: animation,\r\n status: 'success'\r\n });\r\n } else if (e.data.type === 'loadData') {\r\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\r\n _workerSelf.postMessage({\r\n id: e.data.id,\r\n payload: data,\r\n status: 'success'\r\n });\r\n }, function () {\r\n _workerSelf.postMessage({\r\n id: e.data.id,\r\n status: 'error'\r\n });\r\n });\r\n }\r\n });\r\n\r\n workerInstance.onmessage = function (event) {\r\n var data = event.data;\r\n var id = data.id;\r\n var process = processes[id];\r\n processes[id] = null;\r\n\r\n if (data.status === 'success') {\r\n process.onComplete(data.payload);\r\n } else if (process.onError) {\r\n process.onError();\r\n }\r\n };\r\n }\r\n }\r\n\r\n function createProcess(onComplete, onError) {\r\n _counterId += 1;\r\n var id = 'processId_' + _counterId;\r\n processes[id] = {\r\n onComplete: onComplete,\r\n onError: onError\r\n };\r\n return id;\r\n }\r\n\r\n function loadAnimation(path, onComplete, onError) {\r\n setupWorker();\r\n var processId = createProcess(onComplete, onError);\r\n workerInstance.postMessage({\r\n type: 'loadAnimation',\r\n path: path,\r\n fullPath: window.location.origin + window.location.pathname,\r\n id: processId\r\n });\r\n }\r\n\r\n function loadData(path, onComplete, onError) {\r\n setupWorker();\r\n var processId = createProcess(onComplete, onError);\r\n workerInstance.postMessage({\r\n type: 'loadData',\r\n path: path,\r\n fullPath: window.location.origin + window.location.pathname,\r\n id: processId\r\n });\r\n }\r\n\r\n function completeAnimation(anim, onComplete, onError) {\r\n setupWorker();\r\n var processId = createProcess(onComplete, onError);\r\n workerInstance.postMessage({\r\n type: 'complete',\r\n animation: anim,\r\n id: processId\r\n });\r\n }\r\n\r\n return {\r\n loadAnimation: loadAnimation,\r\n loadData: loadData,\r\n completeAnimation: completeAnimation\r\n };\r\n }();\r\n\r\n var ImagePreloader = function () {\r\n var proxyImage = function () {\r\n var canvas = createTag('canvas');\r\n canvas.width = 1;\r\n canvas.height = 1;\r\n var ctx = canvas.getContext('2d');\r\n ctx.fillStyle = 'rgba(0,0,0,0)';\r\n ctx.fillRect(0, 0, 1, 1);\r\n return canvas;\r\n }();\r\n\r\n function imageLoaded() {\r\n this.loadedAssets += 1;\r\n\r\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\r\n if (this.imagesLoadedCb) {\r\n this.imagesLoadedCb(null);\r\n }\r\n }\r\n }\r\n\r\n function footageLoaded() {\r\n this.loadedFootagesCount += 1;\r\n\r\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\r\n if (this.imagesLoadedCb) {\r\n this.imagesLoadedCb(null);\r\n }\r\n }\r\n }\r\n\r\n function getAssetsPath(assetData, assetsPath, originalPath) {\r\n var path = '';\r\n\r\n if (assetData.e) {\r\n path = assetData.p;\r\n } else if (assetsPath) {\r\n var imagePath = assetData.p;\r\n\r\n if (imagePath.indexOf('images/') !== -1) {\r\n imagePath = imagePath.split('/')[1];\r\n }\r\n\r\n path = assetsPath + imagePath;\r\n } else {\r\n path = originalPath;\r\n path += assetData.u ? assetData.u : '';\r\n path += assetData.p;\r\n }\r\n\r\n return path;\r\n }\r\n\r\n function testImageLoaded(img) {\r\n var _count = 0;\r\n var intervalId = setInterval(function () {\r\n var box = img.getBBox();\r\n\r\n if (box.width || _count > 500) {\r\n this._imageLoaded();\r\n\r\n clearInterval(intervalId);\r\n }\r\n\r\n _count += 1;\r\n }.bind(this), 50);\r\n }\r\n\r\n function createImageData(assetData) {\r\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\r\n var img = createNS('image');\r\n\r\n if (isSafari) {\r\n this.testImageLoaded(img);\r\n } else {\r\n img.addEventListener('load', this._imageLoaded, false);\r\n }\r\n\r\n img.addEventListener('error', function () {\r\n ob.img = proxyImage;\r\n\r\n this._imageLoaded();\r\n }.bind(this), false);\r\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\r\n\r\n if (this._elementHelper.append) {\r\n this._elementHelper.append(img);\r\n } else {\r\n this._elementHelper.appendChild(img);\r\n }\r\n\r\n var ob = {\r\n img: img,\r\n assetData: assetData\r\n };\r\n return ob;\r\n }\r\n\r\n function createImgData(assetData) {\r\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\r\n var img = createTag('img');\r\n img.crossOrigin = 'anonymous';\r\n img.addEventListener('load', this._imageLoaded, false);\r\n img.addEventListener('error', function () {\r\n ob.img = proxyImage;\r\n\r\n this._imageLoaded();\r\n }.bind(this), false);\r\n img.src = path;\r\n var ob = {\r\n img: img,\r\n assetData: assetData\r\n };\r\n return ob;\r\n }\r\n\r\n function createFootageData(data) {\r\n var ob = {\r\n assetData: data\r\n };\r\n var path = getAssetsPath(data, this.assetsPath, this.path);\r\n dataManager.loadData(path, function (footageData) {\r\n ob.img = footageData;\r\n\r\n this._footageLoaded();\r\n }.bind(this), function () {\r\n ob.img = {};\r\n\r\n this._footageLoaded();\r\n }.bind(this));\r\n return ob;\r\n }\r\n\r\n function loadAssets(assets, cb) {\r\n this.imagesLoadedCb = cb;\r\n var i;\r\n var len = assets.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (!assets[i].layers) {\r\n if (!assets[i].t || assets[i].t === 'seq') {\r\n this.totalImages += 1;\r\n this.images.push(this._createImageData(assets[i]));\r\n } else if (assets[i].t === 3) {\r\n this.totalFootages += 1;\r\n this.images.push(this.createFootageData(assets[i]));\r\n }\r\n }\r\n }\r\n }\r\n\r\n function setPath(path) {\r\n this.path = path || '';\r\n }\r\n\r\n function setAssetsPath(path) {\r\n this.assetsPath = path || '';\r\n }\r\n\r\n function getAsset(assetData) {\r\n var i = 0;\r\n var len = this.images.length;\r\n\r\n while (i < len) {\r\n if (this.images[i].assetData === assetData) {\r\n return this.images[i].img;\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n function destroy() {\r\n this.imagesLoadedCb = null;\r\n this.images.length = 0;\r\n }\r\n\r\n function loadedImages() {\r\n return this.totalImages === this.loadedAssets;\r\n }\r\n\r\n function loadedFootages() {\r\n return this.totalFootages === this.loadedFootagesCount;\r\n }\r\n\r\n function setCacheType(type, elementHelper) {\r\n if (type === 'svg') {\r\n this._elementHelper = elementHelper;\r\n this._createImageData = this.createImageData.bind(this);\r\n } else {\r\n this._createImageData = this.createImgData.bind(this);\r\n }\r\n }\r\n\r\n function ImagePreloaderFactory() {\r\n this._imageLoaded = imageLoaded.bind(this);\r\n this._footageLoaded = footageLoaded.bind(this);\r\n this.testImageLoaded = testImageLoaded.bind(this);\r\n this.createFootageData = createFootageData.bind(this);\r\n this.assetsPath = '';\r\n this.path = '';\r\n this.totalImages = 0;\r\n this.totalFootages = 0;\r\n this.loadedAssets = 0;\r\n this.loadedFootagesCount = 0;\r\n this.imagesLoadedCb = null;\r\n this.images = [];\r\n }\r\n\r\n ImagePreloaderFactory.prototype = {\r\n loadAssets: loadAssets,\r\n setAssetsPath: setAssetsPath,\r\n setPath: setPath,\r\n loadedImages: loadedImages,\r\n loadedFootages: loadedFootages,\r\n destroy: destroy,\r\n getAsset: getAsset,\r\n createImgData: createImgData,\r\n createImageData: createImageData,\r\n imageLoaded: imageLoaded,\r\n footageLoaded: footageLoaded,\r\n setCacheType: setCacheType\r\n };\r\n return ImagePreloaderFactory;\r\n }();\r\n\r\n function BaseEvent() {}\r\n\r\n BaseEvent.prototype = {\r\n triggerEvent: function triggerEvent(eventName, args) {\r\n if (this._cbs[eventName]) {\r\n var callbacks = this._cbs[eventName];\r\n\r\n for (var i = 0; i < callbacks.length; i += 1) {\r\n callbacks[i](args);\r\n }\r\n }\r\n },\r\n addEventListener: function addEventListener(eventName, callback) {\r\n if (!this._cbs[eventName]) {\r\n this._cbs[eventName] = [];\r\n }\r\n\r\n this._cbs[eventName].push(callback);\r\n\r\n return function () {\r\n this.removeEventListener(eventName, callback);\r\n }.bind(this);\r\n },\r\n removeEventListener: function removeEventListener(eventName, callback) {\r\n if (!callback) {\r\n this._cbs[eventName] = null;\r\n } else if (this._cbs[eventName]) {\r\n var i = 0;\r\n var len = this._cbs[eventName].length;\r\n\r\n while (i < len) {\r\n if (this._cbs[eventName][i] === callback) {\r\n this._cbs[eventName].splice(i, 1);\r\n\r\n i -= 1;\r\n len -= 1;\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n if (!this._cbs[eventName].length) {\r\n this._cbs[eventName] = null;\r\n }\r\n }\r\n }\r\n };\r\n\r\n var markerParser = function () {\r\n function parsePayloadLines(payload) {\r\n var lines = payload.split('\\r\\n');\r\n var keys = {};\r\n var line;\r\n var keysCount = 0;\r\n\r\n for (var i = 0; i < lines.length; i += 1) {\r\n line = lines[i].split(':');\r\n\r\n if (line.length === 2) {\r\n keys[line[0]] = line[1].trim();\r\n keysCount += 1;\r\n }\r\n }\r\n\r\n if (keysCount === 0) {\r\n throw new Error();\r\n }\r\n\r\n return keys;\r\n }\r\n\r\n return function (_markers) {\r\n var markers = [];\r\n\r\n for (var i = 0; i < _markers.length; i += 1) {\r\n var _marker = _markers[i];\r\n var markerData = {\r\n time: _marker.tm,\r\n duration: _marker.dr\r\n };\r\n\r\n try {\r\n markerData.payload = JSON.parse(_markers[i].cm);\r\n } catch (_) {\r\n try {\r\n markerData.payload = parsePayloadLines(_markers[i].cm);\r\n } catch (__) {\r\n markerData.payload = {\r\n name: _markers[i]\r\n };\r\n }\r\n }\r\n\r\n markers.push(markerData);\r\n }\r\n\r\n return markers;\r\n };\r\n }();\r\n\r\n var ProjectInterface = function () {\r\n function registerComposition(comp) {\r\n this.compositions.push(comp);\r\n }\r\n\r\n return function () {\r\n function _thisProjectFunction(name) {\r\n var i = 0;\r\n var len = this.compositions.length;\r\n\r\n while (i < len) {\r\n if (this.compositions[i].data && this.compositions[i].data.nm === name) {\r\n if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\r\n this.compositions[i].prepareFrame(this.currentFrame);\r\n }\r\n\r\n return this.compositions[i].compInterface;\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _thisProjectFunction.compositions = [];\r\n _thisProjectFunction.currentFrame = 0;\r\n _thisProjectFunction.registerComposition = registerComposition;\r\n return _thisProjectFunction;\r\n };\r\n }();\r\n\r\n var renderers = {};\r\n\r\n var registerRenderer = function registerRenderer(key, value) {\r\n renderers[key] = value;\r\n };\r\n\r\n function getRenderer(key) {\r\n return renderers[key];\r\n }\r\n\r\n function _typeof$4(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$4 = function _typeof(obj) { return typeof obj; }; } else { _typeof$4 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$4(obj); }\r\n\r\n var AnimationItem = function AnimationItem() {\r\n this._cbs = [];\r\n this.name = '';\r\n this.path = '';\r\n this.isLoaded = false;\r\n this.currentFrame = 0;\r\n this.currentRawFrame = 0;\r\n this.firstFrame = 0;\r\n this.totalFrames = 0;\r\n this.frameRate = 0;\r\n this.frameMult = 0;\r\n this.playSpeed = 1;\r\n this.playDirection = 1;\r\n this.playCount = 0;\r\n this.animationData = {};\r\n this.assets = [];\r\n this.isPaused = true;\r\n this.autoplay = false;\r\n this.loop = true;\r\n this.renderer = null;\r\n this.animationID = createElementID();\r\n this.assetsPath = '';\r\n this.timeCompleted = 0;\r\n this.segmentPos = 0;\r\n this.isSubframeEnabled = getSubframeEnabled();\r\n this.segments = [];\r\n this._idle = true;\r\n this._completedLoop = false;\r\n this.projectInterface = ProjectInterface();\r\n this.imagePreloader = new ImagePreloader();\r\n this.audioController = audioControllerFactory();\r\n this.markers = [];\r\n this.configAnimation = this.configAnimation.bind(this);\r\n this.onSetupError = this.onSetupError.bind(this);\r\n this.onSegmentComplete = this.onSegmentComplete.bind(this);\r\n this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);\r\n };\r\n\r\n extendPrototype([BaseEvent], AnimationItem);\r\n\r\n AnimationItem.prototype.setParams = function (params) {\r\n if (params.wrapper || params.container) {\r\n this.wrapper = params.wrapper || params.container;\r\n }\r\n\r\n var animType = 'svg';\r\n\r\n if (params.animType) {\r\n animType = params.animType;\r\n } else if (params.renderer) {\r\n animType = params.renderer;\r\n }\r\n\r\n var RendererClass = getRenderer(animType);\r\n this.renderer = new RendererClass(this, params.rendererSettings);\r\n this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\r\n this.renderer.setProjectInterface(this.projectInterface);\r\n this.animType = animType;\r\n\r\n if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {\r\n this.loop = true;\r\n } else if (params.loop === false) {\r\n this.loop = false;\r\n } else {\r\n this.loop = parseInt(params.loop, 10);\r\n }\r\n\r\n this.autoplay = 'autoplay' in params ? params.autoplay : true;\r\n this.name = params.name ? params.name : '';\r\n this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\r\n this.assetsPath = params.assetsPath;\r\n this.initialSegment = params.initialSegment;\r\n\r\n if (params.audioFactory) {\r\n this.audioController.setAudioFactory(params.audioFactory);\r\n }\r\n\r\n if (params.animationData) {\r\n this.setupAnimation(params.animationData);\r\n } else if (params.path) {\r\n if (params.path.lastIndexOf('\\\\') !== -1) {\r\n this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\r\n } else {\r\n this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\r\n }\r\n\r\n this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\r\n this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\r\n dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError);\r\n }\r\n };\r\n\r\n AnimationItem.prototype.onSetupError = function () {\r\n this.trigger('data_failed');\r\n };\r\n\r\n AnimationItem.prototype.setupAnimation = function (data) {\r\n dataManager.completeAnimation(data, this.configAnimation);\r\n };\r\n\r\n AnimationItem.prototype.setData = function (wrapper, animationData) {\r\n if (animationData) {\r\n if (_typeof$4(animationData) !== 'object') {\r\n animationData = JSON.parse(animationData);\r\n }\r\n }\r\n\r\n var params = {\r\n wrapper: wrapper,\r\n animationData: animationData\r\n };\r\n var wrapperAttributes = wrapper.attributes;\r\n params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\r\n params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : 'canvas';\r\n var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\r\n\r\n if (loop === 'false') {\r\n params.loop = false;\r\n } else if (loop === 'true') {\r\n params.loop = true;\r\n } else if (loop !== '') {\r\n params.loop = parseInt(loop, 10);\r\n }\r\n\r\n var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;\r\n params.autoplay = autoplay !== 'false';\r\n params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\r\n var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\r\n\r\n if (prerender === 'false') {\r\n params.prerender = false;\r\n }\r\n\r\n this.setParams(params);\r\n };\r\n\r\n AnimationItem.prototype.includeLayers = function (data) {\r\n if (data.op > this.animationData.op) {\r\n this.animationData.op = data.op;\r\n this.totalFrames = Math.floor(data.op - this.animationData.ip);\r\n }\r\n\r\n var layers = this.animationData.layers;\r\n var i;\r\n var len = layers.length;\r\n var newLayers = data.layers;\r\n var j;\r\n var jLen = newLayers.length;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n i = 0;\r\n\r\n while (i < len) {\r\n if (layers[i].id === newLayers[j].id) {\r\n layers[i] = newLayers[j];\r\n break;\r\n }\r\n\r\n i += 1;\r\n }\r\n }\r\n\r\n if (data.chars || data.fonts) {\r\n this.renderer.globalData.fontManager.addChars(data.chars);\r\n this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\r\n }\r\n\r\n if (data.assets) {\r\n len = data.assets.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.animationData.assets.push(data.assets[i]);\r\n }\r\n }\r\n\r\n this.animationData.__complete = false;\r\n dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\r\n };\r\n\r\n AnimationItem.prototype.onSegmentComplete = function (data) {\r\n this.animationData = data;\r\n var expressionsPlugin = getExpressionsPlugin();\r\n\r\n if (expressionsPlugin) {\r\n expressionsPlugin.initExpressions(this);\r\n }\r\n\r\n this.loadNextSegment();\r\n };\r\n\r\n AnimationItem.prototype.loadNextSegment = function () {\r\n var segments = this.animationData.segments;\r\n\r\n if (!segments || segments.length === 0 || !this.autoloadSegments) {\r\n this.trigger('data_ready');\r\n this.timeCompleted = this.totalFrames;\r\n return;\r\n }\r\n\r\n var segment = segments.shift();\r\n this.timeCompleted = segment.time * this.frameRate;\r\n var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\r\n this.segmentPos += 1;\r\n dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\r\n this.trigger('data_failed');\r\n }.bind(this));\r\n };\r\n\r\n AnimationItem.prototype.loadSegments = function () {\r\n var segments = this.animationData.segments;\r\n\r\n if (!segments) {\r\n this.timeCompleted = this.totalFrames;\r\n }\r\n\r\n this.loadNextSegment();\r\n };\r\n\r\n AnimationItem.prototype.imagesLoaded = function () {\r\n this.trigger('loaded_images');\r\n this.checkLoaded();\r\n };\r\n\r\n AnimationItem.prototype.preloadImages = function () {\r\n this.imagePreloader.setAssetsPath(this.assetsPath);\r\n this.imagePreloader.setPath(this.path);\r\n this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\r\n };\r\n\r\n AnimationItem.prototype.configAnimation = function (animData) {\r\n if (!this.renderer) {\r\n return;\r\n }\r\n\r\n try {\r\n this.animationData = animData;\r\n\r\n if (this.initialSegment) {\r\n this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\r\n this.firstFrame = Math.round(this.initialSegment[0]);\r\n } else {\r\n this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\r\n this.firstFrame = Math.round(this.animationData.ip);\r\n }\r\n\r\n this.renderer.configAnimation(animData);\r\n\r\n if (!animData.assets) {\r\n animData.assets = [];\r\n }\r\n\r\n this.assets = this.animationData.assets;\r\n this.frameRate = this.animationData.fr;\r\n this.frameMult = this.animationData.fr / 1000;\r\n this.renderer.searchExtraCompositions(animData.assets);\r\n this.markers = markerParser(animData.markers || []);\r\n this.trigger('config_ready');\r\n this.preloadImages();\r\n this.loadSegments();\r\n this.updaFrameModifier();\r\n this.waitForFontsLoaded();\r\n\r\n if (this.isPaused) {\r\n this.audioController.pause();\r\n }\r\n } catch (error) {\r\n this.triggerConfigError(error);\r\n }\r\n };\r\n\r\n AnimationItem.prototype.waitForFontsLoaded = function () {\r\n if (!this.renderer) {\r\n return;\r\n }\r\n\r\n if (this.renderer.globalData.fontManager.isLoaded) {\r\n this.checkLoaded();\r\n } else {\r\n setTimeout(this.waitForFontsLoaded.bind(this), 20);\r\n }\r\n };\r\n\r\n AnimationItem.prototype.checkLoaded = function () {\r\n if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) {\r\n this.isLoaded = true;\r\n var expressionsPlugin = getExpressionsPlugin();\r\n\r\n if (expressionsPlugin) {\r\n expressionsPlugin.initExpressions(this);\r\n }\r\n\r\n this.renderer.initItems();\r\n setTimeout(function () {\r\n this.trigger('DOMLoaded');\r\n }.bind(this), 0);\r\n this.gotoFrame();\r\n\r\n if (this.autoplay) {\r\n this.play();\r\n }\r\n }\r\n };\r\n\r\n AnimationItem.prototype.resize = function () {\r\n this.renderer.updateContainerSize();\r\n };\r\n\r\n AnimationItem.prototype.setSubframe = function (flag) {\r\n this.isSubframeEnabled = !!flag;\r\n };\r\n\r\n AnimationItem.prototype.gotoFrame = function () {\r\n this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\r\n\r\n if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\r\n this.currentFrame = this.timeCompleted;\r\n }\r\n\r\n this.trigger('enterFrame');\r\n this.renderFrame();\r\n this.trigger('drawnFrame');\r\n };\r\n\r\n AnimationItem.prototype.renderFrame = function () {\r\n if (this.isLoaded === false || !this.renderer) {\r\n return;\r\n }\r\n\r\n try {\r\n this.renderer.renderFrame(this.currentFrame + this.firstFrame);\r\n } catch (error) {\r\n this.triggerRenderFrameError(error);\r\n }\r\n };\r\n\r\n AnimationItem.prototype.play = function (name) {\r\n if (name && this.name !== name) {\r\n return;\r\n }\r\n\r\n if (this.isPaused === true) {\r\n this.isPaused = false;\r\n this.trigger('_pause');\r\n this.audioController.resume();\r\n\r\n if (this._idle) {\r\n this._idle = false;\r\n this.trigger('_active');\r\n }\r\n }\r\n };\r\n\r\n AnimationItem.prototype.pause = function (name) {\r\n if (name && this.name !== name) {\r\n return;\r\n }\r\n\r\n if (this.isPaused === false) {\r\n this.isPaused = true;\r\n this.trigger('_play');\r\n this._idle = true;\r\n this.trigger('_idle');\r\n this.audioController.pause();\r\n }\r\n };\r\n\r\n AnimationItem.prototype.togglePause = function (name) {\r\n if (name && this.name !== name) {\r\n return;\r\n }\r\n\r\n if (this.isPaused === true) {\r\n this.play();\r\n } else {\r\n this.pause();\r\n }\r\n };\r\n\r\n AnimationItem.prototype.stop = function (name) {\r\n if (name && this.name !== name) {\r\n return;\r\n }\r\n\r\n this.pause();\r\n this.playCount = 0;\r\n this._completedLoop = false;\r\n this.setCurrentRawFrameValue(0);\r\n };\r\n\r\n AnimationItem.prototype.getMarkerData = function (markerName) {\r\n var marker;\r\n\r\n for (var i = 0; i < this.markers.length; i += 1) {\r\n marker = this.markers[i];\r\n\r\n if (marker.payload && marker.payload.name.cm === markerName) {\r\n return marker;\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n\r\n AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\r\n if (name && this.name !== name) {\r\n return;\r\n }\r\n\r\n var numValue = Number(value);\r\n\r\n if (isNaN(numValue)) {\r\n var marker = this.getMarkerData(value);\r\n\r\n if (marker) {\r\n this.goToAndStop(marker.time, true);\r\n }\r\n } else if (isFrame) {\r\n this.setCurrentRawFrameValue(value);\r\n } else {\r\n this.setCurrentRawFrameValue(value * this.frameModifier);\r\n }\r\n\r\n this.pause();\r\n };\r\n\r\n AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\r\n if (name && this.name !== name) {\r\n return;\r\n }\r\n\r\n var numValue = Number(value);\r\n\r\n if (isNaN(numValue)) {\r\n var marker = this.getMarkerData(value);\r\n\r\n if (marker) {\r\n if (!marker.duration) {\r\n this.goToAndStop(marker.time, true);\r\n } else {\r\n this.playSegments([marker.time, marker.time + marker.duration], true);\r\n }\r\n }\r\n } else {\r\n this.goToAndStop(numValue, isFrame, name);\r\n }\r\n\r\n this.play();\r\n };\r\n\r\n AnimationItem.prototype.advanceTime = function (value) {\r\n if (this.isPaused === true || this.isLoaded === false) {\r\n return;\r\n }\r\n\r\n var nextValue = this.currentRawFrame + value * this.frameModifier;\r\n var _isComplete = false; // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\r\n // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\r\n\r\n if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\r\n if (!this.loop || this.playCount === this.loop) {\r\n if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\r\n _isComplete = true;\r\n nextValue = this.totalFrames - 1;\r\n }\r\n } else if (nextValue >= this.totalFrames) {\r\n this.playCount += 1;\r\n\r\n if (!this.checkSegments(nextValue % this.totalFrames)) {\r\n this.setCurrentRawFrameValue(nextValue % this.totalFrames);\r\n this._completedLoop = true;\r\n this.trigger('loopComplete');\r\n }\r\n } else {\r\n this.setCurrentRawFrameValue(nextValue);\r\n }\r\n } else if (nextValue < 0) {\r\n if (!this.checkSegments(nextValue % this.totalFrames)) {\r\n if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\r\n // eslint-disable-line no-plusplus\r\n this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\r\n\r\n if (!this._completedLoop) {\r\n this._completedLoop = true;\r\n } else {\r\n this.trigger('loopComplete');\r\n }\r\n } else {\r\n _isComplete = true;\r\n nextValue = 0;\r\n }\r\n }\r\n } else {\r\n this.setCurrentRawFrameValue(nextValue);\r\n }\r\n\r\n if (_isComplete) {\r\n this.setCurrentRawFrameValue(nextValue);\r\n this.pause();\r\n this.trigger('complete');\r\n }\r\n };\r\n\r\n AnimationItem.prototype.adjustSegment = function (arr, offset) {\r\n this.playCount = 0;\r\n\r\n if (arr[1] < arr[0]) {\r\n if (this.frameModifier > 0) {\r\n if (this.playSpeed < 0) {\r\n this.setSpeed(-this.playSpeed);\r\n } else {\r\n this.setDirection(-1);\r\n }\r\n }\r\n\r\n this.totalFrames = arr[0] - arr[1];\r\n this.timeCompleted = this.totalFrames;\r\n this.firstFrame = arr[1];\r\n this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\r\n } else if (arr[1] > arr[0]) {\r\n if (this.frameModifier < 0) {\r\n if (this.playSpeed < 0) {\r\n this.setSpeed(-this.playSpeed);\r\n } else {\r\n this.setDirection(1);\r\n }\r\n }\r\n\r\n this.totalFrames = arr[1] - arr[0];\r\n this.timeCompleted = this.totalFrames;\r\n this.firstFrame = arr[0];\r\n this.setCurrentRawFrameValue(0.001 + offset);\r\n }\r\n\r\n this.trigger('segmentStart');\r\n };\r\n\r\n AnimationItem.prototype.setSegment = function (init, end) {\r\n var pendingFrame = -1;\r\n\r\n if (this.isPaused) {\r\n if (this.currentRawFrame + this.firstFrame < init) {\r\n pendingFrame = init;\r\n } else if (this.currentRawFrame + this.firstFrame > end) {\r\n pendingFrame = end - init;\r\n }\r\n }\r\n\r\n this.firstFrame = init;\r\n this.totalFrames = end - init;\r\n this.timeCompleted = this.totalFrames;\r\n\r\n if (pendingFrame !== -1) {\r\n this.goToAndStop(pendingFrame, true);\r\n }\r\n };\r\n\r\n AnimationItem.prototype.playSegments = function (arr, forceFlag) {\r\n if (forceFlag) {\r\n this.segments.length = 0;\r\n }\r\n\r\n if (_typeof$4(arr[0]) === 'object') {\r\n var i;\r\n var len = arr.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.segments.push(arr[i]);\r\n }\r\n } else {\r\n this.segments.push(arr);\r\n }\r\n\r\n if (this.segments.length && forceFlag) {\r\n this.adjustSegment(this.segments.shift(), 0);\r\n }\r\n\r\n if (this.isPaused) {\r\n this.play();\r\n }\r\n };\r\n\r\n AnimationItem.prototype.resetSegments = function (forceFlag) {\r\n this.segments.length = 0;\r\n this.segments.push([this.animationData.ip, this.animationData.op]);\r\n\r\n if (forceFlag) {\r\n this.checkSegments(0);\r\n }\r\n };\r\n\r\n AnimationItem.prototype.checkSegments = function (offset) {\r\n if (this.segments.length) {\r\n this.adjustSegment(this.segments.shift(), offset);\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n AnimationItem.prototype.destroy = function (name) {\r\n if (name && this.name !== name || !this.renderer) {\r\n return;\r\n }\r\n\r\n this.renderer.destroy();\r\n this.imagePreloader.destroy();\r\n this.trigger('destroy');\r\n this._cbs = null;\r\n this.onEnterFrame = null;\r\n this.onLoopComplete = null;\r\n this.onComplete = null;\r\n this.onSegmentStart = null;\r\n this.onDestroy = null;\r\n this.renderer = null;\r\n this.renderer = null;\r\n this.imagePreloader = null;\r\n this.projectInterface = null;\r\n };\r\n\r\n AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\r\n this.currentRawFrame = value;\r\n this.gotoFrame();\r\n };\r\n\r\n AnimationItem.prototype.setSpeed = function (val) {\r\n this.playSpeed = val;\r\n this.updaFrameModifier();\r\n };\r\n\r\n AnimationItem.prototype.setDirection = function (val) {\r\n this.playDirection = val < 0 ? -1 : 1;\r\n this.updaFrameModifier();\r\n };\r\n\r\n AnimationItem.prototype.setVolume = function (val, name) {\r\n if (name && this.name !== name) {\r\n return;\r\n }\r\n\r\n this.audioController.setVolume(val);\r\n };\r\n\r\n AnimationItem.prototype.getVolume = function () {\r\n return this.audioController.getVolume();\r\n };\r\n\r\n AnimationItem.prototype.mute = function (name) {\r\n if (name && this.name !== name) {\r\n return;\r\n }\r\n\r\n this.audioController.mute();\r\n };\r\n\r\n AnimationItem.prototype.unmute = function (name) {\r\n if (name && this.name !== name) {\r\n return;\r\n }\r\n\r\n this.audioController.unmute();\r\n };\r\n\r\n AnimationItem.prototype.updaFrameModifier = function () {\r\n this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\r\n this.audioController.setRate(this.playSpeed * this.playDirection);\r\n };\r\n\r\n AnimationItem.prototype.getPath = function () {\r\n return this.path;\r\n };\r\n\r\n AnimationItem.prototype.getAssetsPath = function (assetData) {\r\n var path = '';\r\n\r\n if (assetData.e) {\r\n path = assetData.p;\r\n } else if (this.assetsPath) {\r\n var imagePath = assetData.p;\r\n\r\n if (imagePath.indexOf('images/') !== -1) {\r\n imagePath = imagePath.split('/')[1];\r\n }\r\n\r\n path = this.assetsPath + imagePath;\r\n } else {\r\n path = this.path;\r\n path += assetData.u ? assetData.u : '';\r\n path += assetData.p;\r\n }\r\n\r\n return path;\r\n };\r\n\r\n AnimationItem.prototype.getAssetData = function (id) {\r\n var i = 0;\r\n var len = this.assets.length;\r\n\r\n while (i < len) {\r\n if (id === this.assets[i].id) {\r\n return this.assets[i];\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n AnimationItem.prototype.hide = function () {\r\n this.renderer.hide();\r\n };\r\n\r\n AnimationItem.prototype.show = function () {\r\n this.renderer.show();\r\n };\r\n\r\n AnimationItem.prototype.getDuration = function (isFrame) {\r\n return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\r\n };\r\n\r\n AnimationItem.prototype.updateDocumentData = function (path, documentData, index) {\r\n try {\r\n var element = this.renderer.getElementByPath(path);\r\n element.updateDocumentData(documentData, index);\r\n } catch (error) {// TODO: decide how to handle catch case\r\n }\r\n };\r\n\r\n AnimationItem.prototype.trigger = function (name) {\r\n if (this._cbs && this._cbs[name]) {\r\n switch (name) {\r\n case 'enterFrame':\r\n this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\r\n break;\r\n\r\n case 'drawnFrame':\r\n this.drawnFrameEvent.currentTime = this.currentFrame;\r\n this.drawnFrameEvent.totalTime = this.totalFrames;\r\n this.drawnFrameEvent.direction = this.frameModifier;\r\n this.triggerEvent(name, this.drawnFrameEvent);\r\n break;\r\n\r\n case 'loopComplete':\r\n this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\r\n break;\r\n\r\n case 'complete':\r\n this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\r\n break;\r\n\r\n case 'segmentStart':\r\n this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\r\n break;\r\n\r\n case 'destroy':\r\n this.triggerEvent(name, new BMDestroyEvent(name, this));\r\n break;\r\n\r\n default:\r\n this.triggerEvent(name);\r\n }\r\n }\r\n\r\n if (name === 'enterFrame' && this.onEnterFrame) {\r\n this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\r\n }\r\n\r\n if (name === 'loopComplete' && this.onLoopComplete) {\r\n this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\r\n }\r\n\r\n if (name === 'complete' && this.onComplete) {\r\n this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\r\n }\r\n\r\n if (name === 'segmentStart' && this.onSegmentStart) {\r\n this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\r\n }\r\n\r\n if (name === 'destroy' && this.onDestroy) {\r\n this.onDestroy.call(this, new BMDestroyEvent(name, this));\r\n }\r\n };\r\n\r\n AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\r\n var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\r\n this.triggerEvent('error', error);\r\n\r\n if (this.onError) {\r\n this.onError.call(this, error);\r\n }\r\n };\r\n\r\n AnimationItem.prototype.triggerConfigError = function (nativeError) {\r\n var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\r\n this.triggerEvent('error', error);\r\n\r\n if (this.onError) {\r\n this.onError.call(this, error);\r\n }\r\n };\r\n\r\n var animationManager = function () {\r\n var moduleOb = {};\r\n var registeredAnimations = [];\r\n var initTime = 0;\r\n var len = 0;\r\n var playingAnimationsNum = 0;\r\n var _stopped = true;\r\n var _isFrozen = false;\r\n\r\n function removeElement(ev) {\r\n var i = 0;\r\n var animItem = ev.target;\r\n\r\n while (i < len) {\r\n if (registeredAnimations[i].animation === animItem) {\r\n registeredAnimations.splice(i, 1);\r\n i -= 1;\r\n len -= 1;\r\n\r\n if (!animItem.isPaused) {\r\n subtractPlayingCount();\r\n }\r\n }\r\n\r\n i += 1;\r\n }\r\n }\r\n\r\n function registerAnimation(element, animationData) {\r\n if (!element) {\r\n return null;\r\n }\r\n\r\n var i = 0;\r\n\r\n while (i < len) {\r\n if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\r\n return registeredAnimations[i].animation;\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n var animItem = new AnimationItem();\r\n setupAnimation(animItem, element);\r\n animItem.setData(element, animationData);\r\n return animItem;\r\n }\r\n\r\n function getRegisteredAnimations() {\r\n var i;\r\n var lenAnims = registeredAnimations.length;\r\n var animations = [];\r\n\r\n for (i = 0; i < lenAnims; i += 1) {\r\n animations.push(registeredAnimations[i].animation);\r\n }\r\n\r\n return animations;\r\n }\r\n\r\n function addPlayingCount() {\r\n playingAnimationsNum += 1;\r\n activate();\r\n }\r\n\r\n function subtractPlayingCount() {\r\n playingAnimationsNum -= 1;\r\n }\r\n\r\n function setupAnimation(animItem, element) {\r\n animItem.addEventListener('destroy', removeElement);\r\n animItem.addEventListener('_active', addPlayingCount);\r\n animItem.addEventListener('_idle', subtractPlayingCount);\r\n registeredAnimations.push({\r\n elem: element,\r\n animation: animItem\r\n });\r\n len += 1;\r\n }\r\n\r\n function loadAnimation(params) {\r\n var animItem = new AnimationItem();\r\n setupAnimation(animItem, null);\r\n animItem.setParams(params);\r\n return animItem;\r\n }\r\n\r\n function setSpeed(val, animation) {\r\n var i;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.setSpeed(val, animation);\r\n }\r\n }\r\n\r\n function setDirection(val, animation) {\r\n var i;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.setDirection(val, animation);\r\n }\r\n }\r\n\r\n function play(animation) {\r\n var i;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.play(animation);\r\n }\r\n }\r\n\r\n function resume(nowTime) {\r\n var elapsedTime = nowTime - initTime;\r\n var i;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.advanceTime(elapsedTime);\r\n }\r\n\r\n initTime = nowTime;\r\n\r\n if (playingAnimationsNum && !_isFrozen) {\r\n window.requestAnimationFrame(resume);\r\n } else {\r\n _stopped = true;\r\n }\r\n }\r\n\r\n function first(nowTime) {\r\n initTime = nowTime;\r\n window.requestAnimationFrame(resume);\r\n }\r\n\r\n function pause(animation) {\r\n var i;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.pause(animation);\r\n }\r\n }\r\n\r\n function goToAndStop(value, isFrame, animation) {\r\n var i;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\r\n }\r\n }\r\n\r\n function stop(animation) {\r\n var i;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.stop(animation);\r\n }\r\n }\r\n\r\n function togglePause(animation) {\r\n var i;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.togglePause(animation);\r\n }\r\n }\r\n\r\n function destroy(animation) {\r\n var i;\r\n\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n registeredAnimations[i].animation.destroy(animation);\r\n }\r\n }\r\n\r\n function searchAnimations(animationData, standalone, renderer) {\r\n var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\r\n var i;\r\n var lenAnims = animElements.length;\r\n\r\n for (i = 0; i < lenAnims; i += 1) {\r\n if (renderer) {\r\n animElements[i].setAttribute('data-bm-type', renderer);\r\n }\r\n\r\n registerAnimation(animElements[i], animationData);\r\n }\r\n\r\n if (standalone && lenAnims === 0) {\r\n if (!renderer) {\r\n renderer = 'svg';\r\n }\r\n\r\n var body = document.getElementsByTagName('body')[0];\r\n body.innerText = '';\r\n var div = createTag('div');\r\n div.style.width = '100%';\r\n div.style.height = '100%';\r\n div.setAttribute('data-bm-type', renderer);\r\n body.appendChild(div);\r\n registerAnimation(div, animationData);\r\n }\r\n }\r\n\r\n function resize() {\r\n var i;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.resize();\r\n }\r\n }\r\n\r\n function activate() {\r\n if (!_isFrozen && playingAnimationsNum) {\r\n if (_stopped) {\r\n window.requestAnimationFrame(first);\r\n _stopped = false;\r\n }\r\n }\r\n }\r\n\r\n function freeze() {\r\n _isFrozen = true;\r\n }\r\n\r\n function unfreeze() {\r\n _isFrozen = false;\r\n activate();\r\n }\r\n\r\n function setVolume(val, animation) {\r\n var i;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.setVolume(val, animation);\r\n }\r\n }\r\n\r\n function mute(animation) {\r\n var i;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.mute(animation);\r\n }\r\n }\r\n\r\n function unmute(animation) {\r\n var i;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.unmute(animation);\r\n }\r\n }\r\n\r\n moduleOb.registerAnimation = registerAnimation;\r\n moduleOb.loadAnimation = loadAnimation;\r\n moduleOb.setSpeed = setSpeed;\r\n moduleOb.setDirection = setDirection;\r\n moduleOb.play = play;\r\n moduleOb.pause = pause;\r\n moduleOb.stop = stop;\r\n moduleOb.togglePause = togglePause;\r\n moduleOb.searchAnimations = searchAnimations;\r\n moduleOb.resize = resize; // moduleOb.start = start;\r\n\r\n moduleOb.goToAndStop = goToAndStop;\r\n moduleOb.destroy = destroy;\r\n moduleOb.freeze = freeze;\r\n moduleOb.unfreeze = unfreeze;\r\n moduleOb.setVolume = setVolume;\r\n moduleOb.mute = mute;\r\n moduleOb.unmute = unmute;\r\n moduleOb.getRegisteredAnimations = getRegisteredAnimations;\r\n return moduleOb;\r\n }();\r\n\r\n /* eslint-disable */\r\n var BezierFactory = function () {\r\n /**\r\n * BezierEasing - use bezier curve for transition easing function\r\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n *\r\n * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n * Usage:\r\n * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n *\r\n */\r\n var ob = {};\r\n ob.getBezierEasing = getBezierEasing;\r\n var beziers = {};\r\n\r\n function getBezierEasing(a, b, c, d, nm) {\r\n var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\r\n\r\n if (beziers[str]) {\r\n return beziers[str];\r\n }\r\n\r\n var bezEasing = new BezierEasing([a, b, c, d]);\r\n beziers[str] = bezEasing;\r\n return bezEasing;\r\n } // These values are established by empiricism with tests (tradeoff: performance VS precision)\r\n\r\n\r\n var NEWTON_ITERATIONS = 4;\r\n var NEWTON_MIN_SLOPE = 0.001;\r\n var SUBDIVISION_PRECISION = 0.0000001;\r\n var SUBDIVISION_MAX_ITERATIONS = 10;\r\n var kSplineTableSize = 11;\r\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\r\n var float32ArraySupported = typeof Float32Array === 'function';\r\n\r\n function A(aA1, aA2) {\r\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\r\n }\r\n\r\n function B(aA1, aA2) {\r\n return 3.0 * aA2 - 6.0 * aA1;\r\n }\r\n\r\n function C(aA1) {\r\n return 3.0 * aA1;\r\n } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\r\n\r\n\r\n function calcBezier(aT, aA1, aA2) {\r\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\r\n } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\r\n\r\n\r\n function getSlope(aT, aA1, aA2) {\r\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\r\n }\r\n\r\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\r\n var currentX,\r\n currentT,\r\n i = 0;\r\n\r\n do {\r\n currentT = aA + (aB - aA) / 2.0;\r\n currentX = calcBezier(currentT, mX1, mX2) - aX;\r\n\r\n if (currentX > 0.0) {\r\n aB = currentT;\r\n } else {\r\n aA = currentT;\r\n }\r\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\r\n\r\n return currentT;\r\n }\r\n\r\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\r\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\r\n var currentSlope = getSlope(aGuessT, mX1, mX2);\r\n if (currentSlope === 0.0) return aGuessT;\r\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\r\n aGuessT -= currentX / currentSlope;\r\n }\r\n\r\n return aGuessT;\r\n }\r\n /**\r\n * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n */\r\n\r\n\r\n function BezierEasing(points) {\r\n this._p = points;\r\n this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\r\n this._precomputed = false;\r\n this.get = this.get.bind(this);\r\n }\r\n\r\n BezierEasing.prototype = {\r\n get: function get(x) {\r\n var mX1 = this._p[0],\r\n mY1 = this._p[1],\r\n mX2 = this._p[2],\r\n mY2 = this._p[3];\r\n if (!this._precomputed) this._precompute();\r\n if (mX1 === mY1 && mX2 === mY2) return x; // linear\r\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\r\n\r\n if (x === 0) return 0;\r\n if (x === 1) return 1;\r\n return calcBezier(this._getTForX(x), mY1, mY2);\r\n },\r\n // Private part\r\n _precompute: function _precompute() {\r\n var mX1 = this._p[0],\r\n mY1 = this._p[1],\r\n mX2 = this._p[2],\r\n mY2 = this._p[3];\r\n this._precomputed = true;\r\n\r\n if (mX1 !== mY1 || mX2 !== mY2) {\r\n this._calcSampleValues();\r\n }\r\n },\r\n _calcSampleValues: function _calcSampleValues() {\r\n var mX1 = this._p[0],\r\n mX2 = this._p[2];\r\n\r\n for (var i = 0; i < kSplineTableSize; ++i) {\r\n this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\r\n }\r\n },\r\n\r\n /**\r\n * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n */\r\n _getTForX: function _getTForX(aX) {\r\n var mX1 = this._p[0],\r\n mX2 = this._p[2],\r\n mSampleValues = this._mSampleValues;\r\n var intervalStart = 0.0;\r\n var currentSample = 1;\r\n var lastSample = kSplineTableSize - 1;\r\n\r\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\r\n intervalStart += kSampleStepSize;\r\n }\r\n\r\n --currentSample; // Interpolate to provide an initial guess for t\r\n\r\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\r\n var guessForT = intervalStart + dist * kSampleStepSize;\r\n var initialSlope = getSlope(guessForT, mX1, mX2);\r\n\r\n if (initialSlope >= NEWTON_MIN_SLOPE) {\r\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\r\n }\r\n\r\n if (initialSlope === 0.0) {\r\n return guessForT;\r\n }\r\n\r\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\r\n }\r\n };\r\n return ob;\r\n }();\r\n\r\n var pooling = function () {\r\n function _double(arr) {\r\n return arr.concat(createSizedArray(arr.length));\r\n }\r\n\r\n return {\r\n \"double\": _double\r\n };\r\n }();\r\n\r\n var poolFactory = function () {\r\n return function (initialLength, _create, _release) {\r\n var _length = 0;\r\n var _maxLength = initialLength;\r\n var pool = createSizedArray(_maxLength);\r\n var ob = {\r\n newElement: newElement,\r\n release: release\r\n };\r\n\r\n function newElement() {\r\n var element;\r\n\r\n if (_length) {\r\n _length -= 1;\r\n element = pool[_length];\r\n } else {\r\n element = _create();\r\n }\r\n\r\n return element;\r\n }\r\n\r\n function release(element) {\r\n if (_length === _maxLength) {\r\n pool = pooling[\"double\"](pool);\r\n _maxLength *= 2;\r\n }\r\n\r\n if (_release) {\r\n _release(element);\r\n }\r\n\r\n pool[_length] = element;\r\n _length += 1;\r\n }\r\n\r\n return ob;\r\n };\r\n }();\r\n\r\n var bezierLengthPool = function () {\r\n function create() {\r\n return {\r\n addedLength: 0,\r\n percents: createTypedArray('float32', getDefaultCurveSegments()),\r\n lengths: createTypedArray('float32', getDefaultCurveSegments())\r\n };\r\n }\r\n\r\n return poolFactory(8, create);\r\n }();\r\n\r\n var segmentsLengthPool = function () {\r\n function create() {\r\n return {\r\n lengths: [],\r\n totalLength: 0\r\n };\r\n }\r\n\r\n function release(element) {\r\n var i;\r\n var len = element.lengths.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n bezierLengthPool.release(element.lengths[i]);\r\n }\r\n\r\n element.lengths.length = 0;\r\n }\r\n\r\n return poolFactory(8, create, release);\r\n }();\r\n\r\n function bezFunction() {\r\n var math = Math;\r\n\r\n function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\r\n var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\r\n return det1 > -0.001 && det1 < 0.001;\r\n }\r\n\r\n function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\r\n if (z1 === 0 && z2 === 0 && z3 === 0) {\r\n return pointOnLine2D(x1, y1, x2, y2, x3, y3);\r\n }\r\n\r\n var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\r\n var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\r\n var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\r\n var diffDist;\r\n\r\n if (dist1 > dist2) {\r\n if (dist1 > dist3) {\r\n diffDist = dist1 - dist2 - dist3;\r\n } else {\r\n diffDist = dist3 - dist2 - dist1;\r\n }\r\n } else if (dist3 > dist2) {\r\n diffDist = dist3 - dist2 - dist1;\r\n } else {\r\n diffDist = dist2 - dist1 - dist3;\r\n }\r\n\r\n return diffDist > -0.0001 && diffDist < 0.0001;\r\n }\r\n\r\n var getBezierLength = function () {\r\n return function (pt1, pt2, pt3, pt4) {\r\n var curveSegments = getDefaultCurveSegments();\r\n var k;\r\n var i;\r\n var len;\r\n var ptCoord;\r\n var perc;\r\n var addedLength = 0;\r\n var ptDistance;\r\n var point = [];\r\n var lastPoint = [];\r\n var lengthData = bezierLengthPool.newElement();\r\n len = pt3.length;\r\n\r\n for (k = 0; k < curveSegments; k += 1) {\r\n perc = k / (curveSegments - 1);\r\n ptDistance = 0;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\r\n point[i] = ptCoord;\r\n\r\n if (lastPoint[i] !== null) {\r\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\r\n }\r\n\r\n lastPoint[i] = point[i];\r\n }\r\n\r\n if (ptDistance) {\r\n ptDistance = bmSqrt(ptDistance);\r\n addedLength += ptDistance;\r\n }\r\n\r\n lengthData.percents[k] = perc;\r\n lengthData.lengths[k] = addedLength;\r\n }\r\n\r\n lengthData.addedLength = addedLength;\r\n return lengthData;\r\n };\r\n }();\r\n\r\n function getSegmentsLength(shapeData) {\r\n var segmentsLength = segmentsLengthPool.newElement();\r\n var closed = shapeData.c;\r\n var pathV = shapeData.v;\r\n var pathO = shapeData.o;\r\n var pathI = shapeData.i;\r\n var i;\r\n var len = shapeData._length;\r\n var lengths = segmentsLength.lengths;\r\n var totalLength = 0;\r\n\r\n for (i = 0; i < len - 1; i += 1) {\r\n lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\r\n totalLength += lengths[i].addedLength;\r\n }\r\n\r\n if (closed && len) {\r\n lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\r\n totalLength += lengths[i].addedLength;\r\n }\r\n\r\n segmentsLength.totalLength = totalLength;\r\n return segmentsLength;\r\n }\r\n\r\n function BezierData(length) {\r\n this.segmentLength = 0;\r\n this.points = new Array(length);\r\n }\r\n\r\n function PointData(partial, point) {\r\n this.partialLength = partial;\r\n this.point = point;\r\n }\r\n\r\n var buildBezierData = function () {\r\n var storedData = {};\r\n return function (pt1, pt2, pt3, pt4) {\r\n var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\r\n\r\n if (!storedData[bezierName]) {\r\n var curveSegments = getDefaultCurveSegments();\r\n var k;\r\n var i;\r\n var len;\r\n var ptCoord;\r\n var perc;\r\n var addedLength = 0;\r\n var ptDistance;\r\n var point;\r\n var lastPoint = null;\r\n\r\n if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\r\n curveSegments = 2;\r\n }\r\n\r\n var bezierData = new BezierData(curveSegments);\r\n len = pt3.length;\r\n\r\n for (k = 0; k < curveSegments; k += 1) {\r\n point = createSizedArray(len);\r\n perc = k / (curveSegments - 1);\r\n ptDistance = 0;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\r\n point[i] = ptCoord;\r\n\r\n if (lastPoint !== null) {\r\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\r\n }\r\n }\r\n\r\n ptDistance = bmSqrt(ptDistance);\r\n addedLength += ptDistance;\r\n bezierData.points[k] = new PointData(ptDistance, point);\r\n lastPoint = point;\r\n }\r\n\r\n bezierData.segmentLength = addedLength;\r\n storedData[bezierName] = bezierData;\r\n }\r\n\r\n return storedData[bezierName];\r\n };\r\n }();\r\n\r\n function getDistancePerc(perc, bezierData) {\r\n var percents = bezierData.percents;\r\n var lengths = bezierData.lengths;\r\n var len = percents.length;\r\n var initPos = bmFloor((len - 1) * perc);\r\n var lengthPos = perc * bezierData.addedLength;\r\n var lPerc = 0;\r\n\r\n if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\r\n return percents[initPos];\r\n }\r\n\r\n var dir = lengths[initPos] > lengthPos ? -1 : 1;\r\n var flag = true;\r\n\r\n while (flag) {\r\n if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\r\n lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\r\n flag = false;\r\n } else {\r\n initPos += dir;\r\n }\r\n\r\n if (initPos < 0 || initPos >= len - 1) {\r\n // FIX for TypedArrays that don't store floating point values with enough accuracy\r\n if (initPos === len - 1) {\r\n return percents[initPos];\r\n }\r\n\r\n flag = false;\r\n }\r\n }\r\n\r\n return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\r\n }\r\n\r\n function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\r\n var t1 = getDistancePerc(percent, bezierData);\r\n var u1 = 1 - t1;\r\n var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\r\n var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\r\n return [ptX, ptY];\r\n }\r\n\r\n var bezierSegmentPoints = createTypedArray('float32', 8);\r\n\r\n function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\r\n if (startPerc < 0) {\r\n startPerc = 0;\r\n } else if (startPerc > 1) {\r\n startPerc = 1;\r\n }\r\n\r\n var t0 = getDistancePerc(startPerc, bezierData);\r\n endPerc = endPerc > 1 ? 1 : endPerc;\r\n var t1 = getDistancePerc(endPerc, bezierData);\r\n var i;\r\n var len = pt1.length;\r\n var u0 = 1 - t0;\r\n var u1 = 1 - t1;\r\n var u0u0u0 = u0 * u0 * u0;\r\n var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\r\n\r\n var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\r\n\r\n var t0t0t0 = t0 * t0 * t0; //\r\n\r\n var u0u0u1 = u0 * u0 * u1;\r\n var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\r\n\r\n var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\r\n\r\n var t0t0t1 = t0 * t0 * t1; //\r\n\r\n var u0u1u1 = u0 * u1 * u1;\r\n var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\r\n\r\n var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\r\n\r\n var t0t1t1 = t0 * t1 * t1; //\r\n\r\n var u1u1u1 = u1 * u1 * u1;\r\n var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\r\n\r\n var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\r\n\r\n var t1t1t1 = t1 * t1 * t1;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\r\n\r\n bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\r\n\r\n bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\r\n\r\n bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\r\n }\r\n\r\n return bezierSegmentPoints;\r\n }\r\n\r\n return {\r\n getSegmentsLength: getSegmentsLength,\r\n getNewSegment: getNewSegment,\r\n getPointInSegment: getPointInSegment,\r\n buildBezierData: buildBezierData,\r\n pointOnLine2D: pointOnLine2D,\r\n pointOnLine3D: pointOnLine3D\r\n };\r\n }\r\n\r\n var bez = bezFunction();\r\n\r\n var PropertyFactory = function () {\r\n var initFrame = initialDefaultFrame;\r\n var mathAbs = Math.abs;\r\n\r\n function interpolateValue(frameNum, caching) {\r\n var offsetTime = this.offsetTime;\r\n var newValue;\r\n\r\n if (this.propType === 'multidimensional') {\r\n newValue = createTypedArray('float32', this.pv.length);\r\n }\r\n\r\n var iterationIndex = caching.lastIndex;\r\n var i = iterationIndex;\r\n var len = this.keyframes.length - 1;\r\n var flag = true;\r\n var keyData;\r\n var nextKeyData;\r\n var keyframeMetadata;\r\n\r\n while (flag) {\r\n keyData = this.keyframes[i];\r\n nextKeyData = this.keyframes[i + 1];\r\n\r\n if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\r\n if (keyData.h) {\r\n keyData = nextKeyData;\r\n }\r\n\r\n iterationIndex = 0;\r\n break;\r\n }\r\n\r\n if (nextKeyData.t - offsetTime > frameNum) {\r\n iterationIndex = i;\r\n break;\r\n }\r\n\r\n if (i < len - 1) {\r\n i += 1;\r\n } else {\r\n iterationIndex = 0;\r\n flag = false;\r\n }\r\n }\r\n\r\n keyframeMetadata = this.keyframesMetadata[i] || {};\r\n var k;\r\n var kLen;\r\n var perc;\r\n var jLen;\r\n var j;\r\n var fnc;\r\n var nextKeyTime = nextKeyData.t - offsetTime;\r\n var keyTime = keyData.t - offsetTime;\r\n var endValue;\r\n\r\n if (keyData.to) {\r\n if (!keyframeMetadata.bezierData) {\r\n keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\r\n }\r\n\r\n var bezierData = keyframeMetadata.bezierData;\r\n\r\n if (frameNum >= nextKeyTime || frameNum < keyTime) {\r\n var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\r\n kLen = bezierData.points[ind].point.length;\r\n\r\n for (k = 0; k < kLen; k += 1) {\r\n newValue[k] = bezierData.points[ind].point[k];\r\n } // caching._lastKeyframeIndex = -1;\r\n\r\n } else {\r\n if (keyframeMetadata.__fnct) {\r\n fnc = keyframeMetadata.__fnct;\r\n } else {\r\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\r\n keyframeMetadata.__fnct = fnc;\r\n }\r\n\r\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\r\n var distanceInLine = bezierData.segmentLength * perc;\r\n var segmentPerc;\r\n var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\r\n j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\r\n flag = true;\r\n jLen = bezierData.points.length;\r\n\r\n while (flag) {\r\n addedLength += bezierData.points[j].partialLength;\r\n\r\n if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\r\n kLen = bezierData.points[j].point.length;\r\n\r\n for (k = 0; k < kLen; k += 1) {\r\n newValue[k] = bezierData.points[j].point[k];\r\n }\r\n\r\n break;\r\n } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\r\n segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\r\n kLen = bezierData.points[j].point.length;\r\n\r\n for (k = 0; k < kLen; k += 1) {\r\n newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\r\n }\r\n\r\n break;\r\n }\r\n\r\n if (j < jLen - 1) {\r\n j += 1;\r\n } else {\r\n flag = false;\r\n }\r\n }\r\n\r\n caching._lastPoint = j;\r\n caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\r\n caching._lastKeyframeIndex = i;\r\n }\r\n } else {\r\n var outX;\r\n var outY;\r\n var inX;\r\n var inY;\r\n var keyValue;\r\n len = keyData.s.length;\r\n endValue = nextKeyData.s || keyData.e;\r\n\r\n if (this.sh && keyData.h !== 1) {\r\n if (frameNum >= nextKeyTime) {\r\n newValue[0] = endValue[0];\r\n newValue[1] = endValue[1];\r\n newValue[2] = endValue[2];\r\n } else if (frameNum <= keyTime) {\r\n newValue[0] = keyData.s[0];\r\n newValue[1] = keyData.s[1];\r\n newValue[2] = keyData.s[2];\r\n } else {\r\n var quatStart = createQuaternion(keyData.s);\r\n var quatEnd = createQuaternion(endValue);\r\n var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\r\n quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\r\n }\r\n } else {\r\n for (i = 0; i < len; i += 1) {\r\n if (keyData.h !== 1) {\r\n if (frameNum >= nextKeyTime) {\r\n perc = 1;\r\n } else if (frameNum < keyTime) {\r\n perc = 0;\r\n } else {\r\n if (keyData.o.x.constructor === Array) {\r\n if (!keyframeMetadata.__fnct) {\r\n keyframeMetadata.__fnct = [];\r\n }\r\n\r\n if (!keyframeMetadata.__fnct[i]) {\r\n outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\r\n outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\r\n inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\r\n inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\r\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\r\n keyframeMetadata.__fnct[i] = fnc;\r\n } else {\r\n fnc = keyframeMetadata.__fnct[i];\r\n }\r\n } else if (!keyframeMetadata.__fnct) {\r\n outX = keyData.o.x;\r\n outY = keyData.o.y;\r\n inX = keyData.i.x;\r\n inY = keyData.i.y;\r\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\r\n keyData.keyframeMetadata = fnc;\r\n } else {\r\n fnc = keyframeMetadata.__fnct;\r\n }\r\n\r\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\r\n }\r\n }\r\n\r\n endValue = nextKeyData.s || keyData.e;\r\n keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\r\n\r\n if (this.propType === 'multidimensional') {\r\n newValue[i] = keyValue;\r\n } else {\r\n newValue = keyValue;\r\n }\r\n }\r\n }\r\n }\r\n\r\n caching.lastIndex = iterationIndex;\r\n return newValue;\r\n } // based on @Toji's https://github.com/toji/gl-matrix/\r\n\r\n\r\n function slerp(a, b, t) {\r\n var out = [];\r\n var ax = a[0];\r\n var ay = a[1];\r\n var az = a[2];\r\n var aw = a[3];\r\n var bx = b[0];\r\n var by = b[1];\r\n var bz = b[2];\r\n var bw = b[3];\r\n var omega;\r\n var cosom;\r\n var sinom;\r\n var scale0;\r\n var scale1;\r\n cosom = ax * bx + ay * by + az * bz + aw * bw;\r\n\r\n if (cosom < 0.0) {\r\n cosom = -cosom;\r\n bx = -bx;\r\n by = -by;\r\n bz = -bz;\r\n bw = -bw;\r\n }\r\n\r\n if (1.0 - cosom > 0.000001) {\r\n omega = Math.acos(cosom);\r\n sinom = Math.sin(omega);\r\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\r\n scale1 = Math.sin(t * omega) / sinom;\r\n } else {\r\n scale0 = 1.0 - t;\r\n scale1 = t;\r\n }\r\n\r\n out[0] = scale0 * ax + scale1 * bx;\r\n out[1] = scale0 * ay + scale1 * by;\r\n out[2] = scale0 * az + scale1 * bz;\r\n out[3] = scale0 * aw + scale1 * bw;\r\n return out;\r\n }\r\n\r\n function quaternionToEuler(out, quat) {\r\n var qx = quat[0];\r\n var qy = quat[1];\r\n var qz = quat[2];\r\n var qw = quat[3];\r\n var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\r\n var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\r\n var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\r\n out[0] = heading / degToRads;\r\n out[1] = attitude / degToRads;\r\n out[2] = bank / degToRads;\r\n }\r\n\r\n function createQuaternion(values) {\r\n var heading = values[0] * degToRads;\r\n var attitude = values[1] * degToRads;\r\n var bank = values[2] * degToRads;\r\n var c1 = Math.cos(heading / 2);\r\n var c2 = Math.cos(attitude / 2);\r\n var c3 = Math.cos(bank / 2);\r\n var s1 = Math.sin(heading / 2);\r\n var s2 = Math.sin(attitude / 2);\r\n var s3 = Math.sin(bank / 2);\r\n var w = c1 * c2 * c3 - s1 * s2 * s3;\r\n var x = s1 * s2 * c3 + c1 * c2 * s3;\r\n var y = s1 * c2 * c3 + c1 * s2 * s3;\r\n var z = c1 * s2 * c3 - s1 * c2 * s3;\r\n return [x, y, z, w];\r\n }\r\n\r\n function getValueAtCurrentTime() {\r\n var frameNum = this.comp.renderedFrame - this.offsetTime;\r\n var initTime = this.keyframes[0].t - this.offsetTime;\r\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\r\n\r\n if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\r\n if (this._caching.lastFrame >= frameNum) {\r\n this._caching._lastKeyframeIndex = -1;\r\n this._caching.lastIndex = 0;\r\n }\r\n\r\n var renderResult = this.interpolateValue(frameNum, this._caching);\r\n this.pv = renderResult;\r\n }\r\n\r\n this._caching.lastFrame = frameNum;\r\n return this.pv;\r\n }\r\n\r\n function setVValue(val) {\r\n var multipliedValue;\r\n\r\n if (this.propType === 'unidimensional') {\r\n multipliedValue = val * this.mult;\r\n\r\n if (mathAbs(this.v - multipliedValue) > 0.00001) {\r\n this.v = multipliedValue;\r\n this._mdf = true;\r\n }\r\n } else {\r\n var i = 0;\r\n var len = this.v.length;\r\n\r\n while (i < len) {\r\n multipliedValue = val[i] * this.mult;\r\n\r\n if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\r\n this.v[i] = multipliedValue;\r\n this._mdf = true;\r\n }\r\n\r\n i += 1;\r\n }\r\n }\r\n }\r\n\r\n function processEffectsSequence() {\r\n if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\r\n return;\r\n }\r\n\r\n if (this.lock) {\r\n this.setVValue(this.pv);\r\n return;\r\n }\r\n\r\n this.lock = true;\r\n this._mdf = this._isFirstFrame;\r\n var i;\r\n var len = this.effectsSequence.length;\r\n var finalValue = this.kf ? this.pv : this.data.k;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n finalValue = this.effectsSequence[i](finalValue);\r\n }\r\n\r\n this.setVValue(finalValue);\r\n this._isFirstFrame = false;\r\n this.lock = false;\r\n this.frameId = this.elem.globalData.frameId;\r\n }\r\n\r\n function addEffect(effectFunction) {\r\n this.effectsSequence.push(effectFunction);\r\n this.container.addDynamicProperty(this);\r\n }\r\n\r\n function ValueProperty(elem, data, mult, container) {\r\n this.propType = 'unidimensional';\r\n this.mult = mult || 1;\r\n this.data = data;\r\n this.v = mult ? data.k * mult : data.k;\r\n this.pv = data.k;\r\n this._mdf = false;\r\n this.elem = elem;\r\n this.container = container;\r\n this.comp = elem.comp;\r\n this.k = false;\r\n this.kf = false;\r\n this.vel = 0;\r\n this.effectsSequence = [];\r\n this._isFirstFrame = true;\r\n this.getValue = processEffectsSequence;\r\n this.setVValue = setVValue;\r\n this.addEffect = addEffect;\r\n }\r\n\r\n function MultiDimensionalProperty(elem, data, mult, container) {\r\n this.propType = 'multidimensional';\r\n this.mult = mult || 1;\r\n this.data = data;\r\n this._mdf = false;\r\n this.elem = elem;\r\n this.container = container;\r\n this.comp = elem.comp;\r\n this.k = false;\r\n this.kf = false;\r\n this.frameId = -1;\r\n var i;\r\n var len = data.k.length;\r\n this.v = createTypedArray('float32', len);\r\n this.pv = createTypedArray('float32', len);\r\n this.vel = createTypedArray('float32', len);\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.v[i] = data.k[i] * this.mult;\r\n this.pv[i] = data.k[i];\r\n }\r\n\r\n this._isFirstFrame = true;\r\n this.effectsSequence = [];\r\n this.getValue = processEffectsSequence;\r\n this.setVValue = setVValue;\r\n this.addEffect = addEffect;\r\n }\r\n\r\n function KeyframedValueProperty(elem, data, mult, container) {\r\n this.propType = 'unidimensional';\r\n this.keyframes = data.k;\r\n this.keyframesMetadata = [];\r\n this.offsetTime = elem.data.st;\r\n this.frameId = -1;\r\n this._caching = {\r\n lastFrame: initFrame,\r\n lastIndex: 0,\r\n value: 0,\r\n _lastKeyframeIndex: -1\r\n };\r\n this.k = true;\r\n this.kf = true;\r\n this.data = data;\r\n this.mult = mult || 1;\r\n this.elem = elem;\r\n this.container = container;\r\n this.comp = elem.comp;\r\n this.v = initFrame;\r\n this.pv = initFrame;\r\n this._isFirstFrame = true;\r\n this.getValue = processEffectsSequence;\r\n this.setVValue = setVValue;\r\n this.interpolateValue = interpolateValue;\r\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\r\n this.addEffect = addEffect;\r\n }\r\n\r\n function KeyframedMultidimensionalProperty(elem, data, mult, container) {\r\n this.propType = 'multidimensional';\r\n var i;\r\n var len = data.k.length;\r\n var s;\r\n var e;\r\n var to;\r\n var ti;\r\n\r\n for (i = 0; i < len - 1; i += 1) {\r\n if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\r\n s = data.k[i].s;\r\n e = data.k[i + 1].s;\r\n to = data.k[i].to;\r\n ti = data.k[i].ti;\r\n\r\n if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\r\n data.k[i].to = null;\r\n data.k[i].ti = null;\r\n }\r\n\r\n if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\r\n if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\r\n data.k[i].to = null;\r\n data.k[i].ti = null;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\r\n this.data = data;\r\n this.keyframes = data.k;\r\n this.keyframesMetadata = [];\r\n this.offsetTime = elem.data.st;\r\n this.k = true;\r\n this.kf = true;\r\n this._isFirstFrame = true;\r\n this.mult = mult || 1;\r\n this.elem = elem;\r\n this.container = container;\r\n this.comp = elem.comp;\r\n this.getValue = processEffectsSequence;\r\n this.setVValue = setVValue;\r\n this.interpolateValue = interpolateValue;\r\n this.frameId = -1;\r\n var arrLen = data.k[0].s.length;\r\n this.v = createTypedArray('float32', arrLen);\r\n this.pv = createTypedArray('float32', arrLen);\r\n\r\n for (i = 0; i < arrLen; i += 1) {\r\n this.v[i] = initFrame;\r\n this.pv[i] = initFrame;\r\n }\r\n\r\n this._caching = {\r\n lastFrame: initFrame,\r\n lastIndex: 0,\r\n value: createTypedArray('float32', arrLen)\r\n };\r\n this.addEffect = addEffect;\r\n }\r\n\r\n function getProp(elem, data, type, mult, container) {\r\n var p;\r\n\r\n if (!data.k.length) {\r\n p = new ValueProperty(elem, data, mult, container);\r\n } else if (typeof data.k[0] === 'number') {\r\n p = new MultiDimensionalProperty(elem, data, mult, container);\r\n } else {\r\n switch (type) {\r\n case 0:\r\n p = new KeyframedValueProperty(elem, data, mult, container);\r\n break;\r\n\r\n case 1:\r\n p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n if (p.effectsSequence.length) {\r\n container.addDynamicProperty(p);\r\n }\r\n\r\n return p;\r\n }\r\n\r\n var ob = {\r\n getProp: getProp\r\n };\r\n return ob;\r\n }();\r\n\r\n function DynamicPropertyContainer() {}\r\n\r\n DynamicPropertyContainer.prototype = {\r\n addDynamicProperty: function addDynamicProperty(prop) {\r\n if (this.dynamicProperties.indexOf(prop) === -1) {\r\n this.dynamicProperties.push(prop);\r\n this.container.addDynamicProperty(this);\r\n this._isAnimated = true;\r\n }\r\n },\r\n iterateDynamicProperties: function iterateDynamicProperties() {\r\n this._mdf = false;\r\n var i;\r\n var len = this.dynamicProperties.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.dynamicProperties[i].getValue();\r\n\r\n if (this.dynamicProperties[i]._mdf) {\r\n this._mdf = true;\r\n }\r\n }\r\n },\r\n initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\r\n this.container = container;\r\n this.dynamicProperties = [];\r\n this._mdf = false;\r\n this._isAnimated = false;\r\n }\r\n };\r\n\r\n var pointPool = function () {\r\n function create() {\r\n return createTypedArray('float32', 2);\r\n }\r\n\r\n return poolFactory(8, create);\r\n }();\r\n\r\n function ShapePath() {\r\n this.c = false;\r\n this._length = 0;\r\n this._maxLength = 8;\r\n this.v = createSizedArray(this._maxLength);\r\n this.o = createSizedArray(this._maxLength);\r\n this.i = createSizedArray(this._maxLength);\r\n }\r\n\r\n ShapePath.prototype.setPathData = function (closed, len) {\r\n this.c = closed;\r\n this.setLength(len);\r\n var i = 0;\r\n\r\n while (i < len) {\r\n this.v[i] = pointPool.newElement();\r\n this.o[i] = pointPool.newElement();\r\n this.i[i] = pointPool.newElement();\r\n i += 1;\r\n }\r\n };\r\n\r\n ShapePath.prototype.setLength = function (len) {\r\n while (this._maxLength < len) {\r\n this.doubleArrayLength();\r\n }\r\n\r\n this._length = len;\r\n };\r\n\r\n ShapePath.prototype.doubleArrayLength = function () {\r\n this.v = this.v.concat(createSizedArray(this._maxLength));\r\n this.i = this.i.concat(createSizedArray(this._maxLength));\r\n this.o = this.o.concat(createSizedArray(this._maxLength));\r\n this._maxLength *= 2;\r\n };\r\n\r\n ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\r\n var arr;\r\n this._length = Math.max(this._length, pos + 1);\r\n\r\n if (this._length >= this._maxLength) {\r\n this.doubleArrayLength();\r\n }\r\n\r\n switch (type) {\r\n case 'v':\r\n arr = this.v;\r\n break;\r\n\r\n case 'i':\r\n arr = this.i;\r\n break;\r\n\r\n case 'o':\r\n arr = this.o;\r\n break;\r\n\r\n default:\r\n arr = [];\r\n break;\r\n }\r\n\r\n if (!arr[pos] || arr[pos] && !replace) {\r\n arr[pos] = pointPool.newElement();\r\n }\r\n\r\n arr[pos][0] = x;\r\n arr[pos][1] = y;\r\n };\r\n\r\n ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\r\n this.setXYAt(vX, vY, 'v', pos, replace);\r\n this.setXYAt(oX, oY, 'o', pos, replace);\r\n this.setXYAt(iX, iY, 'i', pos, replace);\r\n };\r\n\r\n ShapePath.prototype.reverse = function () {\r\n var newPath = new ShapePath();\r\n newPath.setPathData(this.c, this._length);\r\n var vertices = this.v;\r\n var outPoints = this.o;\r\n var inPoints = this.i;\r\n var init = 0;\r\n\r\n if (this.c) {\r\n newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\r\n init = 1;\r\n }\r\n\r\n var cnt = this._length - 1;\r\n var len = this._length;\r\n var i;\r\n\r\n for (i = init; i < len; i += 1) {\r\n newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\r\n cnt -= 1;\r\n }\r\n\r\n return newPath;\r\n };\r\n\r\n var shapePool = function () {\r\n function create() {\r\n return new ShapePath();\r\n }\r\n\r\n function release(shapePath) {\r\n var len = shapePath._length;\r\n var i;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n pointPool.release(shapePath.v[i]);\r\n pointPool.release(shapePath.i[i]);\r\n pointPool.release(shapePath.o[i]);\r\n shapePath.v[i] = null;\r\n shapePath.i[i] = null;\r\n shapePath.o[i] = null;\r\n }\r\n\r\n shapePath._length = 0;\r\n shapePath.c = false;\r\n }\r\n\r\n function clone(shape) {\r\n var cloned = factory.newElement();\r\n var i;\r\n var len = shape._length === undefined ? shape.v.length : shape._length;\r\n cloned.setLength(len);\r\n cloned.c = shape.c;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\r\n }\r\n\r\n return cloned;\r\n }\r\n\r\n var factory = poolFactory(4, create, release);\r\n factory.clone = clone;\r\n return factory;\r\n }();\r\n\r\n function ShapeCollection() {\r\n this._length = 0;\r\n this._maxLength = 4;\r\n this.shapes = createSizedArray(this._maxLength);\r\n }\r\n\r\n ShapeCollection.prototype.addShape = function (shapeData) {\r\n if (this._length === this._maxLength) {\r\n this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\r\n this._maxLength *= 2;\r\n }\r\n\r\n this.shapes[this._length] = shapeData;\r\n this._length += 1;\r\n };\r\n\r\n ShapeCollection.prototype.releaseShapes = function () {\r\n var i;\r\n\r\n for (i = 0; i < this._length; i += 1) {\r\n shapePool.release(this.shapes[i]);\r\n }\r\n\r\n this._length = 0;\r\n };\r\n\r\n var shapeCollectionPool = function () {\r\n var ob = {\r\n newShapeCollection: newShapeCollection,\r\n release: release\r\n };\r\n var _length = 0;\r\n var _maxLength = 4;\r\n var pool = createSizedArray(_maxLength);\r\n\r\n function newShapeCollection() {\r\n var shapeCollection;\r\n\r\n if (_length) {\r\n _length -= 1;\r\n shapeCollection = pool[_length];\r\n } else {\r\n shapeCollection = new ShapeCollection();\r\n }\r\n\r\n return shapeCollection;\r\n }\r\n\r\n function release(shapeCollection) {\r\n var i;\r\n var len = shapeCollection._length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n shapePool.release(shapeCollection.shapes[i]);\r\n }\r\n\r\n shapeCollection._length = 0;\r\n\r\n if (_length === _maxLength) {\r\n pool = pooling[\"double\"](pool);\r\n _maxLength *= 2;\r\n }\r\n\r\n pool[_length] = shapeCollection;\r\n _length += 1;\r\n }\r\n\r\n return ob;\r\n }();\r\n\r\n var ShapePropertyFactory = function () {\r\n var initFrame = -999999;\r\n\r\n function interpolateShape(frameNum, previousValue, caching) {\r\n var iterationIndex = caching.lastIndex;\r\n var keyPropS;\r\n var keyPropE;\r\n var isHold;\r\n var j;\r\n var k;\r\n var jLen;\r\n var kLen;\r\n var perc;\r\n var vertexValue;\r\n var kf = this.keyframes;\r\n\r\n if (frameNum < kf[0].t - this.offsetTime) {\r\n keyPropS = kf[0].s[0];\r\n isHold = true;\r\n iterationIndex = 0;\r\n } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\r\n keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\r\n /* if(kf[kf.length - 1].s){\r\n keyPropS = kf[kf.length - 1].s[0];\r\n }else{\r\n keyPropS = kf[kf.length - 2].e[0];\r\n } */\r\n\r\n isHold = true;\r\n } else {\r\n var i = iterationIndex;\r\n var len = kf.length - 1;\r\n var flag = true;\r\n var keyData;\r\n var nextKeyData;\r\n var keyframeMetadata;\r\n\r\n while (flag) {\r\n keyData = kf[i];\r\n nextKeyData = kf[i + 1];\r\n\r\n if (nextKeyData.t - this.offsetTime > frameNum) {\r\n break;\r\n }\r\n\r\n if (i < len - 1) {\r\n i += 1;\r\n } else {\r\n flag = false;\r\n }\r\n }\r\n\r\n keyframeMetadata = this.keyframesMetadata[i] || {};\r\n isHold = keyData.h === 1;\r\n iterationIndex = i;\r\n\r\n if (!isHold) {\r\n if (frameNum >= nextKeyData.t - this.offsetTime) {\r\n perc = 1;\r\n } else if (frameNum < keyData.t - this.offsetTime) {\r\n perc = 0;\r\n } else {\r\n var fnc;\r\n\r\n if (keyframeMetadata.__fnct) {\r\n fnc = keyframeMetadata.__fnct;\r\n } else {\r\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\r\n keyframeMetadata.__fnct = fnc;\r\n }\r\n\r\n perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\r\n }\r\n\r\n keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\r\n }\r\n\r\n keyPropS = keyData.s[0];\r\n }\r\n\r\n jLen = previousValue._length;\r\n kLen = keyPropS.i[0].length;\r\n caching.lastIndex = iterationIndex;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n for (k = 0; k < kLen; k += 1) {\r\n vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\r\n previousValue.i[j][k] = vertexValue;\r\n vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\r\n previousValue.o[j][k] = vertexValue;\r\n vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\r\n previousValue.v[j][k] = vertexValue;\r\n }\r\n }\r\n }\r\n\r\n function interpolateShapeCurrentTime() {\r\n var frameNum = this.comp.renderedFrame - this.offsetTime;\r\n var initTime = this.keyframes[0].t - this.offsetTime;\r\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\r\n var lastFrame = this._caching.lastFrame;\r\n\r\n if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\r\n /// /\r\n this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\r\n this.interpolateShape(frameNum, this.pv, this._caching); /// /\r\n }\r\n\r\n this._caching.lastFrame = frameNum;\r\n return this.pv;\r\n }\r\n\r\n function resetShape() {\r\n this.paths = this.localShapeCollection;\r\n }\r\n\r\n function shapesEqual(shape1, shape2) {\r\n if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\r\n return false;\r\n }\r\n\r\n var i;\r\n var len = shape1._length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function setVValue(newPath) {\r\n if (!shapesEqual(this.v, newPath)) {\r\n this.v = shapePool.clone(newPath);\r\n this.localShapeCollection.releaseShapes();\r\n this.localShapeCollection.addShape(this.v);\r\n this._mdf = true;\r\n this.paths = this.localShapeCollection;\r\n }\r\n }\r\n\r\n function processEffectsSequence() {\r\n if (this.elem.globalData.frameId === this.frameId) {\r\n return;\r\n }\r\n\r\n if (!this.effectsSequence.length) {\r\n this._mdf = false;\r\n return;\r\n }\r\n\r\n if (this.lock) {\r\n this.setVValue(this.pv);\r\n return;\r\n }\r\n\r\n this.lock = true;\r\n this._mdf = false;\r\n var finalValue;\r\n\r\n if (this.kf) {\r\n finalValue = this.pv;\r\n } else if (this.data.ks) {\r\n finalValue = this.data.ks.k;\r\n } else {\r\n finalValue = this.data.pt.k;\r\n }\r\n\r\n var i;\r\n var len = this.effectsSequence.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n finalValue = this.effectsSequence[i](finalValue);\r\n }\r\n\r\n this.setVValue(finalValue);\r\n this.lock = false;\r\n this.frameId = this.elem.globalData.frameId;\r\n }\r\n\r\n function ShapeProperty(elem, data, type) {\r\n this.propType = 'shape';\r\n this.comp = elem.comp;\r\n this.container = elem;\r\n this.elem = elem;\r\n this.data = data;\r\n this.k = false;\r\n this.kf = false;\r\n this._mdf = false;\r\n var pathData = type === 3 ? data.pt.k : data.ks.k;\r\n this.v = shapePool.clone(pathData);\r\n this.pv = shapePool.clone(this.v);\r\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\r\n this.paths = this.localShapeCollection;\r\n this.paths.addShape(this.v);\r\n this.reset = resetShape;\r\n this.effectsSequence = [];\r\n }\r\n\r\n function addEffect(effectFunction) {\r\n this.effectsSequence.push(effectFunction);\r\n this.container.addDynamicProperty(this);\r\n }\r\n\r\n ShapeProperty.prototype.interpolateShape = interpolateShape;\r\n ShapeProperty.prototype.getValue = processEffectsSequence;\r\n ShapeProperty.prototype.setVValue = setVValue;\r\n ShapeProperty.prototype.addEffect = addEffect;\r\n\r\n function KeyframedShapeProperty(elem, data, type) {\r\n this.propType = 'shape';\r\n this.comp = elem.comp;\r\n this.elem = elem;\r\n this.container = elem;\r\n this.offsetTime = elem.data.st;\r\n this.keyframes = type === 3 ? data.pt.k : data.ks.k;\r\n this.keyframesMetadata = [];\r\n this.k = true;\r\n this.kf = true;\r\n var len = this.keyframes[0].s[0].i.length;\r\n this.v = shapePool.newElement();\r\n this.v.setPathData(this.keyframes[0].s[0].c, len);\r\n this.pv = shapePool.clone(this.v);\r\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\r\n this.paths = this.localShapeCollection;\r\n this.paths.addShape(this.v);\r\n this.lastFrame = initFrame;\r\n this.reset = resetShape;\r\n this._caching = {\r\n lastFrame: initFrame,\r\n lastIndex: 0\r\n };\r\n this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\r\n }\r\n\r\n KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\r\n KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\r\n KeyframedShapeProperty.prototype.setVValue = setVValue;\r\n KeyframedShapeProperty.prototype.addEffect = addEffect;\r\n\r\n var EllShapeProperty = function () {\r\n var cPoint = roundCorner;\r\n\r\n function EllShapePropertyFactory(elem, data) {\r\n this.v = shapePool.newElement();\r\n this.v.setPathData(true, 4);\r\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\r\n this.paths = this.localShapeCollection;\r\n this.localShapeCollection.addShape(this.v);\r\n this.d = data.d;\r\n this.elem = elem;\r\n this.comp = elem.comp;\r\n this.frameId = -1;\r\n this.initDynamicPropertyContainer(elem);\r\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\r\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\r\n\r\n if (this.dynamicProperties.length) {\r\n this.k = true;\r\n } else {\r\n this.k = false;\r\n this.convertEllToPath();\r\n }\r\n }\r\n\r\n EllShapePropertyFactory.prototype = {\r\n reset: resetShape,\r\n getValue: function getValue() {\r\n if (this.elem.globalData.frameId === this.frameId) {\r\n return;\r\n }\r\n\r\n this.frameId = this.elem.globalData.frameId;\r\n this.iterateDynamicProperties();\r\n\r\n if (this._mdf) {\r\n this.convertEllToPath();\r\n }\r\n },\r\n convertEllToPath: function convertEllToPath() {\r\n var p0 = this.p.v[0];\r\n var p1 = this.p.v[1];\r\n var s0 = this.s.v[0] / 2;\r\n var s1 = this.s.v[1] / 2;\r\n\r\n var _cw = this.d !== 3;\r\n\r\n var _v = this.v;\r\n _v.v[0][0] = p0;\r\n _v.v[0][1] = p1 - s1;\r\n _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\r\n _v.v[1][1] = p1;\r\n _v.v[2][0] = p0;\r\n _v.v[2][1] = p1 + s1;\r\n _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\r\n _v.v[3][1] = p1;\r\n _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\r\n _v.i[0][1] = p1 - s1;\r\n _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\r\n _v.i[1][1] = p1 - s1 * cPoint;\r\n _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\r\n _v.i[2][1] = p1 + s1;\r\n _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\r\n _v.i[3][1] = p1 + s1 * cPoint;\r\n _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\r\n _v.o[0][1] = p1 - s1;\r\n _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\r\n _v.o[1][1] = p1 + s1 * cPoint;\r\n _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\r\n _v.o[2][1] = p1 + s1;\r\n _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\r\n _v.o[3][1] = p1 - s1 * cPoint;\r\n }\r\n };\r\n extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\r\n return EllShapePropertyFactory;\r\n }();\r\n\r\n var StarShapeProperty = function () {\r\n function StarShapePropertyFactory(elem, data) {\r\n this.v = shapePool.newElement();\r\n this.v.setPathData(true, 0);\r\n this.elem = elem;\r\n this.comp = elem.comp;\r\n this.data = data;\r\n this.frameId = -1;\r\n this.d = data.d;\r\n this.initDynamicPropertyContainer(elem);\r\n\r\n if (data.sy === 1) {\r\n this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\r\n this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\r\n this.convertToPath = this.convertStarToPath;\r\n } else {\r\n this.convertToPath = this.convertPolygonToPath;\r\n }\r\n\r\n this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\r\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\r\n this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\r\n this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\r\n this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\r\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\r\n this.localShapeCollection.addShape(this.v);\r\n this.paths = this.localShapeCollection;\r\n\r\n if (this.dynamicProperties.length) {\r\n this.k = true;\r\n } else {\r\n this.k = false;\r\n this.convertToPath();\r\n }\r\n }\r\n\r\n StarShapePropertyFactory.prototype = {\r\n reset: resetShape,\r\n getValue: function getValue() {\r\n if (this.elem.globalData.frameId === this.frameId) {\r\n return;\r\n }\r\n\r\n this.frameId = this.elem.globalData.frameId;\r\n this.iterateDynamicProperties();\r\n\r\n if (this._mdf) {\r\n this.convertToPath();\r\n }\r\n },\r\n convertStarToPath: function convertStarToPath() {\r\n var numPts = Math.floor(this.pt.v) * 2;\r\n var angle = Math.PI * 2 / numPts;\r\n /* this.v.v.length = numPts;\r\n this.v.i.length = numPts;\r\n this.v.o.length = numPts; */\r\n\r\n var longFlag = true;\r\n var longRad = this.or.v;\r\n var shortRad = this.ir.v;\r\n var longRound = this.os.v;\r\n var shortRound = this.is.v;\r\n var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\r\n var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\r\n var i;\r\n var rad;\r\n var roundness;\r\n var perimSegment;\r\n var currentAng = -Math.PI / 2;\r\n currentAng += this.r.v;\r\n var dir = this.data.d === 3 ? -1 : 1;\r\n this.v._length = 0;\r\n\r\n for (i = 0; i < numPts; i += 1) {\r\n rad = longFlag ? longRad : shortRad;\r\n roundness = longFlag ? longRound : shortRound;\r\n perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\r\n var x = rad * Math.cos(currentAng);\r\n var y = rad * Math.sin(currentAng);\r\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\r\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\r\n x += +this.p.v[0];\r\n y += +this.p.v[1];\r\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\r\n /* this.v.v[i] = [x,y];\r\n this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n this.v._length = numPts; */\r\n\r\n longFlag = !longFlag;\r\n currentAng += angle * dir;\r\n }\r\n },\r\n convertPolygonToPath: function convertPolygonToPath() {\r\n var numPts = Math.floor(this.pt.v);\r\n var angle = Math.PI * 2 / numPts;\r\n var rad = this.or.v;\r\n var roundness = this.os.v;\r\n var perimSegment = 2 * Math.PI * rad / (numPts * 4);\r\n var i;\r\n var currentAng = -Math.PI * 0.5;\r\n var dir = this.data.d === 3 ? -1 : 1;\r\n currentAng += this.r.v;\r\n this.v._length = 0;\r\n\r\n for (i = 0; i < numPts; i += 1) {\r\n var x = rad * Math.cos(currentAng);\r\n var y = rad * Math.sin(currentAng);\r\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\r\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\r\n x += +this.p.v[0];\r\n y += +this.p.v[1];\r\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\r\n currentAng += angle * dir;\r\n }\r\n\r\n this.paths.length = 0;\r\n this.paths[0] = this.v;\r\n }\r\n };\r\n extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\r\n return StarShapePropertyFactory;\r\n }();\r\n\r\n var RectShapeProperty = function () {\r\n function RectShapePropertyFactory(elem, data) {\r\n this.v = shapePool.newElement();\r\n this.v.c = true;\r\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\r\n this.localShapeCollection.addShape(this.v);\r\n this.paths = this.localShapeCollection;\r\n this.elem = elem;\r\n this.comp = elem.comp;\r\n this.frameId = -1;\r\n this.d = data.d;\r\n this.initDynamicPropertyContainer(elem);\r\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\r\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\r\n this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\r\n\r\n if (this.dynamicProperties.length) {\r\n this.k = true;\r\n } else {\r\n this.k = false;\r\n this.convertRectToPath();\r\n }\r\n }\r\n\r\n RectShapePropertyFactory.prototype = {\r\n convertRectToPath: function convertRectToPath() {\r\n var p0 = this.p.v[0];\r\n var p1 = this.p.v[1];\r\n var v0 = this.s.v[0] / 2;\r\n var v1 = this.s.v[1] / 2;\r\n var round = bmMin(v0, v1, this.r.v);\r\n var cPoint = round * (1 - roundCorner);\r\n this.v._length = 0;\r\n\r\n if (this.d === 2 || this.d === 1) {\r\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\r\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\r\n\r\n if (round !== 0) {\r\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\r\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\r\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\r\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\r\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\r\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\r\n } else {\r\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\r\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\r\n }\r\n } else {\r\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\r\n\r\n if (round !== 0) {\r\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\r\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\r\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\r\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\r\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\r\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\r\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\r\n } else {\r\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\r\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\r\n this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\r\n }\r\n }\r\n },\r\n getValue: function getValue() {\r\n if (this.elem.globalData.frameId === this.frameId) {\r\n return;\r\n }\r\n\r\n this.frameId = this.elem.globalData.frameId;\r\n this.iterateDynamicProperties();\r\n\r\n if (this._mdf) {\r\n this.convertRectToPath();\r\n }\r\n },\r\n reset: resetShape\r\n };\r\n extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\r\n return RectShapePropertyFactory;\r\n }();\r\n\r\n function getShapeProp(elem, data, type) {\r\n var prop;\r\n\r\n if (type === 3 || type === 4) {\r\n var dataProp = type === 3 ? data.pt : data.ks;\r\n var keys = dataProp.k;\r\n\r\n if (keys.length) {\r\n prop = new KeyframedShapeProperty(elem, data, type);\r\n } else {\r\n prop = new ShapeProperty(elem, data, type);\r\n }\r\n } else if (type === 5) {\r\n prop = new RectShapeProperty(elem, data);\r\n } else if (type === 6) {\r\n prop = new EllShapeProperty(elem, data);\r\n } else if (type === 7) {\r\n prop = new StarShapeProperty(elem, data);\r\n }\r\n\r\n if (prop.k) {\r\n elem.addDynamicProperty(prop);\r\n }\r\n\r\n return prop;\r\n }\r\n\r\n function getConstructorFunction() {\r\n return ShapeProperty;\r\n }\r\n\r\n function getKeyframedConstructorFunction() {\r\n return KeyframedShapeProperty;\r\n }\r\n\r\n var ob = {};\r\n ob.getShapeProp = getShapeProp;\r\n ob.getConstructorFunction = getConstructorFunction;\r\n ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\r\n return ob;\r\n }();\r\n\r\n /*!\r\n Transformation Matrix v2.0\r\n (c) Epistemex 2014-2015\r\n www.epistemex.com\r\n By Ken Fyrstenberg\r\n Contributions by leeoniya.\r\n License: MIT, header required.\r\n */\r\n\r\n /**\r\n * 2D transformation matrix object initialized with identity matrix.\r\n *\r\n * The matrix can synchronize a canvas context by supplying the context\r\n * as an argument, or later apply current absolute transform to an\r\n * existing context.\r\n *\r\n * All values are handled as floating point values.\r\n *\r\n * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n * @prop {number} a - scale x\r\n * @prop {number} b - shear y\r\n * @prop {number} c - shear x\r\n * @prop {number} d - scale y\r\n * @prop {number} e - translate x\r\n * @prop {number} f - translate y\r\n * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n * @constructor\r\n */\r\n\r\n var Matrix = function () {\r\n var _cos = Math.cos;\r\n var _sin = Math.sin;\r\n var _tan = Math.tan;\r\n var _rnd = Math.round;\r\n\r\n function reset() {\r\n this.props[0] = 1;\r\n this.props[1] = 0;\r\n this.props[2] = 0;\r\n this.props[3] = 0;\r\n this.props[4] = 0;\r\n this.props[5] = 1;\r\n this.props[6] = 0;\r\n this.props[7] = 0;\r\n this.props[8] = 0;\r\n this.props[9] = 0;\r\n this.props[10] = 1;\r\n this.props[11] = 0;\r\n this.props[12] = 0;\r\n this.props[13] = 0;\r\n this.props[14] = 0;\r\n this.props[15] = 1;\r\n return this;\r\n }\r\n\r\n function rotate(angle) {\r\n if (angle === 0) {\r\n return this;\r\n }\r\n\r\n var mCos = _cos(angle);\r\n\r\n var mSin = _sin(angle);\r\n\r\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\r\n }\r\n\r\n function rotateX(angle) {\r\n if (angle === 0) {\r\n return this;\r\n }\r\n\r\n var mCos = _cos(angle);\r\n\r\n var mSin = _sin(angle);\r\n\r\n return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\r\n }\r\n\r\n function rotateY(angle) {\r\n if (angle === 0) {\r\n return this;\r\n }\r\n\r\n var mCos = _cos(angle);\r\n\r\n var mSin = _sin(angle);\r\n\r\n return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\r\n }\r\n\r\n function rotateZ(angle) {\r\n if (angle === 0) {\r\n return this;\r\n }\r\n\r\n var mCos = _cos(angle);\r\n\r\n var mSin = _sin(angle);\r\n\r\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\r\n }\r\n\r\n function shear(sx, sy) {\r\n return this._t(1, sy, sx, 1, 0, 0);\r\n }\r\n\r\n function skew(ax, ay) {\r\n return this.shear(_tan(ax), _tan(ay));\r\n }\r\n\r\n function skewFromAxis(ax, angle) {\r\n var mCos = _cos(angle);\r\n\r\n var mSin = _sin(angle);\r\n\r\n return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\r\n }\r\n\r\n function scale(sx, sy, sz) {\r\n if (!sz && sz !== 0) {\r\n sz = 1;\r\n }\r\n\r\n if (sx === 1 && sy === 1 && sz === 1) {\r\n return this;\r\n }\r\n\r\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\r\n }\r\n\r\n function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\r\n this.props[0] = a;\r\n this.props[1] = b;\r\n this.props[2] = c;\r\n this.props[3] = d;\r\n this.props[4] = e;\r\n this.props[5] = f;\r\n this.props[6] = g;\r\n this.props[7] = h;\r\n this.props[8] = i;\r\n this.props[9] = j;\r\n this.props[10] = k;\r\n this.props[11] = l;\r\n this.props[12] = m;\r\n this.props[13] = n;\r\n this.props[14] = o;\r\n this.props[15] = p;\r\n return this;\r\n }\r\n\r\n function translate(tx, ty, tz) {\r\n tz = tz || 0;\r\n\r\n if (tx !== 0 || ty !== 0 || tz !== 0) {\r\n return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\r\n var _p = this.props;\r\n\r\n if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\r\n // NOTE: commenting this condition because TurboFan deoptimizes code when present\r\n // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\r\n _p[12] = _p[12] * a2 + _p[15] * m2;\r\n _p[13] = _p[13] * f2 + _p[15] * n2;\r\n _p[14] = _p[14] * k2 + _p[15] * o2;\r\n _p[15] *= p2; // }\r\n\r\n this._identityCalculated = false;\r\n return this;\r\n }\r\n\r\n var a1 = _p[0];\r\n var b1 = _p[1];\r\n var c1 = _p[2];\r\n var d1 = _p[3];\r\n var e1 = _p[4];\r\n var f1 = _p[5];\r\n var g1 = _p[6];\r\n var h1 = _p[7];\r\n var i1 = _p[8];\r\n var j1 = _p[9];\r\n var k1 = _p[10];\r\n var l1 = _p[11];\r\n var m1 = _p[12];\r\n var n1 = _p[13];\r\n var o1 = _p[14];\r\n var p1 = _p[15];\r\n /* matrix order (canvas compatible):\r\n * ace\r\n * bdf\r\n * 001\r\n */\r\n\r\n _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\r\n _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\r\n _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\r\n _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\r\n _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\r\n _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\r\n _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\r\n _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\r\n _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\r\n _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\r\n _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\r\n _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\r\n _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\r\n _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\r\n _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\r\n _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\r\n this._identityCalculated = false;\r\n return this;\r\n }\r\n\r\n function isIdentity() {\r\n if (!this._identityCalculated) {\r\n this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\r\n this._identityCalculated = true;\r\n }\r\n\r\n return this._identity;\r\n }\r\n\r\n function equals(matr) {\r\n var i = 0;\r\n\r\n while (i < 16) {\r\n if (matr.props[i] !== this.props[i]) {\r\n return false;\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function clone(matr) {\r\n var i;\r\n\r\n for (i = 0; i < 16; i += 1) {\r\n matr.props[i] = this.props[i];\r\n }\r\n\r\n return matr;\r\n }\r\n\r\n function cloneFromProps(props) {\r\n var i;\r\n\r\n for (i = 0; i < 16; i += 1) {\r\n this.props[i] = props[i];\r\n }\r\n }\r\n\r\n function applyToPoint(x, y, z) {\r\n return {\r\n x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\r\n y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\r\n z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\r\n };\r\n /* return {\r\n x: x * me.a + y * me.c + me.e,\r\n y: x * me.b + y * me.d + me.f\r\n }; */\r\n }\r\n\r\n function applyToX(x, y, z) {\r\n return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\r\n }\r\n\r\n function applyToY(x, y, z) {\r\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\r\n }\r\n\r\n function applyToZ(x, y, z) {\r\n return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\r\n }\r\n\r\n function getInverseMatrix() {\r\n var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\r\n var a = this.props[5] / determinant;\r\n var b = -this.props[1] / determinant;\r\n var c = -this.props[4] / determinant;\r\n var d = this.props[0] / determinant;\r\n var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\r\n var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\r\n var inverseMatrix = new Matrix();\r\n inverseMatrix.props[0] = a;\r\n inverseMatrix.props[1] = b;\r\n inverseMatrix.props[4] = c;\r\n inverseMatrix.props[5] = d;\r\n inverseMatrix.props[12] = e;\r\n inverseMatrix.props[13] = f;\r\n return inverseMatrix;\r\n }\r\n\r\n function inversePoint(pt) {\r\n var inverseMatrix = this.getInverseMatrix();\r\n return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\r\n }\r\n\r\n function inversePoints(pts) {\r\n var i;\r\n var len = pts.length;\r\n var retPts = [];\r\n\r\n for (i = 0; i < len; i += 1) {\r\n retPts[i] = inversePoint(pts[i]);\r\n }\r\n\r\n return retPts;\r\n }\r\n\r\n function applyToTriplePoints(pt1, pt2, pt3) {\r\n var arr = createTypedArray('float32', 6);\r\n\r\n if (this.isIdentity()) {\r\n arr[0] = pt1[0];\r\n arr[1] = pt1[1];\r\n arr[2] = pt2[0];\r\n arr[3] = pt2[1];\r\n arr[4] = pt3[0];\r\n arr[5] = pt3[1];\r\n } else {\r\n var p0 = this.props[0];\r\n var p1 = this.props[1];\r\n var p4 = this.props[4];\r\n var p5 = this.props[5];\r\n var p12 = this.props[12];\r\n var p13 = this.props[13];\r\n arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\r\n arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\r\n arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\r\n arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\r\n arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\r\n arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n function applyToPointArray(x, y, z) {\r\n var arr;\r\n\r\n if (this.isIdentity()) {\r\n arr = [x, y, z];\r\n } else {\r\n arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n function applyToPointStringified(x, y) {\r\n if (this.isIdentity()) {\r\n return x + ',' + y;\r\n }\r\n\r\n var _p = this.props;\r\n return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\r\n }\r\n\r\n function toCSS() {\r\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\r\n\r\n /* if(this.isIdentity()) {\r\n return '';\r\n } */\r\n var i = 0;\r\n var props = this.props;\r\n var cssValue = 'matrix3d(';\r\n var v = 10000;\r\n\r\n while (i < 16) {\r\n cssValue += _rnd(props[i] * v) / v;\r\n cssValue += i === 15 ? ')' : ',';\r\n i += 1;\r\n }\r\n\r\n return cssValue;\r\n }\r\n\r\n function roundMatrixProperty(val) {\r\n var v = 10000;\r\n\r\n if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\r\n return _rnd(val * v) / v;\r\n }\r\n\r\n return val;\r\n }\r\n\r\n function to2dCSS() {\r\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\r\n\r\n /* if(this.isIdentity()) {\r\n return '';\r\n } */\r\n var props = this.props;\r\n\r\n var _a = roundMatrixProperty(props[0]);\r\n\r\n var _b = roundMatrixProperty(props[1]);\r\n\r\n var _c = roundMatrixProperty(props[4]);\r\n\r\n var _d = roundMatrixProperty(props[5]);\r\n\r\n var _e = roundMatrixProperty(props[12]);\r\n\r\n var _f = roundMatrixProperty(props[13]);\r\n\r\n return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\r\n }\r\n\r\n return function () {\r\n this.reset = reset;\r\n this.rotate = rotate;\r\n this.rotateX = rotateX;\r\n this.rotateY = rotateY;\r\n this.rotateZ = rotateZ;\r\n this.skew = skew;\r\n this.skewFromAxis = skewFromAxis;\r\n this.shear = shear;\r\n this.scale = scale;\r\n this.setTransform = setTransform;\r\n this.translate = translate;\r\n this.transform = transform;\r\n this.applyToPoint = applyToPoint;\r\n this.applyToX = applyToX;\r\n this.applyToY = applyToY;\r\n this.applyToZ = applyToZ;\r\n this.applyToPointArray = applyToPointArray;\r\n this.applyToTriplePoints = applyToTriplePoints;\r\n this.applyToPointStringified = applyToPointStringified;\r\n this.toCSS = toCSS;\r\n this.to2dCSS = to2dCSS;\r\n this.clone = clone;\r\n this.cloneFromProps = cloneFromProps;\r\n this.equals = equals;\r\n this.inversePoints = inversePoints;\r\n this.inversePoint = inversePoint;\r\n this.getInverseMatrix = getInverseMatrix;\r\n this._t = this.transform;\r\n this.isIdentity = isIdentity;\r\n this._identity = true;\r\n this._identityCalculated = false;\r\n this.props = createTypedArray('float32', 16);\r\n this.reset();\r\n };\r\n }();\r\n\r\n function _typeof$3(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$3 = function _typeof(obj) { return typeof obj; }; } else { _typeof$3 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$3(obj); }\r\n var lottie = {};\r\n var standalone = '__[STANDALONE]__';\r\n var animationData = '__[ANIMATIONDATA]__';\r\n var renderer = '';\r\n\r\n function setLocation(href) {\r\n setLocationHref(href);\r\n }\r\n\r\n function searchAnimations() {\r\n if (standalone === true) {\r\n animationManager.searchAnimations(animationData, standalone, renderer);\r\n } else {\r\n animationManager.searchAnimations();\r\n }\r\n }\r\n\r\n function setSubframeRendering(flag) {\r\n setSubframeEnabled(flag);\r\n }\r\n\r\n function setPrefix(prefix) {\r\n setIdPrefix(prefix);\r\n }\r\n\r\n function loadAnimation(params) {\r\n if (standalone === true) {\r\n params.animationData = JSON.parse(animationData);\r\n }\r\n\r\n return animationManager.loadAnimation(params);\r\n }\r\n\r\n function setQuality(value) {\r\n if (typeof value === 'string') {\r\n switch (value) {\r\n case 'high':\r\n setDefaultCurveSegments(200);\r\n break;\r\n\r\n default:\r\n case 'medium':\r\n setDefaultCurveSegments(50);\r\n break;\r\n\r\n case 'low':\r\n setDefaultCurveSegments(10);\r\n break;\r\n }\r\n } else if (!isNaN(value) && value > 1) {\r\n setDefaultCurveSegments(value);\r\n }\r\n\r\n if (getDefaultCurveSegments() >= 50) {\r\n roundValues(false);\r\n } else {\r\n roundValues(true);\r\n }\r\n }\r\n\r\n function inBrowser() {\r\n return typeof navigator !== 'undefined';\r\n }\r\n\r\n function installPlugin(type, plugin) {\r\n if (type === 'expressions') {\r\n setExpressionsPlugin(plugin);\r\n }\r\n }\r\n\r\n function getFactory(name) {\r\n switch (name) {\r\n case 'propertyFactory':\r\n return PropertyFactory;\r\n\r\n case 'shapePropertyFactory':\r\n return ShapePropertyFactory;\r\n\r\n case 'matrix':\r\n return Matrix;\r\n\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n lottie.play = animationManager.play;\r\n lottie.pause = animationManager.pause;\r\n lottie.setLocationHref = setLocation;\r\n lottie.togglePause = animationManager.togglePause;\r\n lottie.setSpeed = animationManager.setSpeed;\r\n lottie.setDirection = animationManager.setDirection;\r\n lottie.stop = animationManager.stop;\r\n lottie.searchAnimations = searchAnimations;\r\n lottie.registerAnimation = animationManager.registerAnimation;\r\n lottie.loadAnimation = loadAnimation;\r\n lottie.setSubframeRendering = setSubframeRendering;\r\n lottie.resize = animationManager.resize; // lottie.start = start;\r\n\r\n lottie.goToAndStop = animationManager.goToAndStop;\r\n lottie.destroy = animationManager.destroy;\r\n lottie.setQuality = setQuality;\r\n lottie.inBrowser = inBrowser;\r\n lottie.installPlugin = installPlugin;\r\n lottie.freeze = animationManager.freeze;\r\n lottie.unfreeze = animationManager.unfreeze;\r\n lottie.setVolume = animationManager.setVolume;\r\n lottie.mute = animationManager.mute;\r\n lottie.unmute = animationManager.unmute;\r\n lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\r\n lottie.useWebWorker = setWebWorker;\r\n lottie.setIDPrefix = setPrefix;\r\n lottie.__getFactory = getFactory;\r\n lottie.version = '5.9.3';\r\n\r\n function checkReady() {\r\n if (document.readyState === 'complete') {\r\n clearInterval(readyStateCheckInterval);\r\n searchAnimations();\r\n }\r\n }\r\n\r\n function getQueryVariable(variable) {\r\n var vars = queryString.split('&');\r\n\r\n for (var i = 0; i < vars.length; i += 1) {\r\n var pair = vars[i].split('=');\r\n\r\n if (decodeURIComponent(pair[0]) == variable) {\r\n // eslint-disable-line eqeqeq\r\n return decodeURIComponent(pair[1]);\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n var queryString = '';\r\n\r\n if (standalone) {\r\n var scripts = document.getElementsByTagName('script');\r\n var index = scripts.length - 1;\r\n var myScript = scripts[index] || {\r\n src: ''\r\n };\r\n queryString = myScript.src ? myScript.src.replace(/^[^\\?]+\\??/, '') : ''; // eslint-disable-line no-useless-escape\r\n\r\n renderer = getQueryVariable('renderer');\r\n }\r\n\r\n var readyStateCheckInterval = setInterval(checkReady, 100); // this adds bodymovin to the window object for backwards compatibility\r\n\r\n try {\r\n if (!((typeof exports === \"undefined\" ? \"undefined\" : _typeof$3(exports)) === 'object' && typeof module !== 'undefined') && !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\r\n ) {\r\n window.bodymovin = lottie;\r\n }\r\n } catch (err) {//\r\n }\r\n\r\n var ShapeModifiers = function () {\r\n var ob = {};\r\n var modifiers = {};\r\n ob.registerModifier = registerModifier;\r\n ob.getModifier = getModifier;\r\n\r\n function registerModifier(nm, factory) {\r\n if (!modifiers[nm]) {\r\n modifiers[nm] = factory;\r\n }\r\n }\r\n\r\n function getModifier(nm, elem, data) {\r\n return new modifiers[nm](elem, data);\r\n }\r\n\r\n return ob;\r\n }();\r\n\r\n function ShapeModifier() {}\r\n\r\n ShapeModifier.prototype.initModifierProperties = function () {};\r\n\r\n ShapeModifier.prototype.addShapeToModifier = function () {};\r\n\r\n ShapeModifier.prototype.addShape = function (data) {\r\n if (!this.closed) {\r\n // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\r\n data.sh.container.addDynamicProperty(data.sh);\r\n var shapeData = {\r\n shape: data.sh,\r\n data: data,\r\n localShapeCollection: shapeCollectionPool.newShapeCollection()\r\n };\r\n this.shapes.push(shapeData);\r\n this.addShapeToModifier(shapeData);\r\n\r\n if (this._isAnimated) {\r\n data.setAsAnimated();\r\n }\r\n }\r\n };\r\n\r\n ShapeModifier.prototype.init = function (elem, data) {\r\n this.shapes = [];\r\n this.elem = elem;\r\n this.initDynamicPropertyContainer(elem);\r\n this.initModifierProperties(elem, data);\r\n this.frameId = initialDefaultFrame;\r\n this.closed = false;\r\n this.k = false;\r\n\r\n if (this.dynamicProperties.length) {\r\n this.k = true;\r\n } else {\r\n this.getValue(true);\r\n }\r\n };\r\n\r\n ShapeModifier.prototype.processKeys = function () {\r\n if (this.elem.globalData.frameId === this.frameId) {\r\n return;\r\n }\r\n\r\n this.frameId = this.elem.globalData.frameId;\r\n this.iterateDynamicProperties();\r\n };\r\n\r\n extendPrototype([DynamicPropertyContainer], ShapeModifier);\r\n\r\n function TrimModifier() {}\r\n\r\n extendPrototype([ShapeModifier], TrimModifier);\r\n\r\n TrimModifier.prototype.initModifierProperties = function (elem, data) {\r\n this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\r\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\r\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\r\n this.sValue = 0;\r\n this.eValue = 0;\r\n this.getValue = this.processKeys;\r\n this.m = data.m;\r\n this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\r\n };\r\n\r\n TrimModifier.prototype.addShapeToModifier = function (shapeData) {\r\n shapeData.pathsData = [];\r\n };\r\n\r\n TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\r\n var segments = [];\r\n\r\n if (e <= 1) {\r\n segments.push({\r\n s: s,\r\n e: e\r\n });\r\n } else if (s >= 1) {\r\n segments.push({\r\n s: s - 1,\r\n e: e - 1\r\n });\r\n } else {\r\n segments.push({\r\n s: s,\r\n e: 1\r\n });\r\n segments.push({\r\n s: 0,\r\n e: e - 1\r\n });\r\n }\r\n\r\n var shapeSegments = [];\r\n var i;\r\n var len = segments.length;\r\n var segmentOb;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n segmentOb = segments[i];\r\n\r\n if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\r\n var shapeS;\r\n var shapeE;\r\n\r\n if (segmentOb.s * totalModifierLength <= addedLength) {\r\n shapeS = 0;\r\n } else {\r\n shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\r\n }\r\n\r\n if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\r\n shapeE = 1;\r\n } else {\r\n shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\r\n }\r\n\r\n shapeSegments.push([shapeS, shapeE]);\r\n }\r\n }\r\n\r\n if (!shapeSegments.length) {\r\n shapeSegments.push([0, 0]);\r\n }\r\n\r\n return shapeSegments;\r\n };\r\n\r\n TrimModifier.prototype.releasePathsData = function (pathsData) {\r\n var i;\r\n var len = pathsData.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n segmentsLengthPool.release(pathsData[i]);\r\n }\r\n\r\n pathsData.length = 0;\r\n return pathsData;\r\n };\r\n\r\n TrimModifier.prototype.processShapes = function (_isFirstFrame) {\r\n var s;\r\n var e;\r\n\r\n if (this._mdf || _isFirstFrame) {\r\n var o = this.o.v % 360 / 360;\r\n\r\n if (o < 0) {\r\n o += 1;\r\n }\r\n\r\n if (this.s.v > 1) {\r\n s = 1 + o;\r\n } else if (this.s.v < 0) {\r\n s = 0 + o;\r\n } else {\r\n s = this.s.v + o;\r\n }\r\n\r\n if (this.e.v > 1) {\r\n e = 1 + o;\r\n } else if (this.e.v < 0) {\r\n e = 0 + o;\r\n } else {\r\n e = this.e.v + o;\r\n }\r\n\r\n if (s > e) {\r\n var _s = s;\r\n s = e;\r\n e = _s;\r\n }\r\n\r\n s = Math.round(s * 10000) * 0.0001;\r\n e = Math.round(e * 10000) * 0.0001;\r\n this.sValue = s;\r\n this.eValue = e;\r\n } else {\r\n s = this.sValue;\r\n e = this.eValue;\r\n }\r\n\r\n var shapePaths;\r\n var i;\r\n var len = this.shapes.length;\r\n var j;\r\n var jLen;\r\n var pathsData;\r\n var pathData;\r\n var totalShapeLength;\r\n var totalModifierLength = 0;\r\n\r\n if (e === s) {\r\n for (i = 0; i < len; i += 1) {\r\n this.shapes[i].localShapeCollection.releaseShapes();\r\n this.shapes[i].shape._mdf = true;\r\n this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\r\n\r\n if (this._mdf) {\r\n this.shapes[i].pathsData.length = 0;\r\n }\r\n }\r\n } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\r\n var segments = [];\r\n var shapeData;\r\n var localShapeCollection;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n shapeData = this.shapes[i]; // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\r\n\r\n if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\r\n shapeData.shape.paths = shapeData.localShapeCollection;\r\n } else {\r\n shapePaths = shapeData.shape.paths;\r\n jLen = shapePaths._length;\r\n totalShapeLength = 0;\r\n\r\n if (!shapeData.shape._mdf && shapeData.pathsData.length) {\r\n totalShapeLength = shapeData.totalShapeLength;\r\n } else {\r\n pathsData = this.releasePathsData(shapeData.pathsData);\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\r\n pathsData.push(pathData);\r\n totalShapeLength += pathData.totalLength;\r\n }\r\n\r\n shapeData.totalShapeLength = totalShapeLength;\r\n shapeData.pathsData = pathsData;\r\n }\r\n\r\n totalModifierLength += totalShapeLength;\r\n shapeData.shape._mdf = true;\r\n }\r\n }\r\n\r\n var shapeS = s;\r\n var shapeE = e;\r\n var addedLength = 0;\r\n var edges;\r\n\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n shapeData = this.shapes[i];\r\n\r\n if (shapeData.shape._mdf) {\r\n localShapeCollection = shapeData.localShapeCollection;\r\n localShapeCollection.releaseShapes(); // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\r\n\r\n if (this.m === 2 && len > 1) {\r\n edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\r\n addedLength += shapeData.totalShapeLength;\r\n } else {\r\n edges = [[shapeS, shapeE]];\r\n }\r\n\r\n jLen = edges.length;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n shapeS = edges[j][0];\r\n shapeE = edges[j][1];\r\n segments.length = 0;\r\n\r\n if (shapeE <= 1) {\r\n segments.push({\r\n s: shapeData.totalShapeLength * shapeS,\r\n e: shapeData.totalShapeLength * shapeE\r\n });\r\n } else if (shapeS >= 1) {\r\n segments.push({\r\n s: shapeData.totalShapeLength * (shapeS - 1),\r\n e: shapeData.totalShapeLength * (shapeE - 1)\r\n });\r\n } else {\r\n segments.push({\r\n s: shapeData.totalShapeLength * shapeS,\r\n e: shapeData.totalShapeLength\r\n });\r\n segments.push({\r\n s: 0,\r\n e: shapeData.totalShapeLength * (shapeE - 1)\r\n });\r\n }\r\n\r\n var newShapesData = this.addShapes(shapeData, segments[0]);\r\n\r\n if (segments[0].s !== segments[0].e) {\r\n if (segments.length > 1) {\r\n var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\r\n\r\n if (lastShapeInCollection.c) {\r\n var lastShape = newShapesData.pop();\r\n this.addPaths(newShapesData, localShapeCollection);\r\n newShapesData = this.addShapes(shapeData, segments[1], lastShape);\r\n } else {\r\n this.addPaths(newShapesData, localShapeCollection);\r\n newShapesData = this.addShapes(shapeData, segments[1]);\r\n }\r\n }\r\n\r\n this.addPaths(newShapesData, localShapeCollection);\r\n }\r\n }\r\n\r\n shapeData.shape.paths = localShapeCollection;\r\n }\r\n }\r\n } else if (this._mdf) {\r\n for (i = 0; i < len; i += 1) {\r\n // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\r\n // Don't remove this even if it's losing cached info.\r\n this.shapes[i].pathsData.length = 0;\r\n this.shapes[i].shape._mdf = true;\r\n }\r\n }\r\n };\r\n\r\n TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\r\n var i;\r\n var len = newPaths.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n localShapeCollection.addShape(newPaths[i]);\r\n }\r\n };\r\n\r\n TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\r\n shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\r\n shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\r\n\r\n if (newShape) {\r\n shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\r\n }\r\n\r\n shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\r\n };\r\n\r\n TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\r\n shapePath.setXYAt(points[1], points[5], 'o', pos);\r\n shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\r\n\r\n if (newShape) {\r\n shapePath.setXYAt(points[0], points[4], 'v', pos);\r\n }\r\n\r\n shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\r\n };\r\n\r\n TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\r\n var pathsData = shapeData.pathsData;\r\n var shapePaths = shapeData.shape.paths.shapes;\r\n var i;\r\n var len = shapeData.shape.paths._length;\r\n var j;\r\n var jLen;\r\n var addedLength = 0;\r\n var currentLengthData;\r\n var segmentCount;\r\n var lengths;\r\n var segment;\r\n var shapes = [];\r\n var initPos;\r\n var newShape = true;\r\n\r\n if (!shapePath) {\r\n shapePath = shapePool.newElement();\r\n segmentCount = 0;\r\n initPos = 0;\r\n } else {\r\n segmentCount = shapePath._length;\r\n initPos = shapePath._length;\r\n }\r\n\r\n shapes.push(shapePath);\r\n\r\n for (i = 0; i < len; i += 1) {\r\n lengths = pathsData[i].lengths;\r\n shapePath.c = shapePaths[i].c;\r\n jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\r\n\r\n for (j = 1; j < jLen; j += 1) {\r\n currentLengthData = lengths[j - 1];\r\n\r\n if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\r\n addedLength += currentLengthData.addedLength;\r\n shapePath.c = false;\r\n } else if (addedLength > shapeSegment.e) {\r\n shapePath.c = false;\r\n break;\r\n } else {\r\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\r\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\r\n newShape = false;\r\n } else {\r\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\r\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\r\n\r\n newShape = false;\r\n shapePath.c = false;\r\n }\r\n\r\n addedLength += currentLengthData.addedLength;\r\n segmentCount += 1;\r\n }\r\n }\r\n\r\n if (shapePaths[i].c && lengths.length) {\r\n currentLengthData = lengths[j - 1];\r\n\r\n if (addedLength <= shapeSegment.e) {\r\n var segmentLength = lengths[j - 1].addedLength;\r\n\r\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\r\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\r\n newShape = false;\r\n } else {\r\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\r\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\r\n\r\n newShape = false;\r\n shapePath.c = false;\r\n }\r\n } else {\r\n shapePath.c = false;\r\n }\r\n\r\n addedLength += currentLengthData.addedLength;\r\n segmentCount += 1;\r\n }\r\n\r\n if (shapePath._length) {\r\n shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\r\n shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\r\n }\r\n\r\n if (addedLength > shapeSegment.e) {\r\n break;\r\n }\r\n\r\n if (i < len - 1) {\r\n shapePath = shapePool.newElement();\r\n newShape = true;\r\n shapes.push(shapePath);\r\n segmentCount = 0;\r\n }\r\n }\r\n\r\n return shapes;\r\n };\r\n\r\n function PuckerAndBloatModifier() {}\r\n\r\n extendPrototype([ShapeModifier], PuckerAndBloatModifier);\r\n\r\n PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\r\n this.getValue = this.processKeys;\r\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\r\n this._isAnimated = !!this.amount.effectsSequence.length;\r\n };\r\n\r\n PuckerAndBloatModifier.prototype.processPath = function (path, amount) {\r\n var percent = amount / 100;\r\n var centerPoint = [0, 0];\r\n var pathLength = path._length;\r\n var i = 0;\r\n\r\n for (i = 0; i < pathLength; i += 1) {\r\n centerPoint[0] += path.v[i][0];\r\n centerPoint[1] += path.v[i][1];\r\n }\r\n\r\n centerPoint[0] /= pathLength;\r\n centerPoint[1] /= pathLength;\r\n var clonedPath = shapePool.newElement();\r\n clonedPath.c = path.c;\r\n var vX;\r\n var vY;\r\n var oX;\r\n var oY;\r\n var iX;\r\n var iY;\r\n\r\n for (i = 0; i < pathLength; i += 1) {\r\n vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\r\n vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\r\n oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\r\n oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\r\n iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\r\n iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\r\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\r\n }\r\n\r\n return clonedPath;\r\n };\r\n\r\n PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\r\n var shapePaths;\r\n var i;\r\n var len = this.shapes.length;\r\n var j;\r\n var jLen;\r\n var amount = this.amount.v;\r\n\r\n if (amount !== 0) {\r\n var shapeData;\r\n var localShapeCollection;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n shapeData = this.shapes[i];\r\n localShapeCollection = shapeData.localShapeCollection;\r\n\r\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\r\n localShapeCollection.releaseShapes();\r\n shapeData.shape._mdf = true;\r\n shapePaths = shapeData.shape.paths.shapes;\r\n jLen = shapeData.shape.paths._length;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\r\n }\r\n }\r\n\r\n shapeData.shape.paths = shapeData.localShapeCollection;\r\n }\r\n }\r\n\r\n if (!this.dynamicProperties.length) {\r\n this._mdf = false;\r\n }\r\n };\r\n\r\n var TransformPropertyFactory = function () {\r\n var defaultVector = [0, 0];\r\n\r\n function applyToMatrix(mat) {\r\n var _mdf = this._mdf;\r\n this.iterateDynamicProperties();\r\n this._mdf = this._mdf || _mdf;\r\n\r\n if (this.a) {\r\n mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\r\n }\r\n\r\n if (this.s) {\r\n mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\r\n }\r\n\r\n if (this.sk) {\r\n mat.skewFromAxis(-this.sk.v, this.sa.v);\r\n }\r\n\r\n if (this.r) {\r\n mat.rotate(-this.r.v);\r\n } else {\r\n mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\r\n }\r\n\r\n if (this.data.p.s) {\r\n if (this.data.p.z) {\r\n mat.translate(this.px.v, this.py.v, -this.pz.v);\r\n } else {\r\n mat.translate(this.px.v, this.py.v, 0);\r\n }\r\n } else {\r\n mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\r\n }\r\n }\r\n\r\n function processKeys(forceRender) {\r\n if (this.elem.globalData.frameId === this.frameId) {\r\n return;\r\n }\r\n\r\n if (this._isDirty) {\r\n this.precalculateMatrix();\r\n this._isDirty = false;\r\n }\r\n\r\n this.iterateDynamicProperties();\r\n\r\n if (this._mdf || forceRender) {\r\n var frameRate;\r\n this.v.cloneFromProps(this.pre.props);\r\n\r\n if (this.appliedTransformations < 1) {\r\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\r\n }\r\n\r\n if (this.appliedTransformations < 2) {\r\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\r\n }\r\n\r\n if (this.sk && this.appliedTransformations < 3) {\r\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\r\n }\r\n\r\n if (this.r && this.appliedTransformations < 4) {\r\n this.v.rotate(-this.r.v);\r\n } else if (!this.r && this.appliedTransformations < 4) {\r\n this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\r\n }\r\n\r\n if (this.autoOriented) {\r\n var v1;\r\n var v2;\r\n frameRate = this.elem.globalData.frameRate;\r\n\r\n if (this.p && this.p.keyframes && this.p.getValueAtTime) {\r\n if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\r\n v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\r\n v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\r\n } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\r\n v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);\r\n v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\r\n } else {\r\n v1 = this.p.pv;\r\n v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\r\n }\r\n } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\r\n v1 = [];\r\n v2 = [];\r\n var px = this.px;\r\n var py = this.py;\r\n\r\n if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\r\n v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\r\n v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\r\n v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);\r\n v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);\r\n } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\r\n v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);\r\n v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);\r\n v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\r\n v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\r\n } else {\r\n v1 = [px.pv, py.pv];\r\n v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\r\n v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\r\n }\r\n } else {\r\n v2 = defaultVector;\r\n v1 = v2;\r\n }\r\n\r\n this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\r\n }\r\n\r\n if (this.data.p && this.data.p.s) {\r\n if (this.data.p.z) {\r\n this.v.translate(this.px.v, this.py.v, -this.pz.v);\r\n } else {\r\n this.v.translate(this.px.v, this.py.v, 0);\r\n }\r\n } else {\r\n this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\r\n }\r\n }\r\n\r\n this.frameId = this.elem.globalData.frameId;\r\n }\r\n\r\n function precalculateMatrix() {\r\n if (!this.a.k) {\r\n this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\r\n this.appliedTransformations = 1;\r\n } else {\r\n return;\r\n }\r\n\r\n if (!this.s.effectsSequence.length) {\r\n this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\r\n this.appliedTransformations = 2;\r\n } else {\r\n return;\r\n }\r\n\r\n if (this.sk) {\r\n if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\r\n this.pre.skewFromAxis(-this.sk.v, this.sa.v);\r\n this.appliedTransformations = 3;\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n if (this.r) {\r\n if (!this.r.effectsSequence.length) {\r\n this.pre.rotate(-this.r.v);\r\n this.appliedTransformations = 4;\r\n }\r\n } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\r\n this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\r\n this.appliedTransformations = 4;\r\n }\r\n }\r\n\r\n function autoOrient() {//\r\n // var prevP = this.getValueAtTime();\r\n }\r\n\r\n function addDynamicProperty(prop) {\r\n this._addDynamicProperty(prop);\r\n\r\n this.elem.addDynamicProperty(prop);\r\n this._isDirty = true;\r\n }\r\n\r\n function TransformProperty(elem, data, container) {\r\n this.elem = elem;\r\n this.frameId = -1;\r\n this.propType = 'transform';\r\n this.data = data;\r\n this.v = new Matrix(); // Precalculated matrix with non animated properties\r\n\r\n this.pre = new Matrix();\r\n this.appliedTransformations = 0;\r\n this.initDynamicPropertyContainer(container || elem);\r\n\r\n if (data.p && data.p.s) {\r\n this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\r\n this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\r\n\r\n if (data.p.z) {\r\n this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\r\n }\r\n } else {\r\n this.p = PropertyFactory.getProp(elem, data.p || {\r\n k: [0, 0, 0]\r\n }, 1, 0, this);\r\n }\r\n\r\n if (data.rx) {\r\n this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\r\n this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\r\n this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\r\n\r\n if (data.or.k[0].ti) {\r\n var i;\r\n var len = data.or.k.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n data.or.k[i].to = null;\r\n data.or.k[i].ti = null;\r\n }\r\n }\r\n\r\n this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); // sh Indicates it needs to be capped between -180 and 180\r\n\r\n this.or.sh = true;\r\n } else {\r\n this.r = PropertyFactory.getProp(elem, data.r || {\r\n k: 0\r\n }, 0, degToRads, this);\r\n }\r\n\r\n if (data.sk) {\r\n this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\r\n this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\r\n }\r\n\r\n this.a = PropertyFactory.getProp(elem, data.a || {\r\n k: [0, 0, 0]\r\n }, 1, 0, this);\r\n this.s = PropertyFactory.getProp(elem, data.s || {\r\n k: [100, 100, 100]\r\n }, 1, 0.01, this); // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\r\n\r\n if (data.o) {\r\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\r\n } else {\r\n this.o = {\r\n _mdf: false,\r\n v: 1\r\n };\r\n }\r\n\r\n this._isDirty = true;\r\n\r\n if (!this.dynamicProperties.length) {\r\n this.getValue(true);\r\n }\r\n }\r\n\r\n TransformProperty.prototype = {\r\n applyToMatrix: applyToMatrix,\r\n getValue: processKeys,\r\n precalculateMatrix: precalculateMatrix,\r\n autoOrient: autoOrient\r\n };\r\n extendPrototype([DynamicPropertyContainer], TransformProperty);\r\n TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\r\n TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\r\n\r\n function getTransformProperty(elem, data, container) {\r\n return new TransformProperty(elem, data, container);\r\n }\r\n\r\n return {\r\n getTransformProperty: getTransformProperty\r\n };\r\n }();\r\n\r\n function RepeaterModifier() {}\r\n\r\n extendPrototype([ShapeModifier], RepeaterModifier);\r\n\r\n RepeaterModifier.prototype.initModifierProperties = function (elem, data) {\r\n this.getValue = this.processKeys;\r\n this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\r\n this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\r\n this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\r\n this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\r\n this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\r\n this.data = data;\r\n\r\n if (!this.dynamicProperties.length) {\r\n this.getValue(true);\r\n }\r\n\r\n this._isAnimated = !!this.dynamicProperties.length;\r\n this.pMatrix = new Matrix();\r\n this.rMatrix = new Matrix();\r\n this.sMatrix = new Matrix();\r\n this.tMatrix = new Matrix();\r\n this.matrix = new Matrix();\r\n };\r\n\r\n RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\r\n var dir = inv ? -1 : 1;\r\n var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\r\n var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\r\n pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\r\n rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\r\n rMatrix.rotate(-transform.r.v * dir * perc);\r\n rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\r\n sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\r\n sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\r\n sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\r\n };\r\n\r\n RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\r\n this.elem = elem;\r\n this.arr = arr;\r\n this.pos = pos;\r\n this.elemsData = elemsData;\r\n this._currentCopies = 0;\r\n this._elements = [];\r\n this._groups = [];\r\n this.frameId = -1;\r\n this.initDynamicPropertyContainer(elem);\r\n this.initModifierProperties(elem, arr[pos]);\r\n\r\n while (pos > 0) {\r\n pos -= 1; // this._elements.unshift(arr.splice(pos,1)[0]);\r\n\r\n this._elements.unshift(arr[pos]);\r\n }\r\n\r\n if (this.dynamicProperties.length) {\r\n this.k = true;\r\n } else {\r\n this.getValue(true);\r\n }\r\n };\r\n\r\n RepeaterModifier.prototype.resetElements = function (elements) {\r\n var i;\r\n var len = elements.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n elements[i]._processed = false;\r\n\r\n if (elements[i].ty === 'gr') {\r\n this.resetElements(elements[i].it);\r\n }\r\n }\r\n };\r\n\r\n RepeaterModifier.prototype.cloneElements = function (elements) {\r\n var newElements = JSON.parse(JSON.stringify(elements));\r\n this.resetElements(newElements);\r\n return newElements;\r\n };\r\n\r\n RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\r\n var i;\r\n var len = elements.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n elements[i]._render = renderFlag;\r\n\r\n if (elements[i].ty === 'gr') {\r\n this.changeGroupRender(elements[i].it, renderFlag);\r\n }\r\n }\r\n };\r\n\r\n RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\r\n var items;\r\n var itemsTransform;\r\n var i;\r\n var dir;\r\n var cont;\r\n var hasReloaded = false;\r\n\r\n if (this._mdf || _isFirstFrame) {\r\n var copies = Math.ceil(this.c.v);\r\n\r\n if (this._groups.length < copies) {\r\n while (this._groups.length < copies) {\r\n var group = {\r\n it: this.cloneElements(this._elements),\r\n ty: 'gr'\r\n };\r\n group.it.push({\r\n a: {\r\n a: 0,\r\n ix: 1,\r\n k: [0, 0]\r\n },\r\n nm: 'Transform',\r\n o: {\r\n a: 0,\r\n ix: 7,\r\n k: 100\r\n },\r\n p: {\r\n a: 0,\r\n ix: 2,\r\n k: [0, 0]\r\n },\r\n r: {\r\n a: 1,\r\n ix: 6,\r\n k: [{\r\n s: 0,\r\n e: 0,\r\n t: 0\r\n }, {\r\n s: 0,\r\n e: 0,\r\n t: 1\r\n }]\r\n },\r\n s: {\r\n a: 0,\r\n ix: 3,\r\n k: [100, 100]\r\n },\r\n sa: {\r\n a: 0,\r\n ix: 5,\r\n k: 0\r\n },\r\n sk: {\r\n a: 0,\r\n ix: 4,\r\n k: 0\r\n },\r\n ty: 'tr'\r\n });\r\n this.arr.splice(0, 0, group);\r\n\r\n this._groups.splice(0, 0, group);\r\n\r\n this._currentCopies += 1;\r\n }\r\n\r\n this.elem.reloadShapes();\r\n hasReloaded = true;\r\n }\r\n\r\n cont = 0;\r\n var renderFlag;\r\n\r\n for (i = 0; i <= this._groups.length - 1; i += 1) {\r\n renderFlag = cont < copies;\r\n this._groups[i]._render = renderFlag;\r\n this.changeGroupRender(this._groups[i].it, renderFlag);\r\n\r\n if (!renderFlag) {\r\n var elems = this.elemsData[i].it;\r\n var transformData = elems[elems.length - 1];\r\n\r\n if (transformData.transform.op.v !== 0) {\r\n transformData.transform.op._mdf = true;\r\n transformData.transform.op.v = 0;\r\n } else {\r\n transformData.transform.op._mdf = false;\r\n }\r\n }\r\n\r\n cont += 1;\r\n }\r\n\r\n this._currentCopies = copies; /// /\r\n\r\n var offset = this.o.v;\r\n var offsetModulo = offset % 1;\r\n var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\r\n var pProps = this.pMatrix.props;\r\n var rProps = this.rMatrix.props;\r\n var sProps = this.sMatrix.props;\r\n this.pMatrix.reset();\r\n this.rMatrix.reset();\r\n this.sMatrix.reset();\r\n this.tMatrix.reset();\r\n this.matrix.reset();\r\n var iteration = 0;\r\n\r\n if (offset > 0) {\r\n while (iteration < roundOffset) {\r\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\r\n iteration += 1;\r\n }\r\n\r\n if (offsetModulo) {\r\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\r\n iteration += offsetModulo;\r\n }\r\n } else if (offset < 0) {\r\n while (iteration > roundOffset) {\r\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\r\n iteration -= 1;\r\n }\r\n\r\n if (offsetModulo) {\r\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\r\n iteration -= offsetModulo;\r\n }\r\n }\r\n\r\n i = this.data.m === 1 ? 0 : this._currentCopies - 1;\r\n dir = this.data.m === 1 ? 1 : -1;\r\n cont = this._currentCopies;\r\n var j;\r\n var jLen;\r\n\r\n while (cont) {\r\n items = this.elemsData[i].it;\r\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\r\n jLen = itemsTransform.length;\r\n items[items.length - 1].transform.mProps._mdf = true;\r\n items[items.length - 1].transform.op._mdf = true;\r\n items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\r\n\r\n if (iteration !== 0) {\r\n if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\r\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\r\n }\r\n\r\n this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\r\n this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\r\n this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n itemsTransform[j] = this.matrix.props[j];\r\n }\r\n\r\n this.matrix.reset();\r\n } else {\r\n this.matrix.reset();\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n itemsTransform[j] = this.matrix.props[j];\r\n }\r\n }\r\n\r\n iteration += 1;\r\n cont -= 1;\r\n i += dir;\r\n }\r\n } else {\r\n cont = this._currentCopies;\r\n i = 0;\r\n dir = 1;\r\n\r\n while (cont) {\r\n items = this.elemsData[i].it;\r\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\r\n items[items.length - 1].transform.mProps._mdf = false;\r\n items[items.length - 1].transform.op._mdf = false;\r\n cont -= 1;\r\n i += dir;\r\n }\r\n }\r\n\r\n return hasReloaded;\r\n };\r\n\r\n RepeaterModifier.prototype.addShape = function () {};\r\n\r\n function RoundCornersModifier() {}\r\n\r\n extendPrototype([ShapeModifier], RoundCornersModifier);\r\n\r\n RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\r\n this.getValue = this.processKeys;\r\n this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\r\n this._isAnimated = !!this.rd.effectsSequence.length;\r\n };\r\n\r\n RoundCornersModifier.prototype.processPath = function (path, round) {\r\n var clonedPath = shapePool.newElement();\r\n clonedPath.c = path.c;\r\n var i;\r\n var len = path._length;\r\n var currentV;\r\n var currentI;\r\n var currentO;\r\n var closerV;\r\n var distance;\r\n var newPosPerc;\r\n var index = 0;\r\n var vX;\r\n var vY;\r\n var oX;\r\n var oY;\r\n var iX;\r\n var iY;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n currentV = path.v[i];\r\n currentO = path.o[i];\r\n currentI = path.i[i];\r\n\r\n if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\r\n if ((i === 0 || i === len - 1) && !path.c) {\r\n clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\r\n /* clonedPath.v[index] = currentV;\r\n clonedPath.o[index] = currentO;\r\n clonedPath.i[index] = currentI; */\r\n\r\n index += 1;\r\n } else {\r\n if (i === 0) {\r\n closerV = path.v[len - 1];\r\n } else {\r\n closerV = path.v[i - 1];\r\n }\r\n\r\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\r\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\r\n iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\r\n vX = iX;\r\n iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\r\n vY = iY;\r\n oX = vX - (vX - currentV[0]) * roundCorner;\r\n oY = vY - (vY - currentV[1]) * roundCorner;\r\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\r\n index += 1;\r\n\r\n if (i === len - 1) {\r\n closerV = path.v[0];\r\n } else {\r\n closerV = path.v[i + 1];\r\n }\r\n\r\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\r\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\r\n oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\r\n vX = oX;\r\n oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\r\n vY = oY;\r\n iX = vX - (vX - currentV[0]) * roundCorner;\r\n iY = vY - (vY - currentV[1]) * roundCorner;\r\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\r\n index += 1;\r\n }\r\n } else {\r\n clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\r\n index += 1;\r\n }\r\n }\r\n\r\n return clonedPath;\r\n };\r\n\r\n RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\r\n var shapePaths;\r\n var i;\r\n var len = this.shapes.length;\r\n var j;\r\n var jLen;\r\n var rd = this.rd.v;\r\n\r\n if (rd !== 0) {\r\n var shapeData;\r\n var localShapeCollection;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n shapeData = this.shapes[i];\r\n localShapeCollection = shapeData.localShapeCollection;\r\n\r\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\r\n localShapeCollection.releaseShapes();\r\n shapeData.shape._mdf = true;\r\n shapePaths = shapeData.shape.paths.shapes;\r\n jLen = shapeData.shape.paths._length;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\r\n }\r\n }\r\n\r\n shapeData.shape.paths = shapeData.localShapeCollection;\r\n }\r\n }\r\n\r\n if (!this.dynamicProperties.length) {\r\n this._mdf = false;\r\n }\r\n };\r\n\r\n function getFontProperties(fontData) {\r\n var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\r\n var fWeight = 'normal';\r\n var fStyle = 'normal';\r\n var len = styles.length;\r\n var styleName;\r\n\r\n for (var i = 0; i < len; i += 1) {\r\n styleName = styles[i].toLowerCase();\r\n\r\n switch (styleName) {\r\n case 'italic':\r\n fStyle = 'italic';\r\n break;\r\n\r\n case 'bold':\r\n fWeight = '700';\r\n break;\r\n\r\n case 'black':\r\n fWeight = '900';\r\n break;\r\n\r\n case 'medium':\r\n fWeight = '500';\r\n break;\r\n\r\n case 'regular':\r\n case 'normal':\r\n fWeight = '400';\r\n break;\r\n\r\n case 'light':\r\n case 'thin':\r\n fWeight = '200';\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n return {\r\n style: fStyle,\r\n weight: fontData.fWeight || fWeight\r\n };\r\n }\r\n\r\n var FontManager = function () {\r\n var maxWaitingTime = 5000;\r\n var emptyChar = {\r\n w: 0,\r\n size: 0,\r\n shapes: [],\r\n data: {\r\n shapes: []\r\n }\r\n };\r\n var combinedCharacters = []; // Hindi characters\r\n\r\n combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\r\n var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];\r\n var zeroWidthJoiner = [65039, 8205];\r\n\r\n function trimFontOptions(font) {\r\n var familyArray = font.split(',');\r\n var i;\r\n var len = familyArray.length;\r\n var enabledFamilies = [];\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\r\n enabledFamilies.push(familyArray[i]);\r\n }\r\n }\r\n\r\n return enabledFamilies.join(',');\r\n }\r\n\r\n function setUpNode(font, family) {\r\n var parentNode = createTag('span'); // Node is invisible to screen readers.\r\n\r\n parentNode.setAttribute('aria-hidden', true);\r\n parentNode.style.fontFamily = family;\r\n var node = createTag('span'); // Characters that vary significantly among different fonts\r\n\r\n node.innerText = 'giItT1WQy@!-/#'; // Visible - so we can measure it - but not on the screen\r\n\r\n parentNode.style.position = 'absolute';\r\n parentNode.style.left = '-10000px';\r\n parentNode.style.top = '-10000px'; // Large font size makes even subtle changes obvious\r\n\r\n parentNode.style.fontSize = '300px'; // Reset any font properties\r\n\r\n parentNode.style.fontVariant = 'normal';\r\n parentNode.style.fontStyle = 'normal';\r\n parentNode.style.fontWeight = 'normal';\r\n parentNode.style.letterSpacing = '0';\r\n parentNode.appendChild(node);\r\n document.body.appendChild(parentNode); // Remember width with no applied web font\r\n\r\n var width = node.offsetWidth;\r\n node.style.fontFamily = trimFontOptions(font) + ', ' + family;\r\n return {\r\n node: node,\r\n w: width,\r\n parent: parentNode\r\n };\r\n }\r\n\r\n function checkLoadedFonts() {\r\n var i;\r\n var len = this.fonts.length;\r\n var node;\r\n var w;\r\n var loadedCount = len;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (this.fonts[i].loaded) {\r\n loadedCount -= 1;\r\n } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\r\n this.fonts[i].loaded = true;\r\n } else {\r\n node = this.fonts[i].monoCase.node;\r\n w = this.fonts[i].monoCase.w;\r\n\r\n if (node.offsetWidth !== w) {\r\n loadedCount -= 1;\r\n this.fonts[i].loaded = true;\r\n } else {\r\n node = this.fonts[i].sansCase.node;\r\n w = this.fonts[i].sansCase.w;\r\n\r\n if (node.offsetWidth !== w) {\r\n loadedCount -= 1;\r\n this.fonts[i].loaded = true;\r\n }\r\n }\r\n\r\n if (this.fonts[i].loaded) {\r\n this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\r\n this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\r\n }\r\n }\r\n }\r\n\r\n if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\r\n setTimeout(this.checkLoadedFontsBinded, 20);\r\n } else {\r\n setTimeout(this.setIsLoadedBinded, 10);\r\n }\r\n }\r\n\r\n function createHelper(fontData, def) {\r\n var engine = document.body && def ? 'svg' : 'canvas';\r\n var helper;\r\n var fontProps = getFontProperties(fontData);\r\n\r\n if (engine === 'svg') {\r\n var tHelper = createNS('text');\r\n tHelper.style.fontSize = '100px'; // tHelper.style.fontFamily = fontData.fFamily;\r\n\r\n tHelper.setAttribute('font-family', fontData.fFamily);\r\n tHelper.setAttribute('font-style', fontProps.style);\r\n tHelper.setAttribute('font-weight', fontProps.weight);\r\n tHelper.textContent = '1';\r\n\r\n if (fontData.fClass) {\r\n tHelper.style.fontFamily = 'inherit';\r\n tHelper.setAttribute('class', fontData.fClass);\r\n } else {\r\n tHelper.style.fontFamily = fontData.fFamily;\r\n }\r\n\r\n def.appendChild(tHelper);\r\n helper = tHelper;\r\n } else {\r\n var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');\r\n tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;\r\n helper = tCanvasHelper;\r\n }\r\n\r\n function measure(text) {\r\n if (engine === 'svg') {\r\n helper.textContent = text;\r\n return helper.getComputedTextLength();\r\n }\r\n\r\n return helper.measureText(text).width;\r\n }\r\n\r\n return {\r\n measureText: measure\r\n };\r\n }\r\n\r\n function addFonts(fontData, defs) {\r\n if (!fontData) {\r\n this.isLoaded = true;\r\n return;\r\n }\r\n\r\n if (this.chars) {\r\n this.isLoaded = true;\r\n this.fonts = fontData.list;\r\n return;\r\n }\r\n\r\n if (!document.body) {\r\n this.isLoaded = true;\r\n fontData.list.forEach(function (data) {\r\n data.helper = createHelper(data);\r\n data.cache = {};\r\n });\r\n this.fonts = fontData.list;\r\n return;\r\n }\r\n\r\n var fontArr = fontData.list;\r\n var i;\r\n var len = fontArr.length;\r\n var _pendingFonts = len;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n var shouldLoadFont = true;\r\n var loadedSelector;\r\n var j;\r\n fontArr[i].loaded = false;\r\n fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\r\n fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\r\n\r\n if (!fontArr[i].fPath) {\r\n fontArr[i].loaded = true;\r\n _pendingFonts -= 1;\r\n } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\r\n loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\r\n\r\n if (loadedSelector.length > 0) {\r\n shouldLoadFont = false;\r\n }\r\n\r\n if (shouldLoadFont) {\r\n var s = createTag('style');\r\n s.setAttribute('f-forigin', fontArr[i].fOrigin);\r\n s.setAttribute('f-origin', fontArr[i].origin);\r\n s.setAttribute('f-family', fontArr[i].fFamily);\r\n s.type = 'text/css';\r\n s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\r\n defs.appendChild(s);\r\n }\r\n } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\r\n loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\r\n\r\n for (j = 0; j < loadedSelector.length; j += 1) {\r\n if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\r\n // Font is already loaded\r\n shouldLoadFont = false;\r\n }\r\n }\r\n\r\n if (shouldLoadFont) {\r\n var l = createTag('link');\r\n l.setAttribute('f-forigin', fontArr[i].fOrigin);\r\n l.setAttribute('f-origin', fontArr[i].origin);\r\n l.type = 'text/css';\r\n l.rel = 'stylesheet';\r\n l.href = fontArr[i].fPath;\r\n document.body.appendChild(l);\r\n }\r\n } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\r\n loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\r\n\r\n for (j = 0; j < loadedSelector.length; j += 1) {\r\n if (fontArr[i].fPath === loadedSelector[j].src) {\r\n // Font is already loaded\r\n shouldLoadFont = false;\r\n }\r\n }\r\n\r\n if (shouldLoadFont) {\r\n var sc = createTag('link');\r\n sc.setAttribute('f-forigin', fontArr[i].fOrigin);\r\n sc.setAttribute('f-origin', fontArr[i].origin);\r\n sc.setAttribute('rel', 'stylesheet');\r\n sc.setAttribute('href', fontArr[i].fPath);\r\n defs.appendChild(sc);\r\n }\r\n }\r\n\r\n fontArr[i].helper = createHelper(fontArr[i], defs);\r\n fontArr[i].cache = {};\r\n this.fonts.push(fontArr[i]);\r\n }\r\n\r\n if (_pendingFonts === 0) {\r\n this.isLoaded = true;\r\n } else {\r\n // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\r\n // Adding this timeout seems to fix it\r\n setTimeout(this.checkLoadedFonts.bind(this), 100);\r\n }\r\n }\r\n\r\n function addChars(chars) {\r\n if (!chars) {\r\n return;\r\n }\r\n\r\n if (!this.chars) {\r\n this.chars = [];\r\n }\r\n\r\n var i;\r\n var len = chars.length;\r\n var j;\r\n var jLen = this.chars.length;\r\n var found;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n j = 0;\r\n found = false;\r\n\r\n while (j < jLen) {\r\n if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\r\n found = true;\r\n }\r\n\r\n j += 1;\r\n }\r\n\r\n if (!found) {\r\n this.chars.push(chars[i]);\r\n jLen += 1;\r\n }\r\n }\r\n }\r\n\r\n function getCharData(_char, style, font) {\r\n var i = 0;\r\n var len = this.chars.length;\r\n\r\n while (i < len) {\r\n if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) {\r\n return this.chars[i];\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // eslint-disable-line no-console\r\n && !this._warned) {\r\n this._warned = true;\r\n console.warn('Missing character from exported characters list: ', _char, style, font); // eslint-disable-line no-console\r\n }\r\n\r\n return emptyChar;\r\n }\r\n\r\n function measureText(_char2, fontName, size) {\r\n var fontData = this.getFontByName(fontName);\r\n\r\n var index = _char2.charCodeAt(0);\r\n\r\n if (!fontData.cache[index + 1]) {\r\n var tHelper = fontData.helper;\r\n\r\n if (_char2 === ' ') {\r\n var doubleSize = tHelper.measureText('|' + _char2 + '|');\r\n var singleSize = tHelper.measureText('||');\r\n fontData.cache[index + 1] = (doubleSize - singleSize) / 100;\r\n } else {\r\n fontData.cache[index + 1] = tHelper.measureText(_char2) / 100;\r\n }\r\n }\r\n\r\n return fontData.cache[index + 1] * size;\r\n }\r\n\r\n function getFontByName(name) {\r\n var i = 0;\r\n var len = this.fonts.length;\r\n\r\n while (i < len) {\r\n if (this.fonts[i].fName === name) {\r\n return this.fonts[i];\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n return this.fonts[0];\r\n }\r\n\r\n function isModifier(firstCharCode, secondCharCode) {\r\n var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\r\n return surrogateModifiers.indexOf(sum) !== -1;\r\n }\r\n\r\n function isZeroWidthJoiner(firstCharCode, secondCharCode) {\r\n if (!secondCharCode) {\r\n return firstCharCode === zeroWidthJoiner[1];\r\n }\r\n\r\n return firstCharCode === zeroWidthJoiner[0] && secondCharCode === zeroWidthJoiner[1];\r\n }\r\n\r\n function isCombinedCharacter(_char3) {\r\n return combinedCharacters.indexOf(_char3) !== -1;\r\n }\r\n\r\n function setIsLoaded() {\r\n this.isLoaded = true;\r\n }\r\n\r\n var Font = function Font() {\r\n this.fonts = [];\r\n this.chars = null;\r\n this.typekitLoaded = 0;\r\n this.isLoaded = false;\r\n this._warned = false;\r\n this.initTime = Date.now();\r\n this.setIsLoadedBinded = this.setIsLoaded.bind(this);\r\n this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\r\n };\r\n\r\n Font.isModifier = isModifier;\r\n Font.isZeroWidthJoiner = isZeroWidthJoiner;\r\n Font.isCombinedCharacter = isCombinedCharacter;\r\n var fontPrototype = {\r\n addChars: addChars,\r\n addFonts: addFonts,\r\n getCharData: getCharData,\r\n getFontByName: getFontByName,\r\n measureText: measureText,\r\n checkLoadedFonts: checkLoadedFonts,\r\n setIsLoaded: setIsLoaded\r\n };\r\n Font.prototype = fontPrototype;\r\n return Font;\r\n }();\r\n\r\n function RenderableElement() {}\r\n\r\n RenderableElement.prototype = {\r\n initRenderable: function initRenderable() {\r\n // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\r\n this.isInRange = false; // layer's display state\r\n\r\n this.hidden = false; // If layer's transparency equals 0, it can be hidden\r\n\r\n this.isTransparent = false; // list of animated components\r\n\r\n this.renderableComponents = [];\r\n },\r\n addRenderableComponent: function addRenderableComponent(component) {\r\n if (this.renderableComponents.indexOf(component) === -1) {\r\n this.renderableComponents.push(component);\r\n }\r\n },\r\n removeRenderableComponent: function removeRenderableComponent(component) {\r\n if (this.renderableComponents.indexOf(component) !== -1) {\r\n this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\r\n }\r\n },\r\n prepareRenderableFrame: function prepareRenderableFrame(num) {\r\n this.checkLayerLimits(num);\r\n },\r\n checkTransparency: function checkTransparency() {\r\n if (this.finalTransform.mProp.o.v <= 0) {\r\n if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\r\n this.isTransparent = true;\r\n this.hide();\r\n }\r\n } else if (this.isTransparent) {\r\n this.isTransparent = false;\r\n this.show();\r\n }\r\n },\r\n\r\n /**\r\n * @function\r\n * Initializes frame related properties.\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n *\r\n */\r\n checkLayerLimits: function checkLayerLimits(num) {\r\n if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\r\n if (this.isInRange !== true) {\r\n this.globalData._mdf = true;\r\n this._mdf = true;\r\n this.isInRange = true;\r\n this.show();\r\n }\r\n } else if (this.isInRange !== false) {\r\n this.globalData._mdf = true;\r\n this.isInRange = false;\r\n this.hide();\r\n }\r\n },\r\n renderRenderable: function renderRenderable() {\r\n var i;\r\n var len = this.renderableComponents.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.renderableComponents[i].renderFrame(this._isFirstFrame);\r\n }\r\n /* this.maskManager.renderFrame(this.finalTransform.mat);\r\n this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\r\n\r\n },\r\n sourceRectAtTime: function sourceRectAtTime() {\r\n return {\r\n top: 0,\r\n left: 0,\r\n width: 100,\r\n height: 100\r\n };\r\n },\r\n getLayerSize: function getLayerSize() {\r\n if (this.data.ty === 5) {\r\n return {\r\n w: this.data.textData.width,\r\n h: this.data.textData.height\r\n };\r\n }\r\n\r\n return {\r\n w: this.data.width,\r\n h: this.data.height\r\n };\r\n }\r\n };\r\n\r\n var MaskManagerInterface = function () {\r\n function MaskInterface(mask, data) {\r\n this._mask = mask;\r\n this._data = data;\r\n }\r\n\r\n Object.defineProperty(MaskInterface.prototype, 'maskPath', {\r\n get: function get() {\r\n if (this._mask.prop.k) {\r\n this._mask.prop.getValue();\r\n }\r\n\r\n return this._mask.prop;\r\n }\r\n });\r\n Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\r\n get: function get() {\r\n if (this._mask.op.k) {\r\n this._mask.op.getValue();\r\n }\r\n\r\n return this._mask.op.v * 100;\r\n }\r\n });\r\n\r\n var MaskManager = function MaskManager(maskManager) {\r\n var _masksInterfaces = createSizedArray(maskManager.viewData.length);\r\n\r\n var i;\r\n var len = maskManager.viewData.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\r\n }\r\n\r\n var maskFunction = function maskFunction(name) {\r\n i = 0;\r\n\r\n while (i < len) {\r\n if (maskManager.masksProperties[i].nm === name) {\r\n return _masksInterfaces[i];\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n return maskFunction;\r\n };\r\n\r\n return MaskManager;\r\n }();\r\n\r\n var ExpressionPropertyInterface = function () {\r\n var defaultUnidimensionalValue = {\r\n pv: 0,\r\n v: 0,\r\n mult: 1\r\n };\r\n var defaultMultidimensionalValue = {\r\n pv: [0, 0, 0],\r\n v: [0, 0, 0],\r\n mult: 1\r\n };\r\n\r\n function completeProperty(expressionValue, property, type) {\r\n Object.defineProperty(expressionValue, 'velocity', {\r\n get: function get() {\r\n return property.getVelocityAtTime(property.comp.currentFrame);\r\n }\r\n });\r\n expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\r\n\r\n expressionValue.key = function (pos) {\r\n if (!expressionValue.numKeys) {\r\n return 0;\r\n }\r\n\r\n var value = '';\r\n\r\n if ('s' in property.keyframes[pos - 1]) {\r\n value = property.keyframes[pos - 1].s;\r\n } else if ('e' in property.keyframes[pos - 2]) {\r\n value = property.keyframes[pos - 2].e;\r\n } else {\r\n value = property.keyframes[pos - 2].s;\r\n }\r\n\r\n var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\r\n\r\n valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\r\n valueProp.value = type === 'unidimensional' ? value[0] : value;\r\n return valueProp;\r\n };\r\n\r\n expressionValue.valueAtTime = property.getValueAtTime;\r\n expressionValue.speedAtTime = property.getSpeedAtTime;\r\n expressionValue.velocityAtTime = property.getVelocityAtTime;\r\n expressionValue.propertyGroup = property.propertyGroup;\r\n }\r\n\r\n function UnidimensionalPropertyInterface(property) {\r\n if (!property || !('pv' in property)) {\r\n property = defaultUnidimensionalValue;\r\n }\r\n\r\n var mult = 1 / property.mult;\r\n var val = property.pv * mult;\r\n var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\r\n\r\n expressionValue.value = val;\r\n completeProperty(expressionValue, property, 'unidimensional');\r\n return function () {\r\n if (property.k) {\r\n property.getValue();\r\n }\r\n\r\n val = property.v * mult;\r\n\r\n if (expressionValue.value !== val) {\r\n expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\r\n\r\n expressionValue.value = val;\r\n completeProperty(expressionValue, property, 'unidimensional');\r\n }\r\n\r\n return expressionValue;\r\n };\r\n }\r\n\r\n function MultidimensionalPropertyInterface(property) {\r\n if (!property || !('pv' in property)) {\r\n property = defaultMultidimensionalValue;\r\n }\r\n\r\n var mult = 1 / property.mult;\r\n var len = property.data && property.data.l || property.pv.length;\r\n var expressionValue = createTypedArray('float32', len);\r\n var arrValue = createTypedArray('float32', len);\r\n expressionValue.value = arrValue;\r\n completeProperty(expressionValue, property, 'multidimensional');\r\n return function () {\r\n if (property.k) {\r\n property.getValue();\r\n }\r\n\r\n for (var i = 0; i < len; i += 1) {\r\n arrValue[i] = property.v[i] * mult;\r\n expressionValue[i] = arrValue[i];\r\n }\r\n\r\n return expressionValue;\r\n };\r\n } // TODO: try to avoid using this getter\r\n\r\n\r\n function defaultGetter() {\r\n return defaultUnidimensionalValue;\r\n }\r\n\r\n return function (property) {\r\n if (!property) {\r\n return defaultGetter;\r\n }\r\n\r\n if (property.propType === 'unidimensional') {\r\n return UnidimensionalPropertyInterface(property);\r\n }\r\n\r\n return MultidimensionalPropertyInterface(property);\r\n };\r\n }();\r\n\r\n var TransformExpressionInterface = function () {\r\n return function (transform) {\r\n function _thisFunction(name) {\r\n switch (name) {\r\n case 'scale':\r\n case 'Scale':\r\n case 'ADBE Scale':\r\n case 6:\r\n return _thisFunction.scale;\r\n\r\n case 'rotation':\r\n case 'Rotation':\r\n case 'ADBE Rotation':\r\n case 'ADBE Rotate Z':\r\n case 10:\r\n return _thisFunction.rotation;\r\n\r\n case 'ADBE Rotate X':\r\n return _thisFunction.xRotation;\r\n\r\n case 'ADBE Rotate Y':\r\n return _thisFunction.yRotation;\r\n\r\n case 'position':\r\n case 'Position':\r\n case 'ADBE Position':\r\n case 2:\r\n return _thisFunction.position;\r\n\r\n case 'ADBE Position_0':\r\n return _thisFunction.xPosition;\r\n\r\n case 'ADBE Position_1':\r\n return _thisFunction.yPosition;\r\n\r\n case 'ADBE Position_2':\r\n return _thisFunction.zPosition;\r\n\r\n case 'anchorPoint':\r\n case 'AnchorPoint':\r\n case 'Anchor Point':\r\n case 'ADBE AnchorPoint':\r\n case 1:\r\n return _thisFunction.anchorPoint;\r\n\r\n case 'opacity':\r\n case 'Opacity':\r\n case 11:\r\n return _thisFunction.opacity;\r\n\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n Object.defineProperty(_thisFunction, 'rotation', {\r\n get: ExpressionPropertyInterface(transform.r || transform.rz)\r\n });\r\n Object.defineProperty(_thisFunction, 'zRotation', {\r\n get: ExpressionPropertyInterface(transform.rz || transform.r)\r\n });\r\n Object.defineProperty(_thisFunction, 'xRotation', {\r\n get: ExpressionPropertyInterface(transform.rx)\r\n });\r\n Object.defineProperty(_thisFunction, 'yRotation', {\r\n get: ExpressionPropertyInterface(transform.ry)\r\n });\r\n Object.defineProperty(_thisFunction, 'scale', {\r\n get: ExpressionPropertyInterface(transform.s)\r\n });\r\n\r\n var _px;\r\n\r\n var _py;\r\n\r\n var _pz;\r\n\r\n var _transformFactory;\r\n\r\n if (transform.p) {\r\n _transformFactory = ExpressionPropertyInterface(transform.p);\r\n } else {\r\n _px = ExpressionPropertyInterface(transform.px);\r\n _py = ExpressionPropertyInterface(transform.py);\r\n\r\n if (transform.pz) {\r\n _pz = ExpressionPropertyInterface(transform.pz);\r\n }\r\n }\r\n\r\n Object.defineProperty(_thisFunction, 'position', {\r\n get: function get() {\r\n if (transform.p) {\r\n return _transformFactory();\r\n }\r\n\r\n return [_px(), _py(), _pz ? _pz() : 0];\r\n }\r\n });\r\n Object.defineProperty(_thisFunction, 'xPosition', {\r\n get: ExpressionPropertyInterface(transform.px)\r\n });\r\n Object.defineProperty(_thisFunction, 'yPosition', {\r\n get: ExpressionPropertyInterface(transform.py)\r\n });\r\n Object.defineProperty(_thisFunction, 'zPosition', {\r\n get: ExpressionPropertyInterface(transform.pz)\r\n });\r\n Object.defineProperty(_thisFunction, 'anchorPoint', {\r\n get: ExpressionPropertyInterface(transform.a)\r\n });\r\n Object.defineProperty(_thisFunction, 'opacity', {\r\n get: ExpressionPropertyInterface(transform.o)\r\n });\r\n Object.defineProperty(_thisFunction, 'skew', {\r\n get: ExpressionPropertyInterface(transform.sk)\r\n });\r\n Object.defineProperty(_thisFunction, 'skewAxis', {\r\n get: ExpressionPropertyInterface(transform.sa)\r\n });\r\n Object.defineProperty(_thisFunction, 'orientation', {\r\n get: ExpressionPropertyInterface(transform.or)\r\n });\r\n return _thisFunction;\r\n };\r\n }();\r\n\r\n var LayerExpressionInterface = function () {\r\n function getMatrix(time) {\r\n var toWorldMat = new Matrix();\r\n\r\n if (time !== undefined) {\r\n var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\r\n\r\n propMatrix.clone(toWorldMat);\r\n } else {\r\n var transformMat = this._elem.finalTransform.mProp;\r\n transformMat.applyToMatrix(toWorldMat);\r\n }\r\n\r\n return toWorldMat;\r\n }\r\n\r\n function toWorldVec(arr, time) {\r\n var toWorldMat = this.getMatrix(time);\r\n toWorldMat.props[12] = 0;\r\n toWorldMat.props[13] = 0;\r\n toWorldMat.props[14] = 0;\r\n return this.applyPoint(toWorldMat, arr);\r\n }\r\n\r\n function toWorld(arr, time) {\r\n var toWorldMat = this.getMatrix(time);\r\n return this.applyPoint(toWorldMat, arr);\r\n }\r\n\r\n function fromWorldVec(arr, time) {\r\n var toWorldMat = this.getMatrix(time);\r\n toWorldMat.props[12] = 0;\r\n toWorldMat.props[13] = 0;\r\n toWorldMat.props[14] = 0;\r\n return this.invertPoint(toWorldMat, arr);\r\n }\r\n\r\n function fromWorld(arr, time) {\r\n var toWorldMat = this.getMatrix(time);\r\n return this.invertPoint(toWorldMat, arr);\r\n }\r\n\r\n function applyPoint(matrix, arr) {\r\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\r\n var i;\r\n var len = this._elem.hierarchy.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\r\n }\r\n }\r\n\r\n return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\r\n }\r\n\r\n function invertPoint(matrix, arr) {\r\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\r\n var i;\r\n var len = this._elem.hierarchy.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\r\n }\r\n }\r\n\r\n return matrix.inversePoint(arr);\r\n }\r\n\r\n function fromComp(arr) {\r\n var toWorldMat = new Matrix();\r\n toWorldMat.reset();\r\n\r\n this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\r\n\r\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\r\n var i;\r\n var len = this._elem.hierarchy.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\r\n }\r\n\r\n return toWorldMat.inversePoint(arr);\r\n }\r\n\r\n return toWorldMat.inversePoint(arr);\r\n }\r\n\r\n function sampleImage() {\r\n return [1, 1, 1, 1];\r\n }\r\n\r\n return function (elem) {\r\n var transformInterface;\r\n\r\n function _registerMaskInterface(maskManager) {\r\n _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\r\n }\r\n\r\n function _registerEffectsInterface(effects) {\r\n _thisLayerFunction.effect = effects;\r\n }\r\n\r\n function _thisLayerFunction(name) {\r\n switch (name) {\r\n case 'ADBE Root Vectors Group':\r\n case 'Contents':\r\n case 2:\r\n return _thisLayerFunction.shapeInterface;\r\n\r\n case 1:\r\n case 6:\r\n case 'Transform':\r\n case 'transform':\r\n case 'ADBE Transform Group':\r\n return transformInterface;\r\n\r\n case 4:\r\n case 'ADBE Effect Parade':\r\n case 'effects':\r\n case 'Effects':\r\n return _thisLayerFunction.effect;\r\n\r\n case 'ADBE Text Properties':\r\n return _thisLayerFunction.textInterface;\r\n\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n _thisLayerFunction.getMatrix = getMatrix;\r\n _thisLayerFunction.invertPoint = invertPoint;\r\n _thisLayerFunction.applyPoint = applyPoint;\r\n _thisLayerFunction.toWorld = toWorld;\r\n _thisLayerFunction.toWorldVec = toWorldVec;\r\n _thisLayerFunction.fromWorld = fromWorld;\r\n _thisLayerFunction.fromWorldVec = fromWorldVec;\r\n _thisLayerFunction.toComp = toWorld;\r\n _thisLayerFunction.fromComp = fromComp;\r\n _thisLayerFunction.sampleImage = sampleImage;\r\n _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\r\n _thisLayerFunction._elem = elem;\r\n transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\r\n var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\r\n Object.defineProperties(_thisLayerFunction, {\r\n hasParent: {\r\n get: function get() {\r\n return elem.hierarchy.length;\r\n }\r\n },\r\n parent: {\r\n get: function get() {\r\n return elem.hierarchy[0].layerInterface;\r\n }\r\n },\r\n rotation: getDescriptor(transformInterface, 'rotation'),\r\n scale: getDescriptor(transformInterface, 'scale'),\r\n position: getDescriptor(transformInterface, 'position'),\r\n opacity: getDescriptor(transformInterface, 'opacity'),\r\n anchorPoint: anchorPointDescriptor,\r\n anchor_point: anchorPointDescriptor,\r\n transform: {\r\n get: function get() {\r\n return transformInterface;\r\n }\r\n },\r\n active: {\r\n get: function get() {\r\n return elem.isInRange;\r\n }\r\n }\r\n });\r\n _thisLayerFunction.startTime = elem.data.st;\r\n _thisLayerFunction.index = elem.data.ind;\r\n _thisLayerFunction.source = elem.data.refId;\r\n _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\r\n _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\r\n _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\r\n _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\r\n _thisLayerFunction._name = elem.data.nm;\r\n _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\r\n _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\r\n return _thisLayerFunction;\r\n };\r\n }();\r\n\r\n var propertyGroupFactory = function () {\r\n return function (interfaceFunction, parentPropertyGroup) {\r\n return function (val) {\r\n val = val === undefined ? 1 : val;\r\n\r\n if (val <= 0) {\r\n return interfaceFunction;\r\n }\r\n\r\n return parentPropertyGroup(val - 1);\r\n };\r\n };\r\n }();\r\n\r\n var PropertyInterface = function () {\r\n return function (propertyName, propertyGroup) {\r\n var interfaceFunction = {\r\n _name: propertyName\r\n };\r\n\r\n function _propertyGroup(val) {\r\n val = val === undefined ? 1 : val;\r\n\r\n if (val <= 0) {\r\n return interfaceFunction;\r\n }\r\n\r\n return propertyGroup(val - 1);\r\n }\r\n\r\n return _propertyGroup;\r\n };\r\n }();\r\n\r\n var EffectsExpressionInterface = function () {\r\n var ob = {\r\n createEffectsInterface: createEffectsInterface\r\n };\r\n\r\n function createEffectsInterface(elem, propertyGroup) {\r\n if (elem.effectsManager) {\r\n var effectElements = [];\r\n var effectsData = elem.data.ef;\r\n var i;\r\n var len = elem.effectsManager.effectElements.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\r\n }\r\n\r\n var effects = elem.data.ef || [];\r\n\r\n var groupInterface = function groupInterface(name) {\r\n i = 0;\r\n len = effects.length;\r\n\r\n while (i < len) {\r\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\r\n return effectElements[i];\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n Object.defineProperty(groupInterface, 'numProperties', {\r\n get: function get() {\r\n return effects.length;\r\n }\r\n });\r\n return groupInterface;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n function createGroupInterface(data, elements, propertyGroup, elem) {\r\n function groupInterface(name) {\r\n var effects = data.ef;\r\n var i = 0;\r\n var len = effects.length;\r\n\r\n while (i < len) {\r\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\r\n if (effects[i].ty === 5) {\r\n return effectElements[i];\r\n }\r\n\r\n return effectElements[i]();\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n throw new Error();\r\n }\r\n\r\n var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\r\n\r\n var effectElements = [];\r\n var i;\r\n var len = data.ef.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (data.ef[i].ty === 5) {\r\n effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\r\n } else {\r\n effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\r\n }\r\n }\r\n\r\n if (data.mn === 'ADBE Color Control') {\r\n Object.defineProperty(groupInterface, 'color', {\r\n get: function get() {\r\n return effectElements[0]();\r\n }\r\n });\r\n }\r\n\r\n Object.defineProperties(groupInterface, {\r\n numProperties: {\r\n get: function get() {\r\n return data.np;\r\n }\r\n },\r\n _name: {\r\n value: data.nm\r\n },\r\n propertyGroup: {\r\n value: _propertyGroup\r\n }\r\n });\r\n groupInterface.enabled = data.en !== 0;\r\n groupInterface.active = groupInterface.enabled;\r\n return groupInterface;\r\n }\r\n\r\n function createValueInterface(element, type, elem, propertyGroup) {\r\n var expressionProperty = ExpressionPropertyInterface(element.p);\r\n\r\n function interfaceFunction() {\r\n if (type === 10) {\r\n return elem.comp.compInterface(element.p.v);\r\n }\r\n\r\n return expressionProperty();\r\n }\r\n\r\n if (element.p.setGroupProperty) {\r\n element.p.setGroupProperty(PropertyInterface('', propertyGroup));\r\n }\r\n\r\n return interfaceFunction;\r\n }\r\n\r\n return ob;\r\n }();\r\n\r\n var CompExpressionInterface = function () {\r\n return function (comp) {\r\n function _thisLayerFunction(name) {\r\n var i = 0;\r\n var len = comp.layers.length;\r\n\r\n while (i < len) {\r\n if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\r\n return comp.elements[i].layerInterface;\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n return null; // return {active:false};\r\n }\r\n\r\n Object.defineProperty(_thisLayerFunction, '_name', {\r\n value: comp.data.nm\r\n });\r\n _thisLayerFunction.layer = _thisLayerFunction;\r\n _thisLayerFunction.pixelAspect = 1;\r\n _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\r\n _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\r\n _thisLayerFunction.pixelAspect = 1;\r\n _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\r\n _thisLayerFunction.displayStartTime = 0;\r\n _thisLayerFunction.numLayers = comp.layers.length;\r\n return _thisLayerFunction;\r\n };\r\n }();\r\n\r\n var ShapePathInterface = function () {\r\n return function pathInterfaceFactory(shape, view, propertyGroup) {\r\n var prop = view.sh;\r\n\r\n function interfaceFunction(val) {\r\n if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\r\n return interfaceFunction.path;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n\r\n prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\r\n Object.defineProperties(interfaceFunction, {\r\n path: {\r\n get: function get() {\r\n if (prop.k) {\r\n prop.getValue();\r\n }\r\n\r\n return prop;\r\n }\r\n },\r\n shape: {\r\n get: function get() {\r\n if (prop.k) {\r\n prop.getValue();\r\n }\r\n\r\n return prop;\r\n }\r\n },\r\n _name: {\r\n value: shape.nm\r\n },\r\n ix: {\r\n value: shape.ix\r\n },\r\n propertyIndex: {\r\n value: shape.ix\r\n },\r\n mn: {\r\n value: shape.mn\r\n },\r\n propertyGroup: {\r\n value: propertyGroup\r\n }\r\n });\r\n return interfaceFunction;\r\n };\r\n }();\r\n\r\n var ShapeExpressionInterface = function () {\r\n function iterateElements(shapes, view, propertyGroup) {\r\n var arr = [];\r\n var i;\r\n var len = shapes ? shapes.length : 0;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (shapes[i].ty === 'gr') {\r\n arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'fl') {\r\n arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'st') {\r\n arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'tm') {\r\n arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'tr') {// arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\r\n } else if (shapes[i].ty === 'el') {\r\n arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'sr') {\r\n arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'sh') {\r\n arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'rc') {\r\n arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'rd') {\r\n arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'rp') {\r\n arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'gf') {\r\n arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else {\r\n arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n }\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n function contentsInterfaceFactory(shape, view, propertyGroup) {\r\n var interfaces;\r\n\r\n var interfaceFunction = function _interfaceFunction(value) {\r\n var i = 0;\r\n var len = interfaces.length;\r\n\r\n while (i < len) {\r\n if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\r\n return interfaces[i];\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n if (typeof value === 'number') {\r\n return interfaces[value - 1];\r\n }\r\n\r\n return null;\r\n };\r\n\r\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\r\n interfaceFunction.numProperties = interfaces.length;\r\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\r\n interfaceFunction.transform = transformInterface;\r\n interfaceFunction.propertyIndex = shape.cix;\r\n interfaceFunction._name = shape.nm;\r\n return interfaceFunction;\r\n }\r\n\r\n function groupInterfaceFactory(shape, view, propertyGroup) {\r\n var interfaceFunction = function _interfaceFunction(value) {\r\n switch (value) {\r\n case 'ADBE Vectors Group':\r\n case 'Contents':\r\n case 2:\r\n return interfaceFunction.content;\r\n // Not necessary for now. Keeping them here in case a new case appears\r\n // case 'ADBE Vector Transform Group':\r\n // case 3:\r\n\r\n default:\r\n return interfaceFunction.transform;\r\n }\r\n };\r\n\r\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\r\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\r\n interfaceFunction.content = content;\r\n interfaceFunction.transform = transformInterface;\r\n Object.defineProperty(interfaceFunction, '_name', {\r\n get: function get() {\r\n return shape.nm;\r\n }\r\n }); // interfaceFunction.content = interfaceFunction;\r\n\r\n interfaceFunction.numProperties = shape.np;\r\n interfaceFunction.propertyIndex = shape.ix;\r\n interfaceFunction.nm = shape.nm;\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n\r\n function fillInterfaceFactory(shape, view, propertyGroup) {\r\n function interfaceFunction(val) {\r\n if (val === 'Color' || val === 'color') {\r\n return interfaceFunction.color;\r\n }\r\n\r\n if (val === 'Opacity' || val === 'opacity') {\r\n return interfaceFunction.opacity;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n Object.defineProperties(interfaceFunction, {\r\n color: {\r\n get: ExpressionPropertyInterface(view.c)\r\n },\r\n opacity: {\r\n get: ExpressionPropertyInterface(view.o)\r\n },\r\n _name: {\r\n value: shape.nm\r\n },\r\n mn: {\r\n value: shape.mn\r\n }\r\n });\r\n view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\r\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\r\n return interfaceFunction;\r\n }\r\n\r\n function gradientFillInterfaceFactory(shape, view, propertyGroup) {\r\n function interfaceFunction(val) {\r\n if (val === 'Start Point' || val === 'start point') {\r\n return interfaceFunction.startPoint;\r\n }\r\n\r\n if (val === 'End Point' || val === 'end point') {\r\n return interfaceFunction.endPoint;\r\n }\r\n\r\n if (val === 'Opacity' || val === 'opacity') {\r\n return interfaceFunction.opacity;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n Object.defineProperties(interfaceFunction, {\r\n startPoint: {\r\n get: ExpressionPropertyInterface(view.s)\r\n },\r\n endPoint: {\r\n get: ExpressionPropertyInterface(view.e)\r\n },\r\n opacity: {\r\n get: ExpressionPropertyInterface(view.o)\r\n },\r\n type: {\r\n get: function get() {\r\n return 'a';\r\n }\r\n },\r\n _name: {\r\n value: shape.nm\r\n },\r\n mn: {\r\n value: shape.mn\r\n }\r\n });\r\n view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));\r\n view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));\r\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\r\n return interfaceFunction;\r\n }\r\n\r\n function defaultInterfaceFactory() {\r\n function interfaceFunction() {\r\n return null;\r\n }\r\n\r\n return interfaceFunction;\r\n }\r\n\r\n function strokeInterfaceFactory(shape, view, propertyGroup) {\r\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n\r\n var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\r\n\r\n function addPropertyToDashOb(i) {\r\n Object.defineProperty(dashOb, shape.d[i].nm, {\r\n get: ExpressionPropertyInterface(view.d.dataProps[i].p)\r\n });\r\n }\r\n\r\n var i;\r\n var len = shape.d ? shape.d.length : 0;\r\n var dashOb = {};\r\n\r\n for (i = 0; i < len; i += 1) {\r\n addPropertyToDashOb(i);\r\n view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\r\n }\r\n\r\n function interfaceFunction(val) {\r\n if (val === 'Color' || val === 'color') {\r\n return interfaceFunction.color;\r\n }\r\n\r\n if (val === 'Opacity' || val === 'opacity') {\r\n return interfaceFunction.opacity;\r\n }\r\n\r\n if (val === 'Stroke Width' || val === 'stroke width') {\r\n return interfaceFunction.strokeWidth;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n Object.defineProperties(interfaceFunction, {\r\n color: {\r\n get: ExpressionPropertyInterface(view.c)\r\n },\r\n opacity: {\r\n get: ExpressionPropertyInterface(view.o)\r\n },\r\n strokeWidth: {\r\n get: ExpressionPropertyInterface(view.w)\r\n },\r\n dash: {\r\n get: function get() {\r\n return dashOb;\r\n }\r\n },\r\n _name: {\r\n value: shape.nm\r\n },\r\n mn: {\r\n value: shape.mn\r\n }\r\n });\r\n view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\r\n view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\r\n view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\r\n return interfaceFunction;\r\n }\r\n\r\n function trimInterfaceFactory(shape, view, propertyGroup) {\r\n function interfaceFunction(val) {\r\n if (val === shape.e.ix || val === 'End' || val === 'end') {\r\n return interfaceFunction.end;\r\n }\r\n\r\n if (val === shape.s.ix) {\r\n return interfaceFunction.start;\r\n }\r\n\r\n if (val === shape.o.ix) {\r\n return interfaceFunction.offset;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n\r\n interfaceFunction.propertyIndex = shape.ix;\r\n view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\r\n view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\r\n view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\r\n interfaceFunction.propertyIndex = shape.ix;\r\n interfaceFunction.propertyGroup = propertyGroup;\r\n Object.defineProperties(interfaceFunction, {\r\n start: {\r\n get: ExpressionPropertyInterface(view.s)\r\n },\r\n end: {\r\n get: ExpressionPropertyInterface(view.e)\r\n },\r\n offset: {\r\n get: ExpressionPropertyInterface(view.o)\r\n },\r\n _name: {\r\n value: shape.nm\r\n }\r\n });\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n\r\n function transformInterfaceFactory(shape, view, propertyGroup) {\r\n function interfaceFunction(value) {\r\n if (shape.a.ix === value || value === 'Anchor Point') {\r\n return interfaceFunction.anchorPoint;\r\n }\r\n\r\n if (shape.o.ix === value || value === 'Opacity') {\r\n return interfaceFunction.opacity;\r\n }\r\n\r\n if (shape.p.ix === value || value === 'Position') {\r\n return interfaceFunction.position;\r\n }\r\n\r\n if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\r\n return interfaceFunction.rotation;\r\n }\r\n\r\n if (shape.s.ix === value || value === 'Scale') {\r\n return interfaceFunction.scale;\r\n }\r\n\r\n if (shape.sk && shape.sk.ix === value || value === 'Skew') {\r\n return interfaceFunction.skew;\r\n }\r\n\r\n if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {\r\n return interfaceFunction.skewAxis;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n\r\n view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\r\n view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\r\n view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\r\n view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\r\n view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\r\n\r\n if (view.transform.mProps.sk) {\r\n view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\r\n view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\r\n }\r\n\r\n view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\r\n Object.defineProperties(interfaceFunction, {\r\n opacity: {\r\n get: ExpressionPropertyInterface(view.transform.mProps.o)\r\n },\r\n position: {\r\n get: ExpressionPropertyInterface(view.transform.mProps.p)\r\n },\r\n anchorPoint: {\r\n get: ExpressionPropertyInterface(view.transform.mProps.a)\r\n },\r\n scale: {\r\n get: ExpressionPropertyInterface(view.transform.mProps.s)\r\n },\r\n rotation: {\r\n get: ExpressionPropertyInterface(view.transform.mProps.r)\r\n },\r\n skew: {\r\n get: ExpressionPropertyInterface(view.transform.mProps.sk)\r\n },\r\n skewAxis: {\r\n get: ExpressionPropertyInterface(view.transform.mProps.sa)\r\n },\r\n _name: {\r\n value: shape.nm\r\n }\r\n });\r\n interfaceFunction.ty = 'tr';\r\n interfaceFunction.mn = shape.mn;\r\n interfaceFunction.propertyGroup = propertyGroup;\r\n return interfaceFunction;\r\n }\r\n\r\n function ellipseInterfaceFactory(shape, view, propertyGroup) {\r\n function interfaceFunction(value) {\r\n if (shape.p.ix === value) {\r\n return interfaceFunction.position;\r\n }\r\n\r\n if (shape.s.ix === value) {\r\n return interfaceFunction.size;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n\r\n interfaceFunction.propertyIndex = shape.ix;\r\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\r\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\r\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\r\n Object.defineProperties(interfaceFunction, {\r\n size: {\r\n get: ExpressionPropertyInterface(prop.s)\r\n },\r\n position: {\r\n get: ExpressionPropertyInterface(prop.p)\r\n },\r\n _name: {\r\n value: shape.nm\r\n }\r\n });\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n\r\n function starInterfaceFactory(shape, view, propertyGroup) {\r\n function interfaceFunction(value) {\r\n if (shape.p.ix === value) {\r\n return interfaceFunction.position;\r\n }\r\n\r\n if (shape.r.ix === value) {\r\n return interfaceFunction.rotation;\r\n }\r\n\r\n if (shape.pt.ix === value) {\r\n return interfaceFunction.points;\r\n }\r\n\r\n if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\r\n return interfaceFunction.outerRadius;\r\n }\r\n\r\n if (shape.os.ix === value) {\r\n return interfaceFunction.outerRoundness;\r\n }\r\n\r\n if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\r\n return interfaceFunction.innerRadius;\r\n }\r\n\r\n if (shape.is && shape.is.ix === value) {\r\n return interfaceFunction.innerRoundness;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n\r\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\r\n interfaceFunction.propertyIndex = shape.ix;\r\n prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\r\n prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\r\n prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\r\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\r\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\r\n\r\n if (shape.ir) {\r\n prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\r\n prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\r\n }\r\n\r\n Object.defineProperties(interfaceFunction, {\r\n position: {\r\n get: ExpressionPropertyInterface(prop.p)\r\n },\r\n rotation: {\r\n get: ExpressionPropertyInterface(prop.r)\r\n },\r\n points: {\r\n get: ExpressionPropertyInterface(prop.pt)\r\n },\r\n outerRadius: {\r\n get: ExpressionPropertyInterface(prop.or)\r\n },\r\n outerRoundness: {\r\n get: ExpressionPropertyInterface(prop.os)\r\n },\r\n innerRadius: {\r\n get: ExpressionPropertyInterface(prop.ir)\r\n },\r\n innerRoundness: {\r\n get: ExpressionPropertyInterface(prop.is)\r\n },\r\n _name: {\r\n value: shape.nm\r\n }\r\n });\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n\r\n function rectInterfaceFactory(shape, view, propertyGroup) {\r\n function interfaceFunction(value) {\r\n if (shape.p.ix === value) {\r\n return interfaceFunction.position;\r\n }\r\n\r\n if (shape.r.ix === value) {\r\n return interfaceFunction.roundness;\r\n }\r\n\r\n if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\r\n return interfaceFunction.size;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n\r\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\r\n interfaceFunction.propertyIndex = shape.ix;\r\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\r\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\r\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\r\n Object.defineProperties(interfaceFunction, {\r\n position: {\r\n get: ExpressionPropertyInterface(prop.p)\r\n },\r\n roundness: {\r\n get: ExpressionPropertyInterface(prop.r)\r\n },\r\n size: {\r\n get: ExpressionPropertyInterface(prop.s)\r\n },\r\n _name: {\r\n value: shape.nm\r\n }\r\n });\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n\r\n function roundedInterfaceFactory(shape, view, propertyGroup) {\r\n function interfaceFunction(value) {\r\n if (shape.r.ix === value || value === 'Round Corners 1') {\r\n return interfaceFunction.radius;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n\r\n var prop = view;\r\n interfaceFunction.propertyIndex = shape.ix;\r\n prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\r\n Object.defineProperties(interfaceFunction, {\r\n radius: {\r\n get: ExpressionPropertyInterface(prop.rd)\r\n },\r\n _name: {\r\n value: shape.nm\r\n }\r\n });\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n\r\n function repeaterInterfaceFactory(shape, view, propertyGroup) {\r\n function interfaceFunction(value) {\r\n if (shape.c.ix === value || value === 'Copies') {\r\n return interfaceFunction.copies;\r\n }\r\n\r\n if (shape.o.ix === value || value === 'Offset') {\r\n return interfaceFunction.offset;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n\r\n var prop = view;\r\n interfaceFunction.propertyIndex = shape.ix;\r\n prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\r\n prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\r\n Object.defineProperties(interfaceFunction, {\r\n copies: {\r\n get: ExpressionPropertyInterface(prop.c)\r\n },\r\n offset: {\r\n get: ExpressionPropertyInterface(prop.o)\r\n },\r\n _name: {\r\n value: shape.nm\r\n }\r\n });\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n\r\n return function (shapes, view, propertyGroup) {\r\n var interfaces;\r\n\r\n function _interfaceFunction(value) {\r\n if (typeof value === 'number') {\r\n value = value === undefined ? 1 : value;\r\n\r\n if (value === 0) {\r\n return propertyGroup;\r\n }\r\n\r\n return interfaces[value - 1];\r\n }\r\n\r\n var i = 0;\r\n var len = interfaces.length;\r\n\r\n while (i < len) {\r\n if (interfaces[i]._name === value) {\r\n return interfaces[i];\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n function parentGroupWrapper() {\r\n return propertyGroup;\r\n }\r\n\r\n _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\r\n interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\r\n _interfaceFunction.numProperties = interfaces.length;\r\n _interfaceFunction._name = 'Contents';\r\n return _interfaceFunction;\r\n };\r\n }();\r\n\r\n var TextExpressionInterface = function () {\r\n return function (elem) {\r\n var _prevValue;\r\n\r\n var _sourceText;\r\n\r\n function _thisLayerFunction(name) {\r\n switch (name) {\r\n case 'ADBE Text Document':\r\n return _thisLayerFunction.sourceText;\r\n\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n Object.defineProperty(_thisLayerFunction, 'sourceText', {\r\n get: function get() {\r\n elem.textProperty.getValue();\r\n var stringValue = elem.textProperty.currentData.t;\r\n\r\n if (stringValue !== _prevValue) {\r\n elem.textProperty.currentData.t = _prevValue;\r\n _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers\r\n // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\r\n\r\n _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\r\n }\r\n\r\n return _sourceText;\r\n }\r\n });\r\n return _thisLayerFunction;\r\n };\r\n }();\r\n\r\n var getBlendMode = function () {\r\n var blendModeEnums = {\r\n 0: 'source-over',\r\n 1: 'multiply',\r\n 2: 'screen',\r\n 3: 'overlay',\r\n 4: 'darken',\r\n 5: 'lighten',\r\n 6: 'color-dodge',\r\n 7: 'color-burn',\r\n 8: 'hard-light',\r\n 9: 'soft-light',\r\n 10: 'difference',\r\n 11: 'exclusion',\r\n 12: 'hue',\r\n 13: 'saturation',\r\n 14: 'color',\r\n 15: 'luminosity'\r\n };\r\n return function (mode) {\r\n return blendModeEnums[mode] || '';\r\n };\r\n }();\r\n\r\n function SliderEffect(data, elem, container) {\r\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\r\n }\r\n\r\n function AngleEffect(data, elem, container) {\r\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\r\n }\r\n\r\n function ColorEffect(data, elem, container) {\r\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\r\n }\r\n\r\n function PointEffect(data, elem, container) {\r\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\r\n }\r\n\r\n function LayerIndexEffect(data, elem, container) {\r\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\r\n }\r\n\r\n function MaskIndexEffect(data, elem, container) {\r\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\r\n }\r\n\r\n function CheckboxEffect(data, elem, container) {\r\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\r\n }\r\n\r\n function NoValueEffect() {\r\n this.p = {};\r\n }\r\n\r\n function EffectsManager(data, element) {\r\n var effects = data.ef || [];\r\n this.effectElements = [];\r\n var i;\r\n var len = effects.length;\r\n var effectItem;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n effectItem = new GroupEffect(effects[i], element);\r\n this.effectElements.push(effectItem);\r\n }\r\n }\r\n\r\n function GroupEffect(data, element) {\r\n this.init(data, element);\r\n }\r\n\r\n extendPrototype([DynamicPropertyContainer], GroupEffect);\r\n GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\r\n\r\n GroupEffect.prototype.init = function (data, element) {\r\n this.data = data;\r\n this.effectElements = [];\r\n this.initDynamicPropertyContainer(element);\r\n var i;\r\n var len = this.data.ef.length;\r\n var eff;\r\n var effects = this.data.ef;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n eff = null;\r\n\r\n switch (effects[i].ty) {\r\n case 0:\r\n eff = new SliderEffect(effects[i], element, this);\r\n break;\r\n\r\n case 1:\r\n eff = new AngleEffect(effects[i], element, this);\r\n break;\r\n\r\n case 2:\r\n eff = new ColorEffect(effects[i], element, this);\r\n break;\r\n\r\n case 3:\r\n eff = new PointEffect(effects[i], element, this);\r\n break;\r\n\r\n case 4:\r\n case 7:\r\n eff = new CheckboxEffect(effects[i], element, this);\r\n break;\r\n\r\n case 10:\r\n eff = new LayerIndexEffect(effects[i], element, this);\r\n break;\r\n\r\n case 11:\r\n eff = new MaskIndexEffect(effects[i], element, this);\r\n break;\r\n\r\n case 5:\r\n eff = new EffectsManager(effects[i], element, this);\r\n break;\r\n // case 6:\r\n\r\n default:\r\n eff = new NoValueEffect(effects[i], element, this);\r\n break;\r\n }\r\n\r\n if (eff) {\r\n this.effectElements.push(eff);\r\n }\r\n }\r\n };\r\n\r\n function BaseElement() {}\r\n\r\n BaseElement.prototype = {\r\n checkMasks: function checkMasks() {\r\n if (!this.data.hasMask) {\r\n return false;\r\n }\r\n\r\n var i = 0;\r\n var len = this.data.masksProperties.length;\r\n\r\n while (i < len) {\r\n if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\r\n return true;\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n return false;\r\n },\r\n initExpressions: function initExpressions() {\r\n this.layerInterface = LayerExpressionInterface(this);\r\n\r\n if (this.data.hasMask && this.maskManager) {\r\n this.layerInterface.registerMaskInterface(this.maskManager);\r\n }\r\n\r\n var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\r\n this.layerInterface.registerEffectsInterface(effectsInterface);\r\n\r\n if (this.data.ty === 0 || this.data.xt) {\r\n this.compInterface = CompExpressionInterface(this);\r\n } else if (this.data.ty === 4) {\r\n this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\r\n this.layerInterface.content = this.layerInterface.shapeInterface;\r\n } else if (this.data.ty === 5) {\r\n this.layerInterface.textInterface = TextExpressionInterface(this);\r\n this.layerInterface.text = this.layerInterface.textInterface;\r\n }\r\n },\r\n setBlendMode: function setBlendMode() {\r\n var blendModeValue = getBlendMode(this.data.bm);\r\n var elem = this.baseElement || this.layerElement;\r\n elem.style['mix-blend-mode'] = blendModeValue;\r\n },\r\n initBaseData: function initBaseData(data, globalData, comp) {\r\n this.globalData = globalData;\r\n this.comp = comp;\r\n this.data = data;\r\n this.layerId = createElementID(); // Stretch factor for old animations missing this property.\r\n\r\n if (!this.data.sr) {\r\n this.data.sr = 1;\r\n } // effects manager\r\n\r\n\r\n this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\r\n },\r\n getType: function getType() {\r\n return this.type;\r\n },\r\n sourceRectAtTime: function sourceRectAtTime() {}\r\n };\r\n\r\n /**\r\n * @file\r\n * Handles element's layer frame update.\r\n * Checks layer in point and out point\r\n *\r\n */\r\n function FrameElement() {}\r\n\r\n FrameElement.prototype = {\r\n /**\r\n * @function\r\n * Initializes frame related properties.\r\n *\r\n */\r\n initFrame: function initFrame() {\r\n // set to true when inpoint is rendered\r\n this._isFirstFrame = false; // list of animated properties\r\n\r\n this.dynamicProperties = []; // If layer has been modified in current tick this will be true\r\n\r\n this._mdf = false;\r\n },\r\n\r\n /**\r\n * @function\r\n * Calculates all dynamic values\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n * @param {boolean} isVisible\r\n * if layers is currently in range\r\n *\r\n */\r\n prepareProperties: function prepareProperties(num, isVisible) {\r\n var i;\r\n var len = this.dynamicProperties.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\r\n this.dynamicProperties[i].getValue();\r\n\r\n if (this.dynamicProperties[i]._mdf) {\r\n this.globalData._mdf = true;\r\n this._mdf = true;\r\n }\r\n }\r\n }\r\n },\r\n addDynamicProperty: function addDynamicProperty(prop) {\r\n if (this.dynamicProperties.indexOf(prop) === -1) {\r\n this.dynamicProperties.push(prop);\r\n }\r\n }\r\n };\r\n\r\n function _typeof$2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$2 = function _typeof(obj) { return typeof obj; }; } else { _typeof$2 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$2(obj); }\r\n\r\n var FootageInterface = function () {\r\n var outlineInterfaceFactory = function outlineInterfaceFactory(elem) {\r\n var currentPropertyName = '';\r\n var currentProperty = elem.getFootageData();\r\n\r\n function init() {\r\n currentPropertyName = '';\r\n currentProperty = elem.getFootageData();\r\n return searchProperty;\r\n }\r\n\r\n function searchProperty(value) {\r\n if (currentProperty[value]) {\r\n currentPropertyName = value;\r\n currentProperty = currentProperty[value];\r\n\r\n if (_typeof$2(currentProperty) === 'object') {\r\n return searchProperty;\r\n }\r\n\r\n return currentProperty;\r\n }\r\n\r\n var propertyNameIndex = value.indexOf(currentPropertyName);\r\n\r\n if (propertyNameIndex !== -1) {\r\n var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\r\n currentProperty = currentProperty[index];\r\n\r\n if (_typeof$2(currentProperty) === 'object') {\r\n return searchProperty;\r\n }\r\n\r\n return currentProperty;\r\n }\r\n\r\n return '';\r\n }\r\n\r\n return init;\r\n };\r\n\r\n var dataInterfaceFactory = function dataInterfaceFactory(elem) {\r\n function interfaceFunction(value) {\r\n if (value === 'Outline') {\r\n return interfaceFunction.outlineInterface();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n interfaceFunction._name = 'Outline';\r\n interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\r\n return interfaceFunction;\r\n };\r\n\r\n return function (elem) {\r\n function _interfaceFunction(value) {\r\n if (value === 'Data') {\r\n return _interfaceFunction.dataInterface;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _interfaceFunction._name = 'Data';\r\n _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\r\n return _interfaceFunction;\r\n };\r\n }();\r\n\r\n function FootageElement(data, globalData, comp) {\r\n this.initFrame();\r\n this.initRenderable();\r\n this.assetData = globalData.getAssetData(data.refId);\r\n this.footageData = globalData.imageLoader.getAsset(this.assetData);\r\n this.initBaseData(data, globalData, comp);\r\n }\r\n\r\n FootageElement.prototype.prepareFrame = function () {};\r\n\r\n extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\r\n\r\n FootageElement.prototype.getBaseElement = function () {\r\n return null;\r\n };\r\n\r\n FootageElement.prototype.renderFrame = function () {};\r\n\r\n FootageElement.prototype.destroy = function () {};\r\n\r\n FootageElement.prototype.initExpressions = function () {\r\n this.layerInterface = FootageInterface(this);\r\n };\r\n\r\n FootageElement.prototype.getFootageData = function () {\r\n return this.footageData;\r\n };\r\n\r\n function AudioElement(data, globalData, comp) {\r\n this.initFrame();\r\n this.initRenderable();\r\n this.assetData = globalData.getAssetData(data.refId);\r\n this.initBaseData(data, globalData, comp);\r\n this._isPlaying = false;\r\n this._canPlay = false;\r\n var assetPath = this.globalData.getAssetsPath(this.assetData);\r\n this.audio = this.globalData.audioController.createAudio(assetPath);\r\n this._currentTime = 0;\r\n this.globalData.audioController.addAudio(this);\r\n this._volumeMultiplier = 1;\r\n this._volume = 1;\r\n this._previousVolume = null;\r\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\r\n _placeholder: true\r\n };\r\n this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : {\r\n k: [100]\r\n }, 1, 0.01, this);\r\n }\r\n\r\n AudioElement.prototype.prepareFrame = function (num) {\r\n this.prepareRenderableFrame(num, true);\r\n this.prepareProperties(num, true);\r\n\r\n if (!this.tm._placeholder) {\r\n var timeRemapped = this.tm.v;\r\n this._currentTime = timeRemapped;\r\n } else {\r\n this._currentTime = num / this.data.sr;\r\n }\r\n\r\n this._volume = this.lv.v[0];\r\n var totalVolume = this._volume * this._volumeMultiplier;\r\n\r\n if (this._previousVolume !== totalVolume) {\r\n this._previousVolume = totalVolume;\r\n this.audio.volume(totalVolume);\r\n }\r\n };\r\n\r\n extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\r\n\r\n AudioElement.prototype.renderFrame = function () {\r\n if (this.isInRange && this._canPlay) {\r\n if (!this._isPlaying) {\r\n this.audio.play();\r\n this.audio.seek(this._currentTime / this.globalData.frameRate);\r\n this._isPlaying = true;\r\n } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\r\n this.audio.seek(this._currentTime / this.globalData.frameRate);\r\n }\r\n }\r\n };\r\n\r\n AudioElement.prototype.show = function () {// this.audio.play()\r\n };\r\n\r\n AudioElement.prototype.hide = function () {\r\n this.audio.pause();\r\n this._isPlaying = false;\r\n };\r\n\r\n AudioElement.prototype.pause = function () {\r\n this.audio.pause();\r\n this._isPlaying = false;\r\n this._canPlay = false;\r\n };\r\n\r\n AudioElement.prototype.resume = function () {\r\n this._canPlay = true;\r\n };\r\n\r\n AudioElement.prototype.setRate = function (rateValue) {\r\n this.audio.rate(rateValue);\r\n };\r\n\r\n AudioElement.prototype.volume = function (volumeValue) {\r\n this._volumeMultiplier = volumeValue;\r\n this._previousVolume = volumeValue * this._volume;\r\n this.audio.volume(this._previousVolume);\r\n };\r\n\r\n AudioElement.prototype.getBaseElement = function () {\r\n return null;\r\n };\r\n\r\n AudioElement.prototype.destroy = function () {};\r\n\r\n AudioElement.prototype.sourceRectAtTime = function () {};\r\n\r\n AudioElement.prototype.initExpressions = function () {};\r\n\r\n function BaseRenderer() {}\r\n\r\n BaseRenderer.prototype.checkLayers = function (num) {\r\n var i;\r\n var len = this.layers.length;\r\n var data;\r\n this.completeLayers = true;\r\n\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n if (!this.elements[i]) {\r\n data = this.layers[i];\r\n\r\n if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\r\n this.buildItem(i);\r\n }\r\n }\r\n\r\n this.completeLayers = this.elements[i] ? this.completeLayers : false;\r\n }\r\n\r\n this.checkPendingElements();\r\n };\r\n\r\n BaseRenderer.prototype.createItem = function (layer) {\r\n switch (layer.ty) {\r\n case 2:\r\n return this.createImage(layer);\r\n\r\n case 0:\r\n return this.createComp(layer);\r\n\r\n case 1:\r\n return this.createSolid(layer);\r\n\r\n case 3:\r\n return this.createNull(layer);\r\n\r\n case 4:\r\n return this.createShape(layer);\r\n\r\n case 5:\r\n return this.createText(layer);\r\n\r\n case 6:\r\n return this.createAudio(layer);\r\n\r\n case 13:\r\n return this.createCamera(layer);\r\n\r\n case 15:\r\n return this.createFootage(layer);\r\n\r\n default:\r\n return this.createNull(layer);\r\n }\r\n };\r\n\r\n BaseRenderer.prototype.createCamera = function () {\r\n throw new Error('You\\'re using a 3d camera. Try the html renderer.');\r\n };\r\n\r\n BaseRenderer.prototype.createAudio = function (data) {\r\n return new AudioElement(data, this.globalData, this);\r\n };\r\n\r\n BaseRenderer.prototype.createFootage = function (data) {\r\n return new FootageElement(data, this.globalData, this);\r\n };\r\n\r\n BaseRenderer.prototype.buildAllItems = function () {\r\n var i;\r\n var len = this.layers.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.buildItem(i);\r\n }\r\n\r\n this.checkPendingElements();\r\n };\r\n\r\n BaseRenderer.prototype.includeLayers = function (newLayers) {\r\n this.completeLayers = false;\r\n var i;\r\n var len = newLayers.length;\r\n var j;\r\n var jLen = this.layers.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n j = 0;\r\n\r\n while (j < jLen) {\r\n if (this.layers[j].id === newLayers[i].id) {\r\n this.layers[j] = newLayers[i];\r\n break;\r\n }\r\n\r\n j += 1;\r\n }\r\n }\r\n };\r\n\r\n BaseRenderer.prototype.setProjectInterface = function (pInterface) {\r\n this.globalData.projectInterface = pInterface;\r\n };\r\n\r\n BaseRenderer.prototype.initItems = function () {\r\n if (!this.globalData.progressiveLoad) {\r\n this.buildAllItems();\r\n }\r\n };\r\n\r\n BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\r\n var elements = this.elements;\r\n var layers = this.layers;\r\n var i = 0;\r\n var len = layers.length;\r\n\r\n while (i < len) {\r\n if (layers[i].ind == parentName) {\r\n // eslint-disable-line eqeqeq\r\n if (!elements[i] || elements[i] === true) {\r\n this.buildItem(i);\r\n this.addPendingElement(element);\r\n } else {\r\n hierarchy.push(elements[i]);\r\n elements[i].setAsParent();\r\n\r\n if (layers[i].parent !== undefined) {\r\n this.buildElementParenting(element, layers[i].parent, hierarchy);\r\n } else {\r\n element.setHierarchy(hierarchy);\r\n }\r\n }\r\n }\r\n\r\n i += 1;\r\n }\r\n };\r\n\r\n BaseRenderer.prototype.addPendingElement = function (element) {\r\n this.pendingElements.push(element);\r\n };\r\n\r\n BaseRenderer.prototype.searchExtraCompositions = function (assets) {\r\n var i;\r\n var len = assets.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (assets[i].xt) {\r\n var comp = this.createComp(assets[i]);\r\n comp.initExpressions();\r\n this.globalData.projectInterface.registerComposition(comp);\r\n }\r\n }\r\n };\r\n\r\n BaseRenderer.prototype.getElementByPath = function (path) {\r\n var pathValue = path.shift();\r\n var element;\r\n\r\n if (typeof pathValue === 'number') {\r\n element = this.elements[pathValue];\r\n } else {\r\n var i;\r\n var len = this.elements.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (this.elements[i].data.nm === pathValue) {\r\n element = this.elements[i];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (path.length === 0) {\r\n return element;\r\n }\r\n\r\n return element.getElementByPath(path);\r\n };\r\n\r\n BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\r\n this.globalData.fontManager = new FontManager();\r\n this.globalData.fontManager.addChars(animData.chars);\r\n this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\r\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\r\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\r\n this.globalData.imageLoader = this.animationItem.imagePreloader;\r\n this.globalData.audioController = this.animationItem.audioController;\r\n this.globalData.frameId = 0;\r\n this.globalData.frameRate = animData.fr;\r\n this.globalData.nm = animData.nm;\r\n this.globalData.compSize = {\r\n w: animData.w,\r\n h: animData.h\r\n };\r\n };\r\n\r\n function TransformElement() {}\r\n\r\n TransformElement.prototype = {\r\n initTransform: function initTransform() {\r\n this.finalTransform = {\r\n mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\r\n o: 0\r\n },\r\n _matMdf: false,\r\n _opMdf: false,\r\n mat: new Matrix()\r\n };\r\n\r\n if (this.data.ao) {\r\n this.finalTransform.mProp.autoOriented = true;\r\n } // TODO: check TYPE 11: Guided elements\r\n\r\n\r\n if (this.data.ty !== 11) {// this.createElements();\r\n }\r\n },\r\n renderTransform: function renderTransform() {\r\n this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\r\n this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\r\n\r\n if (this.hierarchy) {\r\n var mat;\r\n var finalMat = this.finalTransform.mat;\r\n var i = 0;\r\n var len = this.hierarchy.length; // Checking if any of the transformation matrices in the hierarchy chain has changed.\r\n\r\n if (!this.finalTransform._matMdf) {\r\n while (i < len) {\r\n if (this.hierarchy[i].finalTransform.mProp._mdf) {\r\n this.finalTransform._matMdf = true;\r\n break;\r\n }\r\n\r\n i += 1;\r\n }\r\n }\r\n\r\n if (this.finalTransform._matMdf) {\r\n mat = this.finalTransform.mProp.v.props;\r\n finalMat.cloneFromProps(mat);\r\n\r\n for (i = 0; i < len; i += 1) {\r\n mat = this.hierarchy[i].finalTransform.mProp.v.props;\r\n finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]);\r\n }\r\n }\r\n }\r\n },\r\n globalToLocal: function globalToLocal(pt) {\r\n var transforms = [];\r\n transforms.push(this.finalTransform);\r\n var flag = true;\r\n var comp = this.comp;\r\n\r\n while (flag) {\r\n if (comp.finalTransform) {\r\n if (comp.data.hasMask) {\r\n transforms.splice(0, 0, comp.finalTransform);\r\n }\r\n\r\n comp = comp.comp;\r\n } else {\r\n flag = false;\r\n }\r\n }\r\n\r\n var i;\r\n var len = transforms.length;\r\n var ptNew;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\r\n\r\n pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\r\n }\r\n\r\n return pt;\r\n },\r\n mHelper: new Matrix()\r\n };\r\n\r\n function MaskElement(data, element, globalData) {\r\n this.data = data;\r\n this.element = element;\r\n this.globalData = globalData;\r\n this.storedData = [];\r\n this.masksProperties = this.data.masksProperties || [];\r\n this.maskElement = null;\r\n var defs = this.globalData.defs;\r\n var i;\r\n var len = this.masksProperties ? this.masksProperties.length : 0;\r\n this.viewData = createSizedArray(len);\r\n this.solidPath = '';\r\n var path;\r\n var properties = this.masksProperties;\r\n var count = 0;\r\n var currentMasks = [];\r\n var j;\r\n var jLen;\r\n var layerId = createElementID();\r\n var rect;\r\n var expansor;\r\n var feMorph;\r\n var x;\r\n var maskType = 'clipPath';\r\n var maskRef = 'clip-path';\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\r\n maskType = 'mask';\r\n maskRef = 'mask';\r\n }\r\n\r\n if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\r\n rect = createNS('rect');\r\n rect.setAttribute('fill', '#ffffff');\r\n rect.setAttribute('width', this.element.comp.data.w || 0);\r\n rect.setAttribute('height', this.element.comp.data.h || 0);\r\n currentMasks.push(rect);\r\n } else {\r\n rect = null;\r\n }\r\n\r\n path = createNS('path');\r\n\r\n if (properties[i].mode === 'n') {\r\n // TODO move this to a factory or to a constructor\r\n this.viewData[i] = {\r\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\r\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\r\n elem: path,\r\n lastPath: ''\r\n };\r\n defs.appendChild(path);\r\n } else {\r\n count += 1;\r\n path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\r\n path.setAttribute('clip-rule', 'nonzero');\r\n var filterID;\r\n\r\n if (properties[i].x.k !== 0) {\r\n maskType = 'mask';\r\n maskRef = 'mask';\r\n x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\r\n filterID = createElementID();\r\n expansor = createNS('filter');\r\n expansor.setAttribute('id', filterID);\r\n feMorph = createNS('feMorphology');\r\n feMorph.setAttribute('operator', 'erode');\r\n feMorph.setAttribute('in', 'SourceGraphic');\r\n feMorph.setAttribute('radius', '0');\r\n expansor.appendChild(feMorph);\r\n defs.appendChild(expansor);\r\n path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\r\n } else {\r\n feMorph = null;\r\n x = null;\r\n } // TODO move this to a factory or to a constructor\r\n\r\n\r\n this.storedData[i] = {\r\n elem: path,\r\n x: x,\r\n expan: feMorph,\r\n lastPath: '',\r\n lastOperator: '',\r\n filterId: filterID,\r\n lastRadius: 0\r\n };\r\n\r\n if (properties[i].mode === 'i') {\r\n jLen = currentMasks.length;\r\n var g = createNS('g');\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n g.appendChild(currentMasks[j]);\r\n }\r\n\r\n var mask = createNS('mask');\r\n mask.setAttribute('mask-type', 'alpha');\r\n mask.setAttribute('id', layerId + '_' + count);\r\n mask.appendChild(path);\r\n defs.appendChild(mask);\r\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');\r\n currentMasks.length = 0;\r\n currentMasks.push(g);\r\n } else {\r\n currentMasks.push(path);\r\n }\r\n\r\n if (properties[i].inv && !this.solidPath) {\r\n this.solidPath = this.createLayerSolidPath();\r\n } // TODO move this to a factory or to a constructor\r\n\r\n\r\n this.viewData[i] = {\r\n elem: path,\r\n lastPath: '',\r\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\r\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\r\n invRect: rect\r\n };\r\n\r\n if (!this.viewData[i].prop.k) {\r\n this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\r\n }\r\n }\r\n }\r\n\r\n this.maskElement = createNS(maskType);\r\n len = currentMasks.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.maskElement.appendChild(currentMasks[i]);\r\n }\r\n\r\n if (count > 0) {\r\n this.maskElement.setAttribute('id', layerId);\r\n this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');\r\n defs.appendChild(this.maskElement);\r\n }\r\n\r\n if (this.viewData.length) {\r\n this.element.addRenderableComponent(this);\r\n }\r\n }\r\n\r\n MaskElement.prototype.getMaskProperty = function (pos) {\r\n return this.viewData[pos].prop;\r\n };\r\n\r\n MaskElement.prototype.renderFrame = function (isFirstFrame) {\r\n var finalMat = this.element.finalTransform.mat;\r\n var i;\r\n var len = this.masksProperties.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (this.viewData[i].prop._mdf || isFirstFrame) {\r\n this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\r\n }\r\n\r\n if (this.viewData[i].op._mdf || isFirstFrame) {\r\n this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\r\n }\r\n\r\n if (this.masksProperties[i].mode !== 'n') {\r\n if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\r\n this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\r\n }\r\n\r\n if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\r\n var feMorph = this.storedData[i].expan;\r\n\r\n if (this.storedData[i].x.v < 0) {\r\n if (this.storedData[i].lastOperator !== 'erode') {\r\n this.storedData[i].lastOperator = 'erode';\r\n this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');\r\n }\r\n\r\n feMorph.setAttribute('radius', -this.storedData[i].x.v);\r\n } else {\r\n if (this.storedData[i].lastOperator !== 'dilate') {\r\n this.storedData[i].lastOperator = 'dilate';\r\n this.storedData[i].elem.setAttribute('filter', null);\r\n }\r\n\r\n this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n MaskElement.prototype.getMaskelement = function () {\r\n return this.maskElement;\r\n };\r\n\r\n MaskElement.prototype.createLayerSolidPath = function () {\r\n var path = 'M0,0 ';\r\n path += ' h' + this.globalData.compSize.w;\r\n path += ' v' + this.globalData.compSize.h;\r\n path += ' h-' + this.globalData.compSize.w;\r\n path += ' v-' + this.globalData.compSize.h + ' ';\r\n return path;\r\n };\r\n\r\n MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\r\n var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\r\n var i;\r\n var len;\r\n len = pathNodes._length;\r\n\r\n for (i = 1; i < len; i += 1) {\r\n // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\r\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\r\n } // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\r\n\r\n\r\n if (pathNodes.c && len > 1) {\r\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\r\n } // pathNodes.__renderedString = pathString;\r\n\r\n\r\n if (viewData.lastPath !== pathString) {\r\n var pathShapeValue = '';\r\n\r\n if (viewData.elem) {\r\n if (pathNodes.c) {\r\n pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\r\n }\r\n\r\n viewData.elem.setAttribute('d', pathShapeValue);\r\n }\r\n\r\n viewData.lastPath = pathString;\r\n }\r\n };\r\n\r\n MaskElement.prototype.destroy = function () {\r\n this.element = null;\r\n this.globalData = null;\r\n this.maskElement = null;\r\n this.data = null;\r\n this.masksProperties = null;\r\n };\r\n\r\n var filtersFactory = function () {\r\n var ob = {};\r\n ob.createFilter = createFilter;\r\n ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\r\n\r\n function createFilter(filId, skipCoordinates) {\r\n var fil = createNS('filter');\r\n fil.setAttribute('id', filId);\r\n\r\n if (skipCoordinates !== true) {\r\n fil.setAttribute('filterUnits', 'objectBoundingBox');\r\n fil.setAttribute('x', '0%');\r\n fil.setAttribute('y', '0%');\r\n fil.setAttribute('width', '100%');\r\n fil.setAttribute('height', '100%');\r\n }\r\n\r\n return fil;\r\n }\r\n\r\n function createAlphaToLuminanceFilter() {\r\n var feColorMatrix = createNS('feColorMatrix');\r\n feColorMatrix.setAttribute('type', 'matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n feColorMatrix.setAttribute('values', '0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1');\r\n return feColorMatrix;\r\n }\r\n\r\n return ob;\r\n }();\r\n\r\n var featureSupport = function () {\r\n var ob = {\r\n maskType: true\r\n };\r\n\r\n if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\r\n ob.maskType = false;\r\n }\r\n\r\n return ob;\r\n }();\r\n\r\n function SVGTintFilter(filter, filterManager) {\r\n this.filterManager = filterManager;\r\n var feColorMatrix = createNS('feColorMatrix');\r\n feColorMatrix.setAttribute('type', 'matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\r\n feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\r\n feColorMatrix.setAttribute('result', 'f1');\r\n filter.appendChild(feColorMatrix);\r\n feColorMatrix = createNS('feColorMatrix');\r\n feColorMatrix.setAttribute('type', 'matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\r\n feColorMatrix.setAttribute('result', 'f2');\r\n filter.appendChild(feColorMatrix);\r\n this.matrixFilter = feColorMatrix;\r\n\r\n if (filterManager.effectElements[2].p.v !== 100 || filterManager.effectElements[2].p.k) {\r\n var feMerge = createNS('feMerge');\r\n filter.appendChild(feMerge);\r\n var feMergeNode;\r\n feMergeNode = createNS('feMergeNode');\r\n feMergeNode.setAttribute('in', 'SourceGraphic');\r\n feMerge.appendChild(feMergeNode);\r\n feMergeNode = createNS('feMergeNode');\r\n feMergeNode.setAttribute('in', 'f2');\r\n feMerge.appendChild(feMergeNode);\r\n }\r\n }\r\n\r\n SVGTintFilter.prototype.renderFrame = function (forceRender) {\r\n if (forceRender || this.filterManager._mdf) {\r\n var colorBlack = this.filterManager.effectElements[0].p.v;\r\n var colorWhite = this.filterManager.effectElements[1].p.v;\r\n var opacity = this.filterManager.effectElements[2].p.v / 100;\r\n this.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 ' + opacity + ' 0');\r\n }\r\n };\r\n\r\n function SVGFillFilter(filter, filterManager) {\r\n this.filterManager = filterManager;\r\n var feColorMatrix = createNS('feColorMatrix');\r\n feColorMatrix.setAttribute('type', 'matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\r\n filter.appendChild(feColorMatrix);\r\n this.matrixFilter = feColorMatrix;\r\n }\r\n\r\n SVGFillFilter.prototype.renderFrame = function (forceRender) {\r\n if (forceRender || this.filterManager._mdf) {\r\n var color = this.filterManager.effectElements[2].p.v;\r\n var opacity = this.filterManager.effectElements[6].p.v;\r\n this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');\r\n }\r\n };\r\n\r\n function SVGStrokeEffect(elem, filterManager) {\r\n this.initialized = false;\r\n this.filterManager = filterManager;\r\n this.elem = elem;\r\n this.paths = [];\r\n }\r\n\r\n SVGStrokeEffect.prototype.initialize = function () {\r\n var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\r\n var path;\r\n var groupPath;\r\n var i;\r\n var len;\r\n\r\n if (this.filterManager.effectElements[1].p.v === 1) {\r\n len = this.elem.maskManager.masksProperties.length;\r\n i = 0;\r\n } else {\r\n i = this.filterManager.effectElements[0].p.v - 1;\r\n len = i + 1;\r\n }\r\n\r\n groupPath = createNS('g');\r\n groupPath.setAttribute('fill', 'none');\r\n groupPath.setAttribute('stroke-linecap', 'round');\r\n groupPath.setAttribute('stroke-dashoffset', 1);\r\n\r\n for (i; i < len; i += 1) {\r\n path = createNS('path');\r\n groupPath.appendChild(path);\r\n this.paths.push({\r\n p: path,\r\n m: i\r\n });\r\n }\r\n\r\n if (this.filterManager.effectElements[10].p.v === 3) {\r\n var mask = createNS('mask');\r\n var id = createElementID();\r\n mask.setAttribute('id', id);\r\n mask.setAttribute('mask-type', 'alpha');\r\n mask.appendChild(groupPath);\r\n this.elem.globalData.defs.appendChild(mask);\r\n var g = createNS('g');\r\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\r\n\r\n while (elemChildren[0]) {\r\n g.appendChild(elemChildren[0]);\r\n }\r\n\r\n this.elem.layerElement.appendChild(g);\r\n this.masker = mask;\r\n groupPath.setAttribute('stroke', '#fff');\r\n } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\r\n if (this.filterManager.effectElements[10].p.v === 2) {\r\n elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\r\n\r\n while (elemChildren.length) {\r\n this.elem.layerElement.removeChild(elemChildren[0]);\r\n }\r\n }\r\n\r\n this.elem.layerElement.appendChild(groupPath);\r\n this.elem.layerElement.removeAttribute('mask');\r\n groupPath.setAttribute('stroke', '#fff');\r\n }\r\n\r\n this.initialized = true;\r\n this.pathMasker = groupPath;\r\n };\r\n\r\n SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\r\n if (!this.initialized) {\r\n this.initialize();\r\n }\r\n\r\n var i;\r\n var len = this.paths.length;\r\n var mask;\r\n var path;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (this.paths[i].m !== -1) {\r\n mask = this.elem.maskManager.viewData[this.paths[i].m];\r\n path = this.paths[i].p;\r\n\r\n if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\r\n path.setAttribute('d', mask.lastPath);\r\n }\r\n\r\n if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {\r\n var dasharrayValue;\r\n\r\n if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\r\n var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\r\n var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\r\n var l = path.getTotalLength();\r\n dasharrayValue = '0 0 0 ' + l * s + ' ';\r\n var lineLength = l * (e - s);\r\n var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\r\n var units = Math.floor(lineLength / segment);\r\n var j;\r\n\r\n for (j = 0; j < units; j += 1) {\r\n dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';\r\n }\r\n\r\n dasharrayValue += '0 ' + l * 10 + ' 0 0';\r\n } else {\r\n dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\r\n }\r\n\r\n path.setAttribute('stroke-dasharray', dasharrayValue);\r\n }\r\n }\r\n }\r\n\r\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\r\n this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\r\n }\r\n\r\n if (forceRender || this.filterManager.effectElements[6].p._mdf) {\r\n this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\r\n }\r\n\r\n if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\r\n if (forceRender || this.filterManager.effectElements[3].p._mdf) {\r\n var color = this.filterManager.effectElements[3].p.v;\r\n this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');\r\n }\r\n }\r\n };\r\n\r\n function SVGTritoneFilter(filter, filterManager) {\r\n this.filterManager = filterManager;\r\n var feColorMatrix = createNS('feColorMatrix');\r\n feColorMatrix.setAttribute('type', 'matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\r\n feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\r\n feColorMatrix.setAttribute('result', 'f1');\r\n filter.appendChild(feColorMatrix);\r\n var feComponentTransfer = createNS('feComponentTransfer');\r\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\r\n filter.appendChild(feComponentTransfer);\r\n this.matrixFilter = feComponentTransfer;\r\n var feFuncR = createNS('feFuncR');\r\n feFuncR.setAttribute('type', 'table');\r\n feComponentTransfer.appendChild(feFuncR);\r\n this.feFuncR = feFuncR;\r\n var feFuncG = createNS('feFuncG');\r\n feFuncG.setAttribute('type', 'table');\r\n feComponentTransfer.appendChild(feFuncG);\r\n this.feFuncG = feFuncG;\r\n var feFuncB = createNS('feFuncB');\r\n feFuncB.setAttribute('type', 'table');\r\n feComponentTransfer.appendChild(feFuncB);\r\n this.feFuncB = feFuncB;\r\n }\r\n\r\n SVGTritoneFilter.prototype.renderFrame = function (forceRender) {\r\n if (forceRender || this.filterManager._mdf) {\r\n var color1 = this.filterManager.effectElements[0].p.v;\r\n var color2 = this.filterManager.effectElements[1].p.v;\r\n var color3 = this.filterManager.effectElements[2].p.v;\r\n var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\r\n var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\r\n var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\r\n this.feFuncR.setAttribute('tableValues', tableR);\r\n this.feFuncG.setAttribute('tableValues', tableG);\r\n this.feFuncB.setAttribute('tableValues', tableB); // var opacity = this.filterManager.effectElements[2].p.v/100;\r\n // this.matrixFilter.setAttribute('values',(colorWhite[0]- colorBlack[0])+' 0 0 0 '+ colorBlack[0] +' '+ (colorWhite[1]- colorBlack[1]) +' 0 0 0 '+ colorBlack[1] +' '+ (colorWhite[2]- colorBlack[2]) +' 0 0 0 '+ colorBlack[2] +' 0 0 0 ' + opacity + ' 0');\r\n }\r\n };\r\n\r\n function SVGProLevelsFilter(filter, filterManager) {\r\n this.filterManager = filterManager;\r\n var effectElements = this.filterManager.effectElements;\r\n var feComponentTransfer = createNS('feComponentTransfer');\r\n\r\n if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {\r\n this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\r\n }\r\n\r\n if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {\r\n this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\r\n }\r\n\r\n if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {\r\n this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\r\n }\r\n\r\n if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {\r\n this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\r\n }\r\n\r\n if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\r\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\r\n filter.appendChild(feComponentTransfer);\r\n feComponentTransfer = createNS('feComponentTransfer');\r\n }\r\n\r\n if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {\r\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\r\n filter.appendChild(feComponentTransfer);\r\n this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\r\n this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\r\n this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\r\n }\r\n }\r\n\r\n SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\r\n var feFunc = createNS(type);\r\n feFunc.setAttribute('type', 'table');\r\n feComponentTransfer.appendChild(feFunc);\r\n return feFunc;\r\n };\r\n\r\n SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\r\n var cnt = 0;\r\n var segments = 256;\r\n var perc;\r\n var min = Math.min(inputBlack, inputWhite);\r\n var max = Math.max(inputBlack, inputWhite);\r\n var table = Array.call(null, {\r\n length: segments\r\n });\r\n var colorValue;\r\n var pos = 0;\r\n var outputDelta = outputWhite - outputBlack;\r\n var inputDelta = inputWhite - inputBlack;\r\n\r\n while (cnt <= 256) {\r\n perc = cnt / 256;\r\n\r\n if (perc <= min) {\r\n colorValue = inputDelta < 0 ? outputWhite : outputBlack;\r\n } else if (perc >= max) {\r\n colorValue = inputDelta < 0 ? outputBlack : outputWhite;\r\n } else {\r\n colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);\r\n }\r\n\r\n table[pos] = colorValue;\r\n pos += 1;\r\n cnt += 256 / (segments - 1);\r\n }\r\n\r\n return table.join(' ');\r\n };\r\n\r\n SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\r\n if (forceRender || this.filterManager._mdf) {\r\n var val;\r\n var effectElements = this.filterManager.effectElements;\r\n\r\n if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {\r\n val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\r\n this.feFuncRComposed.setAttribute('tableValues', val);\r\n this.feFuncGComposed.setAttribute('tableValues', val);\r\n this.feFuncBComposed.setAttribute('tableValues', val);\r\n }\r\n\r\n if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {\r\n val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\r\n this.feFuncR.setAttribute('tableValues', val);\r\n }\r\n\r\n if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {\r\n val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\r\n this.feFuncG.setAttribute('tableValues', val);\r\n }\r\n\r\n if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {\r\n val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\r\n this.feFuncB.setAttribute('tableValues', val);\r\n }\r\n\r\n if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {\r\n val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\r\n this.feFuncA.setAttribute('tableValues', val);\r\n }\r\n }\r\n };\r\n\r\n function SVGDropShadowEffect(filter, filterManager) {\r\n var filterSize = filterManager.container.globalData.renderConfig.filterSize;\r\n filter.setAttribute('x', filterSize.x);\r\n filter.setAttribute('y', filterSize.y);\r\n filter.setAttribute('width', filterSize.width);\r\n filter.setAttribute('height', filterSize.height);\r\n this.filterManager = filterManager;\r\n var feGaussianBlur = createNS('feGaussianBlur');\r\n feGaussianBlur.setAttribute('in', 'SourceAlpha');\r\n feGaussianBlur.setAttribute('result', 'drop_shadow_1');\r\n feGaussianBlur.setAttribute('stdDeviation', '0');\r\n this.feGaussianBlur = feGaussianBlur;\r\n filter.appendChild(feGaussianBlur);\r\n var feOffset = createNS('feOffset');\r\n feOffset.setAttribute('dx', '25');\r\n feOffset.setAttribute('dy', '0');\r\n feOffset.setAttribute('in', 'drop_shadow_1');\r\n feOffset.setAttribute('result', 'drop_shadow_2');\r\n this.feOffset = feOffset;\r\n filter.appendChild(feOffset);\r\n var feFlood = createNS('feFlood');\r\n feFlood.setAttribute('flood-color', '#00ff00');\r\n feFlood.setAttribute('flood-opacity', '1');\r\n feFlood.setAttribute('result', 'drop_shadow_3');\r\n this.feFlood = feFlood;\r\n filter.appendChild(feFlood);\r\n var feComposite = createNS('feComposite');\r\n feComposite.setAttribute('in', 'drop_shadow_3');\r\n feComposite.setAttribute('in2', 'drop_shadow_2');\r\n feComposite.setAttribute('operator', 'in');\r\n feComposite.setAttribute('result', 'drop_shadow_4');\r\n filter.appendChild(feComposite);\r\n var feMerge = createNS('feMerge');\r\n filter.appendChild(feMerge);\r\n var feMergeNode;\r\n feMergeNode = createNS('feMergeNode');\r\n feMerge.appendChild(feMergeNode);\r\n feMergeNode = createNS('feMergeNode');\r\n feMergeNode.setAttribute('in', 'SourceGraphic');\r\n this.feMergeNode = feMergeNode;\r\n this.feMerge = feMerge;\r\n this.originalNodeAdded = false;\r\n feMerge.appendChild(feMergeNode);\r\n }\r\n\r\n SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\r\n if (forceRender || this.filterManager._mdf) {\r\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\r\n this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\r\n }\r\n\r\n if (forceRender || this.filterManager.effectElements[0].p._mdf) {\r\n var col = this.filterManager.effectElements[0].p.v;\r\n this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\r\n }\r\n\r\n if (forceRender || this.filterManager.effectElements[1].p._mdf) {\r\n this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\r\n }\r\n\r\n if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\r\n var distance = this.filterManager.effectElements[3].p.v;\r\n var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\r\n var x = distance * Math.cos(angle);\r\n var y = distance * Math.sin(angle);\r\n this.feOffset.setAttribute('dx', x);\r\n this.feOffset.setAttribute('dy', y);\r\n }\r\n /* if(forceRender || this.filterManager.effectElements[5].p._mdf){\r\n if(this.filterManager.effectElements[5].p.v === 1 && this.originalNodeAdded) {\r\n this.feMerge.removeChild(this.feMergeNode);\r\n this.originalNodeAdded = false;\r\n } else if(this.filterManager.effectElements[5].p.v === 0 && !this.originalNodeAdded) {\r\n this.feMerge.appendChild(this.feMergeNode);\r\n this.originalNodeAdded = true;\r\n }\r\n } */\r\n\r\n }\r\n };\r\n\r\n var _svgMatteSymbols = [];\r\n\r\n function SVGMatte3Effect(filterElem, filterManager, elem) {\r\n this.initialized = false;\r\n this.filterManager = filterManager;\r\n this.filterElem = filterElem;\r\n this.elem = elem;\r\n elem.matteElement = createNS('g');\r\n elem.matteElement.appendChild(elem.layerElement);\r\n elem.matteElement.appendChild(elem.transformedElement);\r\n elem.baseElement = elem.matteElement;\r\n }\r\n\r\n SVGMatte3Effect.prototype.findSymbol = function (mask) {\r\n var i = 0;\r\n var len = _svgMatteSymbols.length;\r\n\r\n while (i < len) {\r\n if (_svgMatteSymbols[i] === mask) {\r\n return _svgMatteSymbols[i];\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\r\n var parentNode = mask.layerElement.parentNode;\r\n\r\n if (!parentNode) {\r\n return;\r\n }\r\n\r\n var children = parentNode.children;\r\n var i = 0;\r\n var len = children.length;\r\n\r\n while (i < len) {\r\n if (children[i] === mask.layerElement) {\r\n break;\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n var nextChild;\r\n\r\n if (i <= len - 2) {\r\n nextChild = children[i + 1];\r\n }\r\n\r\n var useElem = createNS('use');\r\n useElem.setAttribute('href', '#' + symbolId);\r\n\r\n if (nextChild) {\r\n parentNode.insertBefore(useElem, nextChild);\r\n } else {\r\n parentNode.appendChild(useElem);\r\n }\r\n };\r\n\r\n SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\r\n if (!this.findSymbol(mask)) {\r\n var symbolId = createElementID();\r\n var masker = createNS('mask');\r\n masker.setAttribute('id', mask.layerId);\r\n masker.setAttribute('mask-type', 'alpha');\r\n\r\n _svgMatteSymbols.push(mask);\r\n\r\n var defs = elem.globalData.defs;\r\n defs.appendChild(masker);\r\n var symbol = createNS('symbol');\r\n symbol.setAttribute('id', symbolId);\r\n this.replaceInParent(mask, symbolId);\r\n symbol.appendChild(mask.layerElement);\r\n defs.appendChild(symbol);\r\n var useElem = createNS('use');\r\n useElem.setAttribute('href', '#' + symbolId);\r\n masker.appendChild(useElem);\r\n mask.data.hd = false;\r\n mask.show();\r\n }\r\n\r\n elem.setMatte(mask.layerId);\r\n };\r\n\r\n SVGMatte3Effect.prototype.initialize = function () {\r\n var ind = this.filterManager.effectElements[0].p.v;\r\n var elements = this.elem.comp.elements;\r\n var i = 0;\r\n var len = elements.length;\r\n\r\n while (i < len) {\r\n if (elements[i] && elements[i].data.ind === ind) {\r\n this.setElementAsMask(this.elem, elements[i]);\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n this.initialized = true;\r\n };\r\n\r\n SVGMatte3Effect.prototype.renderFrame = function () {\r\n if (!this.initialized) {\r\n this.initialize();\r\n }\r\n };\r\n\r\n function SVGGaussianBlurEffect(filter, filterManager) {\r\n // Outset the filter region by 100% on all sides to accommodate blur expansion.\r\n filter.setAttribute('x', '-100%');\r\n filter.setAttribute('y', '-100%');\r\n filter.setAttribute('width', '300%');\r\n filter.setAttribute('height', '300%');\r\n this.filterManager = filterManager;\r\n var feGaussianBlur = createNS('feGaussianBlur');\r\n filter.appendChild(feGaussianBlur);\r\n this.feGaussianBlur = feGaussianBlur;\r\n }\r\n\r\n SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\r\n if (forceRender || this.filterManager._mdf) {\r\n // Empirical value, matching AE's blur appearance.\r\n var kBlurrinessToSigma = 0.3;\r\n var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma; // Dimensions mapping:\r\n //\r\n // 1 -> horizontal & vertical\r\n // 2 -> horizontal only\r\n // 3 -> vertical only\r\n //\r\n\r\n var dimensions = this.filterManager.effectElements[1].p.v;\r\n var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq\r\n\r\n var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq\r\n\r\n this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY); // Repeat edges mapping:\r\n //\r\n // 0 -> off -> duplicate\r\n // 1 -> on -> wrap\r\n\r\n var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\r\n\r\n this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\r\n }\r\n };\r\n\r\n var registeredEffects = {};\r\n\r\n function SVGEffects(elem) {\r\n var i;\r\n var len = elem.data.ef ? elem.data.ef.length : 0;\r\n var filId = createElementID();\r\n var fil = filtersFactory.createFilter(filId, true);\r\n var count = 0;\r\n this.filters = [];\r\n var filterManager;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n filterManager = null;\r\n var type = elem.data.ef[i].ty;\r\n\r\n if (registeredEffects[type]) {\r\n var Effect = registeredEffects[type].effect;\r\n filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem);\r\n\r\n if (registeredEffects[type].countsAsEffect) {\r\n count += 1;\r\n }\r\n }\r\n\r\n if (elem.data.ef[i].ty === 20) {\r\n count += 1;\r\n filterManager = new SVGTintFilter(fil, elem.effectsManager.effectElements[i]);\r\n } else if (elem.data.ef[i].ty === 21) {\r\n count += 1;\r\n filterManager = new SVGFillFilter(fil, elem.effectsManager.effectElements[i]);\r\n } else if (elem.data.ef[i].ty === 22) {\r\n filterManager = new SVGStrokeEffect(elem, elem.effectsManager.effectElements[i]);\r\n } else if (elem.data.ef[i].ty === 23) {\r\n count += 1;\r\n filterManager = new SVGTritoneFilter(fil, elem.effectsManager.effectElements[i]);\r\n } else if (elem.data.ef[i].ty === 24) {\r\n count += 1;\r\n filterManager = new SVGProLevelsFilter(fil, elem.effectsManager.effectElements[i]);\r\n } else if (elem.data.ef[i].ty === 25) {\r\n count += 1;\r\n filterManager = new SVGDropShadowEffect(fil, elem.effectsManager.effectElements[i]);\r\n } else if (elem.data.ef[i].ty === 28) {\r\n // count += 1;\r\n filterManager = new SVGMatte3Effect(fil, elem.effectsManager.effectElements[i], elem);\r\n } else if (elem.data.ef[i].ty === 29) {\r\n count += 1;\r\n filterManager = new SVGGaussianBlurEffect(fil, elem.effectsManager.effectElements[i]);\r\n }\r\n\r\n if (filterManager) {\r\n this.filters.push(filterManager);\r\n }\r\n }\r\n\r\n if (count) {\r\n elem.globalData.defs.appendChild(fil);\r\n elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\r\n }\r\n\r\n if (this.filters.length) {\r\n elem.addRenderableComponent(this);\r\n }\r\n }\r\n\r\n SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\r\n var i;\r\n var len = this.filters.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.filters[i].renderFrame(_isFirstFrame);\r\n }\r\n };\r\n\r\n function registerEffect(id, effect, countsAsEffect) {\r\n registeredEffects[id] = {\r\n effect: effect,\r\n countsAsEffect: countsAsEffect\r\n };\r\n }\r\n\r\n function SVGBaseElement() {}\r\n\r\n SVGBaseElement.prototype = {\r\n initRendererElement: function initRendererElement() {\r\n this.layerElement = createNS('g');\r\n },\r\n createContainerElements: function createContainerElements() {\r\n this.matteElement = createNS('g');\r\n this.transformedElement = this.layerElement;\r\n this.maskedElement = this.layerElement;\r\n this._sizeChanged = false;\r\n var layerElementParent = null; // If this layer acts as a mask for the following layer\r\n\r\n var filId;\r\n var fil;\r\n var gg;\r\n\r\n if (this.data.td) {\r\n if (this.data.td == 3 || this.data.td == 1) {\r\n // eslint-disable-line eqeqeq\r\n var masker = createNS('mask');\r\n masker.setAttribute('id', this.layerId);\r\n masker.setAttribute('mask-type', this.data.td == 3 ? 'luminance' : 'alpha'); // eslint-disable-line eqeqeq\r\n\r\n masker.appendChild(this.layerElement);\r\n layerElementParent = masker;\r\n this.globalData.defs.appendChild(masker); // This is only for IE and Edge when mask if of type alpha\r\n\r\n if (!featureSupport.maskType && this.data.td == 1) {\r\n // eslint-disable-line eqeqeq\r\n masker.setAttribute('mask-type', 'luminance');\r\n filId = createElementID();\r\n fil = filtersFactory.createFilter(filId);\r\n this.globalData.defs.appendChild(fil);\r\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\r\n gg = createNS('g');\r\n gg.appendChild(this.layerElement);\r\n layerElementParent = gg;\r\n masker.appendChild(gg);\r\n gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\r\n }\r\n } else if (this.data.td == 2) {\r\n // eslint-disable-line eqeqeq\r\n var maskGroup = createNS('mask');\r\n maskGroup.setAttribute('id', this.layerId);\r\n maskGroup.setAttribute('mask-type', 'alpha');\r\n var maskGrouper = createNS('g');\r\n maskGroup.appendChild(maskGrouper);\r\n filId = createElementID();\r\n fil = filtersFactory.createFilter(filId); /// /\r\n // This solution doesn't work on Android when meta tag with viewport attribute is set\r\n\r\n /* var feColorMatrix = createNS('feColorMatrix');\r\n feColorMatrix.setAttribute('type', 'matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n feColorMatrix.setAttribute('values','1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 -1 1');\r\n fil.appendChild(feColorMatrix); */\r\n /// /\r\n\r\n var feCTr = createNS('feComponentTransfer');\r\n feCTr.setAttribute('in', 'SourceGraphic');\r\n fil.appendChild(feCTr);\r\n var feFunc = createNS('feFuncA');\r\n feFunc.setAttribute('type', 'table');\r\n feFunc.setAttribute('tableValues', '1.0 0.0');\r\n feCTr.appendChild(feFunc); /// /\r\n\r\n this.globalData.defs.appendChild(fil);\r\n var alphaRect = createNS('rect');\r\n alphaRect.setAttribute('width', this.comp.data.w);\r\n alphaRect.setAttribute('height', this.comp.data.h);\r\n alphaRect.setAttribute('x', '0');\r\n alphaRect.setAttribute('y', '0');\r\n alphaRect.setAttribute('fill', '#ffffff');\r\n alphaRect.setAttribute('opacity', '0');\r\n maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\r\n maskGrouper.appendChild(alphaRect);\r\n maskGrouper.appendChild(this.layerElement);\r\n layerElementParent = maskGrouper;\r\n\r\n if (!featureSupport.maskType) {\r\n maskGroup.setAttribute('mask-type', 'luminance');\r\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\r\n gg = createNS('g');\r\n maskGrouper.appendChild(alphaRect);\r\n gg.appendChild(this.layerElement);\r\n layerElementParent = gg;\r\n maskGrouper.appendChild(gg);\r\n }\r\n\r\n this.globalData.defs.appendChild(maskGroup);\r\n }\r\n } else if (this.data.tt) {\r\n this.matteElement.appendChild(this.layerElement);\r\n layerElementParent = this.matteElement;\r\n this.baseElement = this.matteElement;\r\n } else {\r\n this.baseElement = this.layerElement;\r\n }\r\n\r\n if (this.data.ln) {\r\n this.layerElement.setAttribute('id', this.data.ln);\r\n }\r\n\r\n if (this.data.cl) {\r\n this.layerElement.setAttribute('class', this.data.cl);\r\n } // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\r\n\r\n\r\n if (this.data.ty === 0 && !this.data.hd) {\r\n var cp = createNS('clipPath');\r\n var pt = createNS('path');\r\n pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\r\n var clipId = createElementID();\r\n cp.setAttribute('id', clipId);\r\n cp.appendChild(pt);\r\n this.globalData.defs.appendChild(cp);\r\n\r\n if (this.checkMasks()) {\r\n var cpGroup = createNS('g');\r\n cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\r\n cpGroup.appendChild(this.layerElement);\r\n this.transformedElement = cpGroup;\r\n\r\n if (layerElementParent) {\r\n layerElementParent.appendChild(this.transformedElement);\r\n } else {\r\n this.baseElement = this.transformedElement;\r\n }\r\n } else {\r\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\r\n }\r\n }\r\n\r\n if (this.data.bm !== 0) {\r\n this.setBlendMode();\r\n }\r\n },\r\n renderElement: function renderElement() {\r\n if (this.finalTransform._matMdf) {\r\n this.transformedElement.setAttribute('transform', this.finalTransform.mat.to2dCSS());\r\n }\r\n\r\n if (this.finalTransform._opMdf) {\r\n this.transformedElement.setAttribute('opacity', this.finalTransform.mProp.o.v);\r\n }\r\n },\r\n destroyBaseElement: function destroyBaseElement() {\r\n this.layerElement = null;\r\n this.matteElement = null;\r\n this.maskManager.destroy();\r\n },\r\n getBaseElement: function getBaseElement() {\r\n if (this.data.hd) {\r\n return null;\r\n }\r\n\r\n return this.baseElement;\r\n },\r\n createRenderableComponents: function createRenderableComponents() {\r\n this.maskManager = new MaskElement(this.data, this, this.globalData);\r\n this.renderableEffectsManager = new SVGEffects(this);\r\n },\r\n setMatte: function setMatte(id) {\r\n if (!this.matteElement) {\r\n return;\r\n }\r\n\r\n this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\r\n }\r\n };\r\n\r\n /**\r\n * @file\r\n * Handles AE's layer parenting property.\r\n *\r\n */\r\n function HierarchyElement() {}\r\n\r\n HierarchyElement.prototype = {\r\n /**\r\n * @function\r\n * Initializes hierarchy properties\r\n *\r\n */\r\n initHierarchy: function initHierarchy() {\r\n // element's parent list\r\n this.hierarchy = []; // if element is parent of another layer _isParent will be true\r\n\r\n this._isParent = false;\r\n this.checkParenting();\r\n },\r\n\r\n /**\r\n * @function\r\n * Sets layer's hierarchy.\r\n * @param {array} hierarch\r\n * layer's parent list\r\n *\r\n */\r\n setHierarchy: function setHierarchy(hierarchy) {\r\n this.hierarchy = hierarchy;\r\n },\r\n\r\n /**\r\n * @function\r\n * Sets layer as parent.\r\n *\r\n */\r\n setAsParent: function setAsParent() {\r\n this._isParent = true;\r\n },\r\n\r\n /**\r\n * @function\r\n * Searches layer's parenting chain\r\n *\r\n */\r\n checkParenting: function checkParenting() {\r\n if (this.data.parent !== undefined) {\r\n this.comp.buildElementParenting(this, this.data.parent, []);\r\n }\r\n }\r\n };\r\n\r\n function RenderableDOMElement() {}\r\n\r\n (function () {\r\n var _prototype = {\r\n initElement: function initElement(data, globalData, comp) {\r\n this.initFrame();\r\n this.initBaseData(data, globalData, comp);\r\n this.initTransform(data, globalData, comp);\r\n this.initHierarchy();\r\n this.initRenderable();\r\n this.initRendererElement();\r\n this.createContainerElements();\r\n this.createRenderableComponents();\r\n this.createContent();\r\n this.hide();\r\n },\r\n hide: function hide() {\r\n // console.log('HIDE', this);\r\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\r\n var elem = this.baseElement || this.layerElement;\r\n elem.style.display = 'none';\r\n this.hidden = true;\r\n }\r\n },\r\n show: function show() {\r\n // console.log('SHOW', this);\r\n if (this.isInRange && !this.isTransparent) {\r\n if (!this.data.hd) {\r\n var elem = this.baseElement || this.layerElement;\r\n elem.style.display = 'block';\r\n }\r\n\r\n this.hidden = false;\r\n this._isFirstFrame = true;\r\n }\r\n },\r\n renderFrame: function renderFrame() {\r\n // If it is exported as hidden (data.hd === true) no need to render\r\n // If it is not visible no need to render\r\n if (this.data.hd || this.hidden) {\r\n return;\r\n }\r\n\r\n this.renderTransform();\r\n this.renderRenderable();\r\n this.renderElement();\r\n this.renderInnerContent();\r\n\r\n if (this._isFirstFrame) {\r\n this._isFirstFrame = false;\r\n }\r\n },\r\n renderInnerContent: function renderInnerContent() {},\r\n prepareFrame: function prepareFrame(num) {\r\n this._mdf = false;\r\n this.prepareRenderableFrame(num);\r\n this.prepareProperties(num, this.isInRange);\r\n this.checkTransparency();\r\n },\r\n destroy: function destroy() {\r\n this.innerElem = null;\r\n this.destroyBaseElement();\r\n }\r\n };\r\n extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\r\n })();\r\n\r\n function IImageElement(data, globalData, comp) {\r\n this.assetData = globalData.getAssetData(data.refId);\r\n this.initElement(data, globalData, comp);\r\n this.sourceRect = {\r\n top: 0,\r\n left: 0,\r\n width: this.assetData.w,\r\n height: this.assetData.h\r\n };\r\n }\r\n\r\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\r\n\r\n IImageElement.prototype.createContent = function () {\r\n var assetPath = this.globalData.getAssetsPath(this.assetData);\r\n this.innerElem = createNS('image');\r\n this.innerElem.setAttribute('width', this.assetData.w + 'px');\r\n this.innerElem.setAttribute('height', this.assetData.h + 'px');\r\n this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\r\n this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\r\n this.layerElement.appendChild(this.innerElem);\r\n };\r\n\r\n IImageElement.prototype.sourceRectAtTime = function () {\r\n return this.sourceRect;\r\n };\r\n\r\n function ProcessedElement(element, position) {\r\n this.elem = element;\r\n this.pos = position;\r\n }\r\n\r\n function IShapeElement() {}\r\n\r\n IShapeElement.prototype = {\r\n addShapeToModifiers: function addShapeToModifiers(data) {\r\n var i;\r\n var len = this.shapeModifiers.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.shapeModifiers[i].addShape(data);\r\n }\r\n },\r\n isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {\r\n var i = 0;\r\n var len = this.shapeModifiers.length;\r\n\r\n while (i < len) {\r\n if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n renderModifiers: function renderModifiers() {\r\n if (!this.shapeModifiers.length) {\r\n return;\r\n }\r\n\r\n var i;\r\n var len = this.shapes.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.shapes[i].sh.reset();\r\n }\r\n\r\n len = this.shapeModifiers.length;\r\n var shouldBreakProcess;\r\n\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); // workaround to fix cases where a repeater resets the shape so the following processes get called twice\r\n // TODO: find a better solution for this\r\n\r\n if (shouldBreakProcess) {\r\n break;\r\n }\r\n }\r\n },\r\n searchProcessedElement: function searchProcessedElement(elem) {\r\n var elements = this.processedElements;\r\n var i = 0;\r\n var len = elements.length;\r\n\r\n while (i < len) {\r\n if (elements[i].elem === elem) {\r\n return elements[i].pos;\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n return 0;\r\n },\r\n addProcessedElement: function addProcessedElement(elem, pos) {\r\n var elements = this.processedElements;\r\n var i = elements.length;\r\n\r\n while (i) {\r\n i -= 1;\r\n\r\n if (elements[i].elem === elem) {\r\n elements[i].pos = pos;\r\n return;\r\n }\r\n }\r\n\r\n elements.push(new ProcessedElement(elem, pos));\r\n },\r\n prepareFrame: function prepareFrame(num) {\r\n this.prepareRenderableFrame(num);\r\n this.prepareProperties(num, this.isInRange);\r\n }\r\n };\r\n\r\n var lineCapEnum = {\r\n 1: 'butt',\r\n 2: 'round',\r\n 3: 'square'\r\n };\r\n var lineJoinEnum = {\r\n 1: 'miter',\r\n 2: 'round',\r\n 3: 'bevel'\r\n };\r\n\r\n function SVGShapeData(transformers, level, shape) {\r\n this.caches = [];\r\n this.styles = [];\r\n this.transformers = transformers;\r\n this.lStr = '';\r\n this.sh = shape;\r\n this.lvl = level; // TODO find if there are some cases where _isAnimated can be false.\r\n // For now, since shapes add up with other shapes. They have to be calculated every time.\r\n // One way of finding out is checking if all styles associated to this shape depend only of this shape\r\n\r\n this._isAnimated = !!shape.k; // TODO: commenting this for now since all shapes are animated\r\n\r\n var i = 0;\r\n var len = transformers.length;\r\n\r\n while (i < len) {\r\n if (transformers[i].mProps.dynamicProperties.length) {\r\n this._isAnimated = true;\r\n break;\r\n }\r\n\r\n i += 1;\r\n }\r\n }\r\n\r\n SVGShapeData.prototype.setAsAnimated = function () {\r\n this._isAnimated = true;\r\n };\r\n\r\n function SVGStyleData(data, level) {\r\n this.data = data;\r\n this.type = data.ty;\r\n this.d = '';\r\n this.lvl = level;\r\n this._mdf = false;\r\n this.closed = data.hd === true;\r\n this.pElem = createNS('path');\r\n this.msElem = null;\r\n }\r\n\r\n SVGStyleData.prototype.reset = function () {\r\n this.d = '';\r\n this._mdf = false;\r\n };\r\n\r\n function DashProperty(elem, data, renderer, container) {\r\n this.elem = elem;\r\n this.frameId = -1;\r\n this.dataProps = createSizedArray(data.length);\r\n this.renderer = renderer;\r\n this.k = false;\r\n this.dashStr = '';\r\n this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\r\n this.dashoffset = createTypedArray('float32', 1);\r\n this.initDynamicPropertyContainer(container);\r\n var i;\r\n var len = data.length || 0;\r\n var prop;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\r\n this.k = prop.k || this.k;\r\n this.dataProps[i] = {\r\n n: data[i].n,\r\n p: prop\r\n };\r\n }\r\n\r\n if (!this.k) {\r\n this.getValue(true);\r\n }\r\n\r\n this._isAnimated = this.k;\r\n }\r\n\r\n DashProperty.prototype.getValue = function (forceRender) {\r\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\r\n return;\r\n }\r\n\r\n this.frameId = this.elem.globalData.frameId;\r\n this.iterateDynamicProperties();\r\n this._mdf = this._mdf || forceRender;\r\n\r\n if (this._mdf) {\r\n var i = 0;\r\n var len = this.dataProps.length;\r\n\r\n if (this.renderer === 'svg') {\r\n this.dashStr = '';\r\n }\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (this.dataProps[i].n !== 'o') {\r\n if (this.renderer === 'svg') {\r\n this.dashStr += ' ' + this.dataProps[i].p.v;\r\n } else {\r\n this.dashArray[i] = this.dataProps[i].p.v;\r\n }\r\n } else {\r\n this.dashoffset[0] = this.dataProps[i].p.v;\r\n }\r\n }\r\n }\r\n };\r\n\r\n extendPrototype([DynamicPropertyContainer], DashProperty);\r\n\r\n function SVGStrokeStyleData(elem, data, styleOb) {\r\n this.initDynamicPropertyContainer(elem);\r\n this.getValue = this.iterateDynamicProperties;\r\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\r\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\r\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\r\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\r\n this.style = styleOb;\r\n this._isAnimated = !!this._isAnimated;\r\n }\r\n\r\n extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\r\n\r\n function SVGFillStyleData(elem, data, styleOb) {\r\n this.initDynamicPropertyContainer(elem);\r\n this.getValue = this.iterateDynamicProperties;\r\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\r\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\r\n this.style = styleOb;\r\n }\r\n\r\n extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\r\n\r\n function SVGNoStyleData(elem, data, styleOb) {\r\n this.initDynamicPropertyContainer(elem);\r\n this.getValue = this.iterateDynamicProperties;\r\n this.style = styleOb;\r\n }\r\n\r\n extendPrototype([DynamicPropertyContainer], SVGNoStyleData);\r\n\r\n function GradientProperty(elem, data, container) {\r\n this.data = data;\r\n this.c = createTypedArray('uint8c', data.p * 4);\r\n var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;\r\n this.o = createTypedArray('float32', cLength);\r\n this._cmdf = false;\r\n this._omdf = false;\r\n this._collapsable = this.checkCollapsable();\r\n this._hasOpacity = cLength;\r\n this.initDynamicPropertyContainer(container);\r\n this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\r\n this.k = this.prop.k;\r\n this.getValue(true);\r\n }\r\n\r\n GradientProperty.prototype.comparePoints = function (values, points) {\r\n var i = 0;\r\n var len = this.o.length / 2;\r\n var diff;\r\n\r\n while (i < len) {\r\n diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\r\n\r\n if (diff > 0.01) {\r\n return false;\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n GradientProperty.prototype.checkCollapsable = function () {\r\n if (this.o.length / 2 !== this.c.length / 4) {\r\n return false;\r\n }\r\n\r\n if (this.data.k.k[0].s) {\r\n var i = 0;\r\n var len = this.data.k.k.length;\r\n\r\n while (i < len) {\r\n if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\r\n return false;\r\n }\r\n\r\n i += 1;\r\n }\r\n } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n GradientProperty.prototype.getValue = function (forceRender) {\r\n this.prop.getValue();\r\n this._mdf = false;\r\n this._cmdf = false;\r\n this._omdf = false;\r\n\r\n if (this.prop._mdf || forceRender) {\r\n var i;\r\n var len = this.data.p * 4;\r\n var mult;\r\n var val;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n mult = i % 4 === 0 ? 100 : 255;\r\n val = Math.round(this.prop.v[i] * mult);\r\n\r\n if (this.c[i] !== val) {\r\n this.c[i] = val;\r\n this._cmdf = !forceRender;\r\n }\r\n }\r\n\r\n if (this.o.length) {\r\n len = this.prop.v.length;\r\n\r\n for (i = this.data.p * 4; i < len; i += 1) {\r\n mult = i % 2 === 0 ? 100 : 1;\r\n val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\r\n\r\n if (this.o[i - this.data.p * 4] !== val) {\r\n this.o[i - this.data.p * 4] = val;\r\n this._omdf = !forceRender;\r\n }\r\n }\r\n }\r\n\r\n this._mdf = !forceRender;\r\n }\r\n };\r\n\r\n extendPrototype([DynamicPropertyContainer], GradientProperty);\r\n\r\n function SVGGradientFillStyleData(elem, data, styleOb) {\r\n this.initDynamicPropertyContainer(elem);\r\n this.getValue = this.iterateDynamicProperties;\r\n this.initGradientData(elem, data, styleOb);\r\n }\r\n\r\n SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\r\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\r\n this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\r\n this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\r\n this.h = PropertyFactory.getProp(elem, data.h || {\r\n k: 0\r\n }, 0, 0.01, this);\r\n this.a = PropertyFactory.getProp(elem, data.a || {\r\n k: 0\r\n }, 0, degToRads, this);\r\n this.g = new GradientProperty(elem, data.g, this);\r\n this.style = styleOb;\r\n this.stops = [];\r\n this.setGradientData(styleOb.pElem, data);\r\n this.setGradientOpacity(data, styleOb);\r\n this._isAnimated = !!this._isAnimated;\r\n };\r\n\r\n SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\r\n var gradientId = createElementID();\r\n var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\r\n gfill.setAttribute('id', gradientId);\r\n gfill.setAttribute('spreadMethod', 'pad');\r\n gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\r\n var stops = [];\r\n var stop;\r\n var j;\r\n var jLen;\r\n jLen = data.g.p * 4;\r\n\r\n for (j = 0; j < jLen; j += 4) {\r\n stop = createNS('stop');\r\n gfill.appendChild(stop);\r\n stops.push(stop);\r\n }\r\n\r\n pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\r\n this.gf = gfill;\r\n this.cst = stops;\r\n };\r\n\r\n SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\r\n if (this.g._hasOpacity && !this.g._collapsable) {\r\n var stop;\r\n var j;\r\n var jLen;\r\n var mask = createNS('mask');\r\n var maskElement = createNS('path');\r\n mask.appendChild(maskElement);\r\n var opacityId = createElementID();\r\n var maskId = createElementID();\r\n mask.setAttribute('id', maskId);\r\n var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\r\n opFill.setAttribute('id', opacityId);\r\n opFill.setAttribute('spreadMethod', 'pad');\r\n opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\r\n jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\r\n var stops = this.stops;\r\n\r\n for (j = data.g.p * 4; j < jLen; j += 2) {\r\n stop = createNS('stop');\r\n stop.setAttribute('stop-color', 'rgb(255,255,255)');\r\n opFill.appendChild(stop);\r\n stops.push(stop);\r\n }\r\n\r\n maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\r\n\r\n if (data.ty === 'gs') {\r\n maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\r\n maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\r\n\r\n if (data.lj === 1) {\r\n maskElement.setAttribute('stroke-miterlimit', data.ml);\r\n }\r\n }\r\n\r\n this.of = opFill;\r\n this.ms = mask;\r\n this.ost = stops;\r\n this.maskId = maskId;\r\n styleOb.msElem = maskElement;\r\n }\r\n };\r\n\r\n extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\r\n\r\n function SVGGradientStrokeStyleData(elem, data, styleOb) {\r\n this.initDynamicPropertyContainer(elem);\r\n this.getValue = this.iterateDynamicProperties;\r\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\r\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\r\n this.initGradientData(elem, data, styleOb);\r\n this._isAnimated = !!this._isAnimated;\r\n }\r\n\r\n extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\r\n\r\n function ShapeGroupData() {\r\n this.it = [];\r\n this.prevViewData = [];\r\n this.gr = createNS('g');\r\n }\r\n\r\n function SVGTransformData(mProps, op, container) {\r\n this.transform = {\r\n mProps: mProps,\r\n op: op,\r\n container: container\r\n };\r\n this.elements = [];\r\n this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\r\n }\r\n\r\n var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\r\n if (length === 0) {\r\n return '';\r\n }\r\n\r\n var _o = pathNodes.o;\r\n var _i = pathNodes.i;\r\n var _v = pathNodes.v;\r\n var i;\r\n var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\r\n\r\n for (i = 1; i < length; i += 1) {\r\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\r\n }\r\n\r\n if (closed && length) {\r\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\r\n shapeString += 'z';\r\n }\r\n\r\n return shapeString;\r\n };\r\n\r\n var SVGElementsRenderer = function () {\r\n var _identityMatrix = new Matrix();\r\n\r\n var _matrixHelper = new Matrix();\r\n\r\n var ob = {\r\n createRenderFunction: createRenderFunction\r\n };\r\n\r\n function createRenderFunction(data) {\r\n switch (data.ty) {\r\n case 'fl':\r\n return renderFill;\r\n\r\n case 'gf':\r\n return renderGradient;\r\n\r\n case 'gs':\r\n return renderGradientStroke;\r\n\r\n case 'st':\r\n return renderStroke;\r\n\r\n case 'sh':\r\n case 'el':\r\n case 'rc':\r\n case 'sr':\r\n return renderPath;\r\n\r\n case 'tr':\r\n return renderContentTransform;\r\n\r\n case 'no':\r\n return renderNoop;\r\n\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n function renderContentTransform(styleData, itemData, isFirstFrame) {\r\n if (isFirstFrame || itemData.transform.op._mdf) {\r\n itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\r\n }\r\n\r\n if (isFirstFrame || itemData.transform.mProps._mdf) {\r\n itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\r\n }\r\n }\r\n\r\n function renderNoop() {}\r\n\r\n function renderPath(styleData, itemData, isFirstFrame) {\r\n var j;\r\n var jLen;\r\n var pathStringTransformed;\r\n var redraw;\r\n var pathNodes;\r\n var l;\r\n var lLen = itemData.styles.length;\r\n var lvl = itemData.lvl;\r\n var paths;\r\n var mat;\r\n var props;\r\n var iterations;\r\n var k;\r\n\r\n for (l = 0; l < lLen; l += 1) {\r\n redraw = itemData.sh._mdf || isFirstFrame;\r\n\r\n if (itemData.styles[l].lvl < lvl) {\r\n mat = _matrixHelper.reset();\r\n iterations = lvl - itemData.styles[l].lvl;\r\n k = itemData.transformers.length - 1;\r\n\r\n while (!redraw && iterations > 0) {\r\n redraw = itemData.transformers[k].mProps._mdf || redraw;\r\n iterations -= 1;\r\n k -= 1;\r\n }\r\n\r\n if (redraw) {\r\n iterations = lvl - itemData.styles[l].lvl;\r\n k = itemData.transformers.length - 1;\r\n\r\n while (iterations > 0) {\r\n props = itemData.transformers[k].mProps.v.props;\r\n mat.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\r\n iterations -= 1;\r\n k -= 1;\r\n }\r\n }\r\n } else {\r\n mat = _identityMatrix;\r\n }\r\n\r\n paths = itemData.sh.paths;\r\n jLen = paths._length;\r\n\r\n if (redraw) {\r\n pathStringTransformed = '';\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n pathNodes = paths.shapes[j];\r\n\r\n if (pathNodes && pathNodes._length) {\r\n pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\r\n }\r\n }\r\n\r\n itemData.caches[l] = pathStringTransformed;\r\n } else {\r\n pathStringTransformed = itemData.caches[l];\r\n }\r\n\r\n itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\r\n itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\r\n }\r\n }\r\n\r\n function renderFill(styleData, itemData, isFirstFrame) {\r\n var styleElem = itemData.style;\r\n\r\n if (itemData.c._mdf || isFirstFrame) {\r\n styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\r\n }\r\n\r\n if (itemData.o._mdf || isFirstFrame) {\r\n styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\r\n }\r\n }\r\n\r\n function renderGradientStroke(styleData, itemData, isFirstFrame) {\r\n renderGradient(styleData, itemData, isFirstFrame);\r\n renderStroke(styleData, itemData, isFirstFrame);\r\n }\r\n\r\n function renderGradient(styleData, itemData, isFirstFrame) {\r\n var gfill = itemData.gf;\r\n var hasOpacity = itemData.g._hasOpacity;\r\n var pt1 = itemData.s.v;\r\n var pt2 = itemData.e.v;\r\n\r\n if (itemData.o._mdf || isFirstFrame) {\r\n var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\r\n itemData.style.pElem.setAttribute(attr, itemData.o.v);\r\n }\r\n\r\n if (itemData.s._mdf || isFirstFrame) {\r\n var attr1 = styleData.t === 1 ? 'x1' : 'cx';\r\n var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\r\n gfill.setAttribute(attr1, pt1[0]);\r\n gfill.setAttribute(attr2, pt1[1]);\r\n\r\n if (hasOpacity && !itemData.g._collapsable) {\r\n itemData.of.setAttribute(attr1, pt1[0]);\r\n itemData.of.setAttribute(attr2, pt1[1]);\r\n }\r\n }\r\n\r\n var stops;\r\n var i;\r\n var len;\r\n var stop;\r\n\r\n if (itemData.g._cmdf || isFirstFrame) {\r\n stops = itemData.cst;\r\n var cValues = itemData.g.c;\r\n len = stops.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n stop = stops[i];\r\n stop.setAttribute('offset', cValues[i * 4] + '%');\r\n stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\r\n }\r\n }\r\n\r\n if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\r\n var oValues = itemData.g.o;\r\n\r\n if (itemData.g._collapsable) {\r\n stops = itemData.cst;\r\n } else {\r\n stops = itemData.ost;\r\n }\r\n\r\n len = stops.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n stop = stops[i];\r\n\r\n if (!itemData.g._collapsable) {\r\n stop.setAttribute('offset', oValues[i * 2] + '%');\r\n }\r\n\r\n stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\r\n }\r\n }\r\n\r\n if (styleData.t === 1) {\r\n if (itemData.e._mdf || isFirstFrame) {\r\n gfill.setAttribute('x2', pt2[0]);\r\n gfill.setAttribute('y2', pt2[1]);\r\n\r\n if (hasOpacity && !itemData.g._collapsable) {\r\n itemData.of.setAttribute('x2', pt2[0]);\r\n itemData.of.setAttribute('y2', pt2[1]);\r\n }\r\n }\r\n } else {\r\n var rad;\r\n\r\n if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\r\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\r\n gfill.setAttribute('r', rad);\r\n\r\n if (hasOpacity && !itemData.g._collapsable) {\r\n itemData.of.setAttribute('r', rad);\r\n }\r\n }\r\n\r\n if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\r\n if (!rad) {\r\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\r\n }\r\n\r\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\r\n var percent = itemData.h.v;\r\n\r\n if (percent >= 1) {\r\n percent = 0.99;\r\n } else if (percent <= -1) {\r\n percent = -0.99;\r\n }\r\n\r\n var dist = rad * percent;\r\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\r\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\r\n gfill.setAttribute('fx', x);\r\n gfill.setAttribute('fy', y);\r\n\r\n if (hasOpacity && !itemData.g._collapsable) {\r\n itemData.of.setAttribute('fx', x);\r\n itemData.of.setAttribute('fy', y);\r\n }\r\n } // gfill.setAttribute('fy','200');\r\n\r\n }\r\n }\r\n\r\n function renderStroke(styleData, itemData, isFirstFrame) {\r\n var styleElem = itemData.style;\r\n var d = itemData.d;\r\n\r\n if (d && (d._mdf || isFirstFrame) && d.dashStr) {\r\n styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\r\n styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\r\n }\r\n\r\n if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\r\n styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\r\n }\r\n\r\n if (itemData.o._mdf || isFirstFrame) {\r\n styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\r\n }\r\n\r\n if (itemData.w._mdf || isFirstFrame) {\r\n styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\r\n\r\n if (styleElem.msElem) {\r\n styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\r\n }\r\n }\r\n }\r\n\r\n return ob;\r\n }();\r\n\r\n function SVGShapeElement(data, globalData, comp) {\r\n // List of drawable elements\r\n this.shapes = []; // Full shape data\r\n\r\n this.shapesData = data.shapes; // List of styles that will be applied to shapes\r\n\r\n this.stylesList = []; // List of modifiers that will be applied to shapes\r\n\r\n this.shapeModifiers = []; // List of items in shape tree\r\n\r\n this.itemsData = []; // List of items in previous shape tree\r\n\r\n this.processedElements = []; // List of animated components\r\n\r\n this.animatedContents = [];\r\n this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\r\n // List of elements that have been created\r\n\r\n this.prevViewData = []; // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\r\n }\r\n\r\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\r\n\r\n SVGShapeElement.prototype.initSecondaryElement = function () {};\r\n\r\n SVGShapeElement.prototype.identityMatrix = new Matrix();\r\n\r\n SVGShapeElement.prototype.buildExpressionInterface = function () {};\r\n\r\n SVGShapeElement.prototype.createContent = function () {\r\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\r\n this.filterUniqueShapes();\r\n };\r\n /*\r\n This method searches for multiple shapes that affect a single element and one of them is animated\r\n */\r\n\r\n\r\n SVGShapeElement.prototype.filterUniqueShapes = function () {\r\n var i;\r\n var len = this.shapes.length;\r\n var shape;\r\n var j;\r\n var jLen = this.stylesList.length;\r\n var style;\r\n var tempShapes = [];\r\n var areAnimated = false;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n style = this.stylesList[j];\r\n areAnimated = false;\r\n tempShapes.length = 0;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n shape = this.shapes[i];\r\n\r\n if (shape.styles.indexOf(style) !== -1) {\r\n tempShapes.push(shape);\r\n areAnimated = shape._isAnimated || areAnimated;\r\n }\r\n }\r\n\r\n if (tempShapes.length > 1 && areAnimated) {\r\n this.setShapesAsAnimated(tempShapes);\r\n }\r\n }\r\n };\r\n\r\n SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\r\n var i;\r\n var len = shapes.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n shapes[i].setAsAnimated();\r\n }\r\n };\r\n\r\n SVGShapeElement.prototype.createStyleElement = function (data, level) {\r\n // TODO: prevent drawing of hidden styles\r\n var elementData;\r\n var styleOb = new SVGStyleData(data, level);\r\n var pathElement = styleOb.pElem;\r\n\r\n if (data.ty === 'st') {\r\n elementData = new SVGStrokeStyleData(this, data, styleOb);\r\n } else if (data.ty === 'fl') {\r\n elementData = new SVGFillStyleData(this, data, styleOb);\r\n } else if (data.ty === 'gf' || data.ty === 'gs') {\r\n var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\r\n elementData = new GradientConstructor(this, data, styleOb);\r\n this.globalData.defs.appendChild(elementData.gf);\r\n\r\n if (elementData.maskId) {\r\n this.globalData.defs.appendChild(elementData.ms);\r\n this.globalData.defs.appendChild(elementData.of);\r\n pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');\r\n }\r\n } else if (data.ty === 'no') {\r\n elementData = new SVGNoStyleData(this, data, styleOb);\r\n }\r\n\r\n if (data.ty === 'st' || data.ty === 'gs') {\r\n pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\r\n pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\r\n pathElement.setAttribute('fill-opacity', '0');\r\n\r\n if (data.lj === 1) {\r\n pathElement.setAttribute('stroke-miterlimit', data.ml);\r\n }\r\n }\r\n\r\n if (data.r === 2) {\r\n pathElement.setAttribute('fill-rule', 'evenodd');\r\n }\r\n\r\n if (data.ln) {\r\n pathElement.setAttribute('id', data.ln);\r\n }\r\n\r\n if (data.cl) {\r\n pathElement.setAttribute('class', data.cl);\r\n }\r\n\r\n if (data.bm) {\r\n pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\r\n }\r\n\r\n this.stylesList.push(styleOb);\r\n this.addToAnimatedContents(data, elementData);\r\n return elementData;\r\n };\r\n\r\n SVGShapeElement.prototype.createGroupElement = function (data) {\r\n var elementData = new ShapeGroupData();\r\n\r\n if (data.ln) {\r\n elementData.gr.setAttribute('id', data.ln);\r\n }\r\n\r\n if (data.cl) {\r\n elementData.gr.setAttribute('class', data.cl);\r\n }\r\n\r\n if (data.bm) {\r\n elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\r\n }\r\n\r\n return elementData;\r\n };\r\n\r\n SVGShapeElement.prototype.createTransformElement = function (data, container) {\r\n var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\r\n var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\r\n this.addToAnimatedContents(data, elementData);\r\n return elementData;\r\n };\r\n\r\n SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\r\n var ty = 4;\r\n\r\n if (data.ty === 'rc') {\r\n ty = 5;\r\n } else if (data.ty === 'el') {\r\n ty = 6;\r\n } else if (data.ty === 'sr') {\r\n ty = 7;\r\n }\r\n\r\n var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\r\n var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\r\n this.shapes.push(elementData);\r\n this.addShapeToModifiers(elementData);\r\n this.addToAnimatedContents(data, elementData);\r\n return elementData;\r\n };\r\n\r\n SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\r\n var i = 0;\r\n var len = this.animatedContents.length;\r\n\r\n while (i < len) {\r\n if (this.animatedContents[i].element === element) {\r\n return;\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n this.animatedContents.push({\r\n fn: SVGElementsRenderer.createRenderFunction(data),\r\n element: element,\r\n data: data\r\n });\r\n };\r\n\r\n SVGShapeElement.prototype.setElementStyles = function (elementData) {\r\n var arr = elementData.styles;\r\n var j;\r\n var jLen = this.stylesList.length;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n if (!this.stylesList[j].closed) {\r\n arr.push(this.stylesList[j]);\r\n }\r\n }\r\n };\r\n\r\n SVGShapeElement.prototype.reloadShapes = function () {\r\n this._isFirstFrame = true;\r\n var i;\r\n var len = this.itemsData.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.prevViewData[i] = this.itemsData[i];\r\n }\r\n\r\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\r\n this.filterUniqueShapes();\r\n len = this.dynamicProperties.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.dynamicProperties[i].getValue();\r\n }\r\n\r\n this.renderModifiers();\r\n };\r\n\r\n SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\r\n var ownTransformers = [].concat(transformers);\r\n var i;\r\n var len = arr.length - 1;\r\n var j;\r\n var jLen;\r\n var ownStyles = [];\r\n var ownModifiers = [];\r\n var currentTransform;\r\n var modifier;\r\n var processedPos;\r\n\r\n for (i = len; i >= 0; i -= 1) {\r\n processedPos = this.searchProcessedElement(arr[i]);\r\n\r\n if (!processedPos) {\r\n arr[i]._render = render;\r\n } else {\r\n itemsData[i] = prevViewData[processedPos - 1];\r\n }\r\n\r\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {\r\n if (!processedPos) {\r\n itemsData[i] = this.createStyleElement(arr[i], level);\r\n } else {\r\n itemsData[i].style.closed = false;\r\n }\r\n\r\n if (arr[i]._render) {\r\n if (itemsData[i].style.pElem.parentNode !== container) {\r\n container.appendChild(itemsData[i].style.pElem);\r\n }\r\n }\r\n\r\n ownStyles.push(itemsData[i].style);\r\n } else if (arr[i].ty === 'gr') {\r\n if (!processedPos) {\r\n itemsData[i] = this.createGroupElement(arr[i]);\r\n } else {\r\n jLen = itemsData[i].it.length;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\r\n }\r\n }\r\n\r\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\r\n\r\n if (arr[i]._render) {\r\n if (itemsData[i].gr.parentNode !== container) {\r\n container.appendChild(itemsData[i].gr);\r\n }\r\n }\r\n } else if (arr[i].ty === 'tr') {\r\n if (!processedPos) {\r\n itemsData[i] = this.createTransformElement(arr[i], container);\r\n }\r\n\r\n currentTransform = itemsData[i].transform;\r\n ownTransformers.push(currentTransform);\r\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\r\n if (!processedPos) {\r\n itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\r\n }\r\n\r\n this.setElementStyles(itemsData[i]);\r\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb') {\r\n if (!processedPos) {\r\n modifier = ShapeModifiers.getModifier(arr[i].ty);\r\n modifier.init(this, arr[i]);\r\n itemsData[i] = modifier;\r\n this.shapeModifiers.push(modifier);\r\n } else {\r\n modifier = itemsData[i];\r\n modifier.closed = false;\r\n }\r\n\r\n ownModifiers.push(modifier);\r\n } else if (arr[i].ty === 'rp') {\r\n if (!processedPos) {\r\n modifier = ShapeModifiers.getModifier(arr[i].ty);\r\n itemsData[i] = modifier;\r\n modifier.init(this, arr, i, itemsData);\r\n this.shapeModifiers.push(modifier);\r\n render = false;\r\n } else {\r\n modifier = itemsData[i];\r\n modifier.closed = true;\r\n }\r\n\r\n ownModifiers.push(modifier);\r\n }\r\n\r\n this.addProcessedElement(arr[i], i + 1);\r\n }\r\n\r\n len = ownStyles.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n ownStyles[i].closed = true;\r\n }\r\n\r\n len = ownModifiers.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n ownModifiers[i].closed = true;\r\n }\r\n };\r\n\r\n SVGShapeElement.prototype.renderInnerContent = function () {\r\n this.renderModifiers();\r\n var i;\r\n var len = this.stylesList.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.stylesList[i].reset();\r\n }\r\n\r\n this.renderShape();\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (this.stylesList[i]._mdf || this._isFirstFrame) {\r\n if (this.stylesList[i].msElem) {\r\n this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d); // Adding M0 0 fixes same mask bug on all browsers\r\n\r\n this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\r\n }\r\n\r\n this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\r\n }\r\n }\r\n };\r\n\r\n SVGShapeElement.prototype.renderShape = function () {\r\n var i;\r\n var len = this.animatedContents.length;\r\n var animatedContent;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n animatedContent = this.animatedContents[i];\r\n\r\n if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\r\n animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\r\n }\r\n }\r\n };\r\n\r\n SVGShapeElement.prototype.destroy = function () {\r\n this.destroyBaseElement();\r\n this.shapesData = null;\r\n this.itemsData = null;\r\n };\r\n\r\n function LetterProps(o, sw, sc, fc, m, p) {\r\n this.o = o;\r\n this.sw = sw;\r\n this.sc = sc;\r\n this.fc = fc;\r\n this.m = m;\r\n this.p = p;\r\n this._mdf = {\r\n o: true,\r\n sw: !!sw,\r\n sc: !!sc,\r\n fc: !!fc,\r\n m: true,\r\n p: true\r\n };\r\n }\r\n\r\n LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\r\n this._mdf.o = false;\r\n this._mdf.sw = false;\r\n this._mdf.sc = false;\r\n this._mdf.fc = false;\r\n this._mdf.m = false;\r\n this._mdf.p = false;\r\n var updated = false;\r\n\r\n if (this.o !== o) {\r\n this.o = o;\r\n this._mdf.o = true;\r\n updated = true;\r\n }\r\n\r\n if (this.sw !== sw) {\r\n this.sw = sw;\r\n this._mdf.sw = true;\r\n updated = true;\r\n }\r\n\r\n if (this.sc !== sc) {\r\n this.sc = sc;\r\n this._mdf.sc = true;\r\n updated = true;\r\n }\r\n\r\n if (this.fc !== fc) {\r\n this.fc = fc;\r\n this._mdf.fc = true;\r\n updated = true;\r\n }\r\n\r\n if (this.m !== m) {\r\n this.m = m;\r\n this._mdf.m = true;\r\n updated = true;\r\n }\r\n\r\n if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\r\n this.p = p;\r\n this._mdf.p = true;\r\n updated = true;\r\n }\r\n\r\n return updated;\r\n };\r\n\r\n function TextProperty(elem, data) {\r\n this._frameId = initialDefaultFrame;\r\n this.pv = '';\r\n this.v = '';\r\n this.kf = false;\r\n this._isFirstFrame = true;\r\n this._mdf = false;\r\n this.data = data;\r\n this.elem = elem;\r\n this.comp = this.elem.comp;\r\n this.keysIndex = 0;\r\n this.canResize = false;\r\n this.minimumFontSize = 1;\r\n this.effectsSequence = [];\r\n this.currentData = {\r\n ascent: 0,\r\n boxWidth: this.defaultBoxWidth,\r\n f: '',\r\n fStyle: '',\r\n fWeight: '',\r\n fc: '',\r\n j: '',\r\n justifyOffset: '',\r\n l: [],\r\n lh: 0,\r\n lineWidths: [],\r\n ls: '',\r\n of: '',\r\n s: '',\r\n sc: '',\r\n sw: 0,\r\n t: 0,\r\n tr: 0,\r\n sz: 0,\r\n ps: null,\r\n fillColorAnim: false,\r\n strokeColorAnim: false,\r\n strokeWidthAnim: false,\r\n yOffset: 0,\r\n finalSize: 0,\r\n finalText: [],\r\n finalLineHeight: 0,\r\n __complete: false\r\n };\r\n this.copyData(this.currentData, this.data.d.k[0].s);\r\n\r\n if (!this.searchProperty()) {\r\n this.completeTextData(this.currentData);\r\n }\r\n }\r\n\r\n TextProperty.prototype.defaultBoxWidth = [0, 0];\r\n\r\n TextProperty.prototype.copyData = function (obj, data) {\r\n for (var s in data) {\r\n if (Object.prototype.hasOwnProperty.call(data, s)) {\r\n obj[s] = data[s];\r\n }\r\n }\r\n\r\n return obj;\r\n };\r\n\r\n TextProperty.prototype.setCurrentData = function (data) {\r\n if (!data.__complete) {\r\n this.completeTextData(data);\r\n }\r\n\r\n this.currentData = data;\r\n this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\r\n this._mdf = true;\r\n };\r\n\r\n TextProperty.prototype.searchProperty = function () {\r\n return this.searchKeyframes();\r\n };\r\n\r\n TextProperty.prototype.searchKeyframes = function () {\r\n this.kf = this.data.d.k.length > 1;\r\n\r\n if (this.kf) {\r\n this.addEffect(this.getKeyframeValue.bind(this));\r\n }\r\n\r\n return this.kf;\r\n };\r\n\r\n TextProperty.prototype.addEffect = function (effectFunction) {\r\n this.effectsSequence.push(effectFunction);\r\n this.elem.addDynamicProperty(this);\r\n };\r\n\r\n TextProperty.prototype.getValue = function (_finalValue) {\r\n if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\r\n return;\r\n }\r\n\r\n this.currentData.t = this.data.d.k[this.keysIndex].s.t;\r\n var currentValue = this.currentData;\r\n var currentIndex = this.keysIndex;\r\n\r\n if (this.lock) {\r\n this.setCurrentData(this.currentData);\r\n return;\r\n }\r\n\r\n this.lock = true;\r\n this._mdf = false;\r\n var i;\r\n var len = this.effectsSequence.length;\r\n var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n // Checking if index changed to prevent creating a new object every time the expression updates.\r\n if (currentIndex !== this.keysIndex) {\r\n finalValue = this.effectsSequence[i](finalValue, finalValue.t);\r\n } else {\r\n finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\r\n }\r\n }\r\n\r\n if (currentValue !== finalValue) {\r\n this.setCurrentData(finalValue);\r\n }\r\n\r\n this.v = this.currentData;\r\n this.pv = this.v;\r\n this.lock = false;\r\n this.frameId = this.elem.globalData.frameId;\r\n };\r\n\r\n TextProperty.prototype.getKeyframeValue = function () {\r\n var textKeys = this.data.d.k;\r\n var frameNum = this.elem.comp.renderedFrame;\r\n var i = 0;\r\n var len = textKeys.length;\r\n\r\n while (i <= len - 1) {\r\n if (i === len - 1 || textKeys[i + 1].t > frameNum) {\r\n break;\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n if (this.keysIndex !== i) {\r\n this.keysIndex = i;\r\n }\r\n\r\n return this.data.d.k[this.keysIndex].s;\r\n };\r\n\r\n TextProperty.prototype.buildFinalText = function (text) {\r\n var charactersArray = [];\r\n var i = 0;\r\n var len = text.length;\r\n var charCode;\r\n var secondCharCode;\r\n var shouldCombine = false;\r\n\r\n while (i < len) {\r\n charCode = text.charCodeAt(i);\r\n\r\n if (FontManager.isCombinedCharacter(charCode)) {\r\n charactersArray[charactersArray.length - 1] += text.charAt(i);\r\n } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\r\n secondCharCode = text.charCodeAt(i + 1);\r\n\r\n if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\r\n if (shouldCombine || FontManager.isModifier(charCode, secondCharCode)) {\r\n charactersArray[charactersArray.length - 1] += text.substr(i, 2);\r\n shouldCombine = false;\r\n } else {\r\n charactersArray.push(text.substr(i, 2));\r\n }\r\n\r\n i += 1;\r\n } else {\r\n charactersArray.push(text.charAt(i));\r\n }\r\n } else if (charCode > 0xDBFF) {\r\n secondCharCode = text.charCodeAt(i + 1);\r\n\r\n if (FontManager.isZeroWidthJoiner(charCode, secondCharCode)) {\r\n shouldCombine = true;\r\n charactersArray[charactersArray.length - 1] += text.substr(i, 2);\r\n i += 1;\r\n } else {\r\n charactersArray.push(text.charAt(i));\r\n }\r\n } else if (FontManager.isZeroWidthJoiner(charCode)) {\r\n charactersArray[charactersArray.length - 1] += text.charAt(i);\r\n shouldCombine = true;\r\n } else {\r\n charactersArray.push(text.charAt(i));\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n return charactersArray;\r\n };\r\n\r\n TextProperty.prototype.completeTextData = function (documentData) {\r\n documentData.__complete = true;\r\n var fontManager = this.elem.globalData.fontManager;\r\n var data = this.data;\r\n var letters = [];\r\n var i;\r\n var len;\r\n var newLineFlag;\r\n var index = 0;\r\n var val;\r\n var anchorGrouping = data.m.g;\r\n var currentSize = 0;\r\n var currentPos = 0;\r\n var currentLine = 0;\r\n var lineWidths = [];\r\n var lineWidth = 0;\r\n var maxLineWidth = 0;\r\n var j;\r\n var jLen;\r\n var fontData = fontManager.getFontByName(documentData.f);\r\n var charData;\r\n var cLength = 0;\r\n var fontProps = getFontProperties(fontData);\r\n documentData.fWeight = fontProps.weight;\r\n documentData.fStyle = fontProps.style;\r\n documentData.finalSize = documentData.s;\r\n documentData.finalText = this.buildFinalText(documentData.t);\r\n len = documentData.finalText.length;\r\n documentData.finalLineHeight = documentData.lh;\r\n var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\r\n var charCode;\r\n\r\n if (documentData.sz) {\r\n var flag = true;\r\n var boxWidth = documentData.sz[0];\r\n var boxHeight = documentData.sz[1];\r\n var currentHeight;\r\n var finalText;\r\n\r\n while (flag) {\r\n finalText = this.buildFinalText(documentData.t);\r\n currentHeight = 0;\r\n lineWidth = 0;\r\n len = finalText.length;\r\n trackingOffset = documentData.tr / 1000 * documentData.finalSize;\r\n var lastSpaceIndex = -1;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n charCode = finalText[i].charCodeAt(0);\r\n newLineFlag = false;\r\n\r\n if (finalText[i] === ' ') {\r\n lastSpaceIndex = i;\r\n } else if (charCode === 13 || charCode === 3) {\r\n lineWidth = 0;\r\n newLineFlag = true;\r\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\r\n }\r\n\r\n if (fontManager.chars) {\r\n charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\r\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\r\n } else {\r\n // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\r\n cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\r\n }\r\n\r\n if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\r\n if (lastSpaceIndex === -1) {\r\n len += 1;\r\n } else {\r\n i = lastSpaceIndex;\r\n }\r\n\r\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\r\n finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r'); // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\r\n\r\n lastSpaceIndex = -1;\r\n lineWidth = 0;\r\n } else {\r\n lineWidth += cLength;\r\n lineWidth += trackingOffset;\r\n }\r\n }\r\n\r\n currentHeight += fontData.ascent * documentData.finalSize / 100;\r\n\r\n if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\r\n documentData.finalSize -= 1;\r\n documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\r\n } else {\r\n documentData.finalText = finalText;\r\n len = documentData.finalText.length;\r\n flag = false;\r\n }\r\n }\r\n }\r\n\r\n lineWidth = -trackingOffset;\r\n cLength = 0;\r\n var uncollapsedSpaces = 0;\r\n var currentChar;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n newLineFlag = false;\r\n currentChar = documentData.finalText[i];\r\n charCode = currentChar.charCodeAt(0);\r\n\r\n if (charCode === 13 || charCode === 3) {\r\n uncollapsedSpaces = 0;\r\n lineWidths.push(lineWidth);\r\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\r\n lineWidth = -2 * trackingOffset;\r\n val = '';\r\n newLineFlag = true;\r\n currentLine += 1;\r\n } else {\r\n val = currentChar;\r\n }\r\n\r\n if (fontManager.chars) {\r\n charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\r\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\r\n } else {\r\n // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\r\n // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\r\n cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\r\n } //\r\n\r\n\r\n if (currentChar === ' ') {\r\n uncollapsedSpaces += cLength + trackingOffset;\r\n } else {\r\n lineWidth += cLength + trackingOffset + uncollapsedSpaces;\r\n uncollapsedSpaces = 0;\r\n }\r\n\r\n letters.push({\r\n l: cLength,\r\n an: cLength,\r\n add: currentSize,\r\n n: newLineFlag,\r\n anIndexes: [],\r\n val: val,\r\n line: currentLine,\r\n animatorJustifyOffset: 0\r\n });\r\n\r\n if (anchorGrouping == 2) {\r\n // eslint-disable-line eqeqeq\r\n currentSize += cLength;\r\n\r\n if (val === '' || val === ' ' || i === len - 1) {\r\n if (val === '' || val === ' ') {\r\n currentSize -= cLength;\r\n }\r\n\r\n while (currentPos <= i) {\r\n letters[currentPos].an = currentSize;\r\n letters[currentPos].ind = index;\r\n letters[currentPos].extra = cLength;\r\n currentPos += 1;\r\n }\r\n\r\n index += 1;\r\n currentSize = 0;\r\n }\r\n } else if (anchorGrouping == 3) {\r\n // eslint-disable-line eqeqeq\r\n currentSize += cLength;\r\n\r\n if (val === '' || i === len - 1) {\r\n if (val === '') {\r\n currentSize -= cLength;\r\n }\r\n\r\n while (currentPos <= i) {\r\n letters[currentPos].an = currentSize;\r\n letters[currentPos].ind = index;\r\n letters[currentPos].extra = cLength;\r\n currentPos += 1;\r\n }\r\n\r\n currentSize = 0;\r\n index += 1;\r\n }\r\n } else {\r\n letters[index].ind = index;\r\n letters[index].extra = 0;\r\n index += 1;\r\n }\r\n }\r\n\r\n documentData.l = letters;\r\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\r\n lineWidths.push(lineWidth);\r\n\r\n if (documentData.sz) {\r\n documentData.boxWidth = documentData.sz[0];\r\n documentData.justifyOffset = 0;\r\n } else {\r\n documentData.boxWidth = maxLineWidth;\r\n\r\n switch (documentData.j) {\r\n case 1:\r\n documentData.justifyOffset = -documentData.boxWidth;\r\n break;\r\n\r\n case 2:\r\n documentData.justifyOffset = -documentData.boxWidth / 2;\r\n break;\r\n\r\n default:\r\n documentData.justifyOffset = 0;\r\n }\r\n }\r\n\r\n documentData.lineWidths = lineWidths;\r\n var animators = data.a;\r\n var animatorData;\r\n var letterData;\r\n jLen = animators.length;\r\n var based;\r\n var ind;\r\n var indexes = [];\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n animatorData = animators[j];\r\n\r\n if (animatorData.a.sc) {\r\n documentData.strokeColorAnim = true;\r\n }\r\n\r\n if (animatorData.a.sw) {\r\n documentData.strokeWidthAnim = true;\r\n }\r\n\r\n if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\r\n documentData.fillColorAnim = true;\r\n }\r\n\r\n ind = 0;\r\n based = animatorData.s.b;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n letterData = letters[i];\r\n letterData.anIndexes[j] = ind;\r\n\r\n if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\r\n // eslint-disable-line eqeqeq\r\n if (animatorData.s.rn === 1) {\r\n indexes.push(ind);\r\n }\r\n\r\n ind += 1;\r\n }\r\n }\r\n\r\n data.a[j].s.totalChars = ind;\r\n var currentInd = -1;\r\n var newInd;\r\n\r\n if (animatorData.s.rn === 1) {\r\n for (i = 0; i < len; i += 1) {\r\n letterData = letters[i];\r\n\r\n if (currentInd != letterData.anIndexes[j]) {\r\n // eslint-disable-line eqeqeq\r\n currentInd = letterData.anIndexes[j];\r\n newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\r\n }\r\n\r\n letterData.anIndexes[j] = newInd;\r\n }\r\n }\r\n }\r\n\r\n documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\r\n documentData.ls = documentData.ls || 0;\r\n documentData.ascent = fontData.ascent * documentData.finalSize / 100;\r\n };\r\n\r\n TextProperty.prototype.updateDocumentData = function (newData, index) {\r\n index = index === undefined ? this.keysIndex : index;\r\n var dData = this.copyData({}, this.data.d.k[index].s);\r\n dData = this.copyData(dData, newData);\r\n this.data.d.k[index].s = dData;\r\n this.recalculate(index);\r\n this.elem.addDynamicProperty(this);\r\n };\r\n\r\n TextProperty.prototype.recalculate = function (index) {\r\n var dData = this.data.d.k[index].s;\r\n dData.__complete = false;\r\n this.keysIndex = 0;\r\n this._isFirstFrame = true;\r\n this.getValue(dData);\r\n };\r\n\r\n TextProperty.prototype.canResizeFont = function (_canResize) {\r\n this.canResize = _canResize;\r\n this.recalculate(this.keysIndex);\r\n this.elem.addDynamicProperty(this);\r\n };\r\n\r\n TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\r\n this.minimumFontSize = Math.floor(_fontValue) || 1;\r\n this.recalculate(this.keysIndex);\r\n this.elem.addDynamicProperty(this);\r\n };\r\n\r\n var TextSelectorProp = function () {\r\n var max = Math.max;\r\n var min = Math.min;\r\n var floor = Math.floor;\r\n\r\n function TextSelectorPropFactory(elem, data) {\r\n this._currentTextLength = -1;\r\n this.k = false;\r\n this.data = data;\r\n this.elem = elem;\r\n this.comp = elem.comp;\r\n this.finalS = 0;\r\n this.finalE = 0;\r\n this.initDynamicPropertyContainer(elem);\r\n this.s = PropertyFactory.getProp(elem, data.s || {\r\n k: 0\r\n }, 0, 0, this);\r\n\r\n if ('e' in data) {\r\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\r\n } else {\r\n this.e = {\r\n v: 100\r\n };\r\n }\r\n\r\n this.o = PropertyFactory.getProp(elem, data.o || {\r\n k: 0\r\n }, 0, 0, this);\r\n this.xe = PropertyFactory.getProp(elem, data.xe || {\r\n k: 0\r\n }, 0, 0, this);\r\n this.ne = PropertyFactory.getProp(elem, data.ne || {\r\n k: 0\r\n }, 0, 0, this);\r\n this.sm = PropertyFactory.getProp(elem, data.sm || {\r\n k: 100\r\n }, 0, 0, this);\r\n this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\r\n\r\n if (!this.dynamicProperties.length) {\r\n this.getValue();\r\n }\r\n }\r\n\r\n TextSelectorPropFactory.prototype = {\r\n getMult: function getMult(ind) {\r\n if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\r\n this.getValue();\r\n }\r\n\r\n var x1 = 0;\r\n var y1 = 0;\r\n var x2 = 1;\r\n var y2 = 1;\r\n\r\n if (this.ne.v > 0) {\r\n x1 = this.ne.v / 100.0;\r\n } else {\r\n y1 = -this.ne.v / 100.0;\r\n }\r\n\r\n if (this.xe.v > 0) {\r\n x2 = 1.0 - this.xe.v / 100.0;\r\n } else {\r\n y2 = 1.0 + this.xe.v / 100.0;\r\n }\r\n\r\n var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\r\n var mult = 0;\r\n var s = this.finalS;\r\n var e = this.finalE;\r\n var type = this.data.sh;\r\n\r\n if (type === 2) {\r\n if (e === s) {\r\n mult = ind >= e ? 1 : 0;\r\n } else {\r\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\r\n }\r\n\r\n mult = easer(mult);\r\n } else if (type === 3) {\r\n if (e === s) {\r\n mult = ind >= e ? 0 : 1;\r\n } else {\r\n mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\r\n }\r\n\r\n mult = easer(mult);\r\n } else if (type === 4) {\r\n if (e === s) {\r\n mult = 0;\r\n } else {\r\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\r\n\r\n if (mult < 0.5) {\r\n mult *= 2;\r\n } else {\r\n mult = 1 - 2 * (mult - 0.5);\r\n }\r\n }\r\n\r\n mult = easer(mult);\r\n } else if (type === 5) {\r\n if (e === s) {\r\n mult = 0;\r\n } else {\r\n var tot = e - s;\r\n /* ind += 0.5;\r\n mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\r\n\r\n ind = min(max(0, ind + 0.5 - s), e - s);\r\n var x = -tot / 2 + ind;\r\n var a = tot / 2;\r\n mult = Math.sqrt(1 - x * x / (a * a));\r\n }\r\n\r\n mult = easer(mult);\r\n } else if (type === 6) {\r\n if (e === s) {\r\n mult = 0;\r\n } else {\r\n ind = min(max(0, ind + 0.5 - s), e - s);\r\n mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line\r\n }\r\n\r\n mult = easer(mult);\r\n } else {\r\n if (ind >= floor(s)) {\r\n if (ind - s < 0) {\r\n mult = max(0, min(min(e, 1) - (s - ind), 1));\r\n } else {\r\n mult = max(0, min(e - ind, 1));\r\n }\r\n }\r\n\r\n mult = easer(mult);\r\n } // Smoothness implementation.\r\n // The smoothness represents a reduced range of the original [0; 1] range.\r\n // if smoothness is 25%, the new range will be [0.375; 0.625]\r\n // Steps are:\r\n // - find the lower value of the new range (threshold)\r\n // - if multiplier is smaller than that value, floor it to 0\r\n // - if it is larger,\r\n // - subtract the threshold\r\n // - divide it by the smoothness (this will return the range to [0; 1])\r\n // Note: If it doesn't work on some scenarios, consider applying it before the easer.\r\n\r\n\r\n if (this.sm.v !== 100) {\r\n var smoothness = this.sm.v * 0.01;\r\n\r\n if (smoothness === 0) {\r\n smoothness = 0.00000001;\r\n }\r\n\r\n var threshold = 0.5 - smoothness * 0.5;\r\n\r\n if (mult < threshold) {\r\n mult = 0;\r\n } else {\r\n mult = (mult - threshold) / smoothness;\r\n\r\n if (mult > 1) {\r\n mult = 1;\r\n }\r\n }\r\n }\r\n\r\n return mult * this.a.v;\r\n },\r\n getValue: function getValue(newCharsFlag) {\r\n this.iterateDynamicProperties();\r\n this._mdf = newCharsFlag || this._mdf;\r\n this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\r\n\r\n if (newCharsFlag && this.data.r === 2) {\r\n this.e.v = this._currentTextLength;\r\n }\r\n\r\n var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\r\n var o = this.o.v / divisor;\r\n var s = this.s.v / divisor + o;\r\n var e = this.e.v / divisor + o;\r\n\r\n if (s > e) {\r\n var _s = s;\r\n s = e;\r\n e = _s;\r\n }\r\n\r\n this.finalS = s;\r\n this.finalE = e;\r\n }\r\n };\r\n extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\r\n\r\n function getTextSelectorProp(elem, data, arr) {\r\n return new TextSelectorPropFactory(elem, data, arr);\r\n }\r\n\r\n return {\r\n getTextSelectorProp: getTextSelectorProp\r\n };\r\n }();\r\n\r\n function TextAnimatorDataProperty(elem, animatorProps, container) {\r\n var defaultData = {\r\n propType: false\r\n };\r\n var getProp = PropertyFactory.getProp;\r\n var textAnimatorAnimatables = animatorProps.a;\r\n this.a = {\r\n r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\r\n rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\r\n ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\r\n sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\r\n sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\r\n s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\r\n a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\r\n o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\r\n p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\r\n sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\r\n sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\r\n fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\r\n fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\r\n fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\r\n fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\r\n t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData\r\n };\r\n this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\r\n this.s.t = animatorProps.s.t;\r\n }\r\n\r\n function TextAnimatorProperty(textData, renderType, elem) {\r\n this._isFirstFrame = true;\r\n this._hasMaskedPath = false;\r\n this._frameId = -1;\r\n this._textData = textData;\r\n this._renderType = renderType;\r\n this._elem = elem;\r\n this._animatorsData = createSizedArray(this._textData.a.length);\r\n this._pathData = {};\r\n this._moreOptions = {\r\n alignment: {}\r\n };\r\n this.renderedLetters = [];\r\n this.lettersChangedFlag = false;\r\n this.initDynamicPropertyContainer(elem);\r\n }\r\n\r\n TextAnimatorProperty.prototype.searchProperties = function () {\r\n var i;\r\n var len = this._textData.a.length;\r\n var animatorProps;\r\n var getProp = PropertyFactory.getProp;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n animatorProps = this._textData.a[i];\r\n this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\r\n }\r\n\r\n if (this._textData.p && 'm' in this._textData.p) {\r\n this._pathData = {\r\n a: getProp(this._elem, this._textData.p.a, 0, 0, this),\r\n f: getProp(this._elem, this._textData.p.f, 0, 0, this),\r\n l: getProp(this._elem, this._textData.p.l, 0, 0, this),\r\n r: getProp(this._elem, this._textData.p.r, 0, 0, this),\r\n p: getProp(this._elem, this._textData.p.p, 0, 0, this),\r\n m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\r\n };\r\n this._hasMaskedPath = true;\r\n } else {\r\n this._hasMaskedPath = false;\r\n }\r\n\r\n this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\r\n };\r\n\r\n TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\r\n this.lettersChangedFlag = lettersChangedFlag;\r\n\r\n if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\r\n return;\r\n }\r\n\r\n this._isFirstFrame = false;\r\n var alignment = this._moreOptions.alignment.v;\r\n var animators = this._animatorsData;\r\n var textData = this._textData;\r\n var matrixHelper = this.mHelper;\r\n var renderType = this._renderType;\r\n var renderedLettersCount = this.renderedLetters.length;\r\n var xPos;\r\n var yPos;\r\n var i;\r\n var len;\r\n var letters = documentData.l;\r\n var pathInfo;\r\n var currentLength;\r\n var currentPoint;\r\n var segmentLength;\r\n var flag;\r\n var pointInd;\r\n var segmentInd;\r\n var prevPoint;\r\n var points;\r\n var segments;\r\n var partialLength;\r\n var totalLength;\r\n var perc;\r\n var tanAngle;\r\n var mask;\r\n\r\n if (this._hasMaskedPath) {\r\n mask = this._pathData.m;\r\n\r\n if (!this._pathData.n || this._pathData._mdf) {\r\n var paths = mask.v;\r\n\r\n if (this._pathData.r.v) {\r\n paths = paths.reverse();\r\n } // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\r\n\r\n\r\n pathInfo = {\r\n tLength: 0,\r\n segments: []\r\n };\r\n len = paths._length - 1;\r\n var bezierData;\r\n totalLength = 0;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\r\n pathInfo.tLength += bezierData.segmentLength;\r\n pathInfo.segments.push(bezierData);\r\n totalLength += bezierData.segmentLength;\r\n }\r\n\r\n i = len;\r\n\r\n if (mask.v.c) {\r\n bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\r\n pathInfo.tLength += bezierData.segmentLength;\r\n pathInfo.segments.push(bezierData);\r\n totalLength += bezierData.segmentLength;\r\n }\r\n\r\n this._pathData.pi = pathInfo;\r\n }\r\n\r\n pathInfo = this._pathData.pi;\r\n currentLength = this._pathData.f.v;\r\n segmentInd = 0;\r\n pointInd = 1;\r\n segmentLength = 0;\r\n flag = true;\r\n segments = pathInfo.segments;\r\n\r\n if (currentLength < 0 && mask.v.c) {\r\n if (pathInfo.tLength < Math.abs(currentLength)) {\r\n currentLength = -Math.abs(currentLength) % pathInfo.tLength;\r\n }\r\n\r\n segmentInd = segments.length - 1;\r\n points = segments[segmentInd].points;\r\n pointInd = points.length - 1;\r\n\r\n while (currentLength < 0) {\r\n currentLength += points[pointInd].partialLength;\r\n pointInd -= 1;\r\n\r\n if (pointInd < 0) {\r\n segmentInd -= 1;\r\n points = segments[segmentInd].points;\r\n pointInd = points.length - 1;\r\n }\r\n }\r\n }\r\n\r\n points = segments[segmentInd].points;\r\n prevPoint = points[pointInd - 1];\r\n currentPoint = points[pointInd];\r\n partialLength = currentPoint.partialLength;\r\n }\r\n\r\n len = letters.length;\r\n xPos = 0;\r\n yPos = 0;\r\n var yOff = documentData.finalSize * 1.2 * 0.714;\r\n var firstLine = true;\r\n var animatorProps;\r\n var animatorSelector;\r\n var j;\r\n var jLen;\r\n var letterValue;\r\n jLen = animators.length;\r\n var mult;\r\n var ind = -1;\r\n var offf;\r\n var xPathPos;\r\n var yPathPos;\r\n var initPathPos = currentLength;\r\n var initSegmentInd = segmentInd;\r\n var initPointInd = pointInd;\r\n var currentLine = -1;\r\n var elemOpacity;\r\n var sc;\r\n var sw;\r\n var fc;\r\n var k;\r\n var letterSw;\r\n var letterSc;\r\n var letterFc;\r\n var letterM = '';\r\n var letterP = this.defaultPropsArray;\r\n var letterO; //\r\n\r\n if (documentData.j === 2 || documentData.j === 1) {\r\n var animatorJustifyOffset = 0;\r\n var animatorFirstCharOffset = 0;\r\n var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\r\n var lastIndex = 0;\r\n var isNewLine = true;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (letters[i].n) {\r\n if (animatorJustifyOffset) {\r\n animatorJustifyOffset += animatorFirstCharOffset;\r\n }\r\n\r\n while (lastIndex < i) {\r\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\r\n lastIndex += 1;\r\n }\r\n\r\n animatorJustifyOffset = 0;\r\n isNewLine = true;\r\n } else {\r\n for (j = 0; j < jLen; j += 1) {\r\n animatorProps = animators[j].a;\r\n\r\n if (animatorProps.t.propType) {\r\n if (isNewLine && documentData.j === 2) {\r\n animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\r\n }\r\n\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n\r\n if (mult.length) {\r\n animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\r\n } else {\r\n animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\r\n }\r\n }\r\n }\r\n\r\n isNewLine = false;\r\n }\r\n }\r\n\r\n if (animatorJustifyOffset) {\r\n animatorJustifyOffset += animatorFirstCharOffset;\r\n }\r\n\r\n while (lastIndex < i) {\r\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\r\n lastIndex += 1;\r\n }\r\n } //\r\n\r\n\r\n for (i = 0; i < len; i += 1) {\r\n matrixHelper.reset();\r\n elemOpacity = 1;\r\n\r\n if (letters[i].n) {\r\n xPos = 0;\r\n yPos += documentData.yOffset;\r\n yPos += firstLine ? 1 : 0;\r\n currentLength = initPathPos;\r\n firstLine = false;\r\n\r\n if (this._hasMaskedPath) {\r\n segmentInd = initSegmentInd;\r\n pointInd = initPointInd;\r\n points = segments[segmentInd].points;\r\n prevPoint = points[pointInd - 1];\r\n currentPoint = points[pointInd];\r\n partialLength = currentPoint.partialLength;\r\n segmentLength = 0;\r\n }\r\n\r\n letterM = '';\r\n letterFc = '';\r\n letterSw = '';\r\n letterO = '';\r\n letterP = this.defaultPropsArray;\r\n } else {\r\n if (this._hasMaskedPath) {\r\n if (currentLine !== letters[i].line) {\r\n switch (documentData.j) {\r\n case 1:\r\n currentLength += totalLength - documentData.lineWidths[letters[i].line];\r\n break;\r\n\r\n case 2:\r\n currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n\r\n currentLine = letters[i].line;\r\n }\r\n\r\n if (ind !== letters[i].ind) {\r\n if (letters[ind]) {\r\n currentLength += letters[ind].extra;\r\n }\r\n\r\n currentLength += letters[i].an / 2;\r\n ind = letters[i].ind;\r\n }\r\n\r\n currentLength += alignment[0] * letters[i].an * 0.005;\r\n var animatorOffset = 0;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n animatorProps = animators[j].a;\r\n\r\n if (animatorProps.p.propType) {\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n\r\n if (mult.length) {\r\n animatorOffset += animatorProps.p.v[0] * mult[0];\r\n } else {\r\n animatorOffset += animatorProps.p.v[0] * mult;\r\n }\r\n }\r\n\r\n if (animatorProps.a.propType) {\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n\r\n if (mult.length) {\r\n animatorOffset += animatorProps.a.v[0] * mult[0];\r\n } else {\r\n animatorOffset += animatorProps.a.v[0] * mult;\r\n }\r\n }\r\n }\r\n\r\n flag = true; // Force alignment only works with a single line for now\r\n\r\n if (this._pathData.a.v) {\r\n currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1);\r\n currentLength += this._pathData.f.v;\r\n }\r\n\r\n while (flag) {\r\n if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\r\n perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\r\n xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\r\n yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\r\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01);\r\n flag = false;\r\n } else if (points) {\r\n segmentLength += currentPoint.partialLength;\r\n pointInd += 1;\r\n\r\n if (pointInd >= points.length) {\r\n pointInd = 0;\r\n segmentInd += 1;\r\n\r\n if (!segments[segmentInd]) {\r\n if (mask.v.c) {\r\n pointInd = 0;\r\n segmentInd = 0;\r\n points = segments[segmentInd].points;\r\n } else {\r\n segmentLength -= currentPoint.partialLength;\r\n points = null;\r\n }\r\n } else {\r\n points = segments[segmentInd].points;\r\n }\r\n }\r\n\r\n if (points) {\r\n prevPoint = currentPoint;\r\n currentPoint = points[pointInd];\r\n partialLength = currentPoint.partialLength;\r\n }\r\n }\r\n }\r\n\r\n offf = letters[i].an / 2 - letters[i].add;\r\n matrixHelper.translate(-offf, 0, 0);\r\n } else {\r\n offf = letters[i].an / 2 - letters[i].add;\r\n matrixHelper.translate(-offf, 0, 0); // Grouping alignment\r\n\r\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\r\n }\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n animatorProps = animators[j].a;\r\n\r\n if (animatorProps.t.propType) {\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\r\n\r\n if (xPos !== 0 || documentData.j !== 0) {\r\n if (this._hasMaskedPath) {\r\n if (mult.length) {\r\n currentLength += animatorProps.t.v * mult[0];\r\n } else {\r\n currentLength += animatorProps.t.v * mult;\r\n }\r\n } else if (mult.length) {\r\n xPos += animatorProps.t.v * mult[0];\r\n } else {\r\n xPos += animatorProps.t.v * mult;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (documentData.strokeWidthAnim) {\r\n sw = documentData.sw || 0;\r\n }\r\n\r\n if (documentData.strokeColorAnim) {\r\n if (documentData.sc) {\r\n sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\r\n } else {\r\n sc = [0, 0, 0];\r\n }\r\n }\r\n\r\n if (documentData.fillColorAnim && documentData.fc) {\r\n fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\r\n }\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n animatorProps = animators[j].a;\r\n\r\n if (animatorProps.a.propType) {\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n\r\n if (mult.length) {\r\n matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\r\n } else {\r\n matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\r\n }\r\n }\r\n }\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n animatorProps = animators[j].a;\r\n\r\n if (animatorProps.s.propType) {\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n\r\n if (mult.length) {\r\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\r\n } else {\r\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\r\n }\r\n }\r\n }\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n animatorProps = animators[j].a;\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n\r\n if (animatorProps.sk.propType) {\r\n if (mult.length) {\r\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\r\n } else {\r\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\r\n }\r\n }\r\n\r\n if (animatorProps.r.propType) {\r\n if (mult.length) {\r\n matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\r\n } else {\r\n matrixHelper.rotateZ(-animatorProps.r.v * mult);\r\n }\r\n }\r\n\r\n if (animatorProps.ry.propType) {\r\n if (mult.length) {\r\n matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\r\n } else {\r\n matrixHelper.rotateY(animatorProps.ry.v * mult);\r\n }\r\n }\r\n\r\n if (animatorProps.rx.propType) {\r\n if (mult.length) {\r\n matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\r\n } else {\r\n matrixHelper.rotateX(animatorProps.rx.v * mult);\r\n }\r\n }\r\n\r\n if (animatorProps.o.propType) {\r\n if (mult.length) {\r\n elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\r\n } else {\r\n elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\r\n }\r\n }\r\n\r\n if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\r\n if (mult.length) {\r\n sw += animatorProps.sw.v * mult[0];\r\n } else {\r\n sw += animatorProps.sw.v * mult;\r\n }\r\n }\r\n\r\n if (documentData.strokeColorAnim && animatorProps.sc.propType) {\r\n for (k = 0; k < 3; k += 1) {\r\n if (mult.length) {\r\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\r\n } else {\r\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\r\n }\r\n }\r\n }\r\n\r\n if (documentData.fillColorAnim && documentData.fc) {\r\n if (animatorProps.fc.propType) {\r\n for (k = 0; k < 3; k += 1) {\r\n if (mult.length) {\r\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\r\n } else {\r\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\r\n }\r\n }\r\n }\r\n\r\n if (animatorProps.fh.propType) {\r\n if (mult.length) {\r\n fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\r\n } else {\r\n fc = addHueToRGB(fc, animatorProps.fh.v * mult);\r\n }\r\n }\r\n\r\n if (animatorProps.fs.propType) {\r\n if (mult.length) {\r\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\r\n } else {\r\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\r\n }\r\n }\r\n\r\n if (animatorProps.fb.propType) {\r\n if (mult.length) {\r\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\r\n } else {\r\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n animatorProps = animators[j].a;\r\n\r\n if (animatorProps.p.propType) {\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n\r\n if (this._hasMaskedPath) {\r\n if (mult.length) {\r\n matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\r\n } else {\r\n matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\r\n }\r\n } else if (mult.length) {\r\n matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\r\n } else {\r\n matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\r\n }\r\n }\r\n }\r\n\r\n if (documentData.strokeWidthAnim) {\r\n letterSw = sw < 0 ? 0 : sw;\r\n }\r\n\r\n if (documentData.strokeColorAnim) {\r\n letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\r\n }\r\n\r\n if (documentData.fillColorAnim && documentData.fc) {\r\n letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\r\n }\r\n\r\n if (this._hasMaskedPath) {\r\n matrixHelper.translate(0, -documentData.ls);\r\n matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\r\n\r\n if (this._pathData.p.v) {\r\n tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\r\n var rot = Math.atan(tanAngle) * 180 / Math.PI;\r\n\r\n if (currentPoint.point[0] < prevPoint.point[0]) {\r\n rot += 180;\r\n }\r\n\r\n matrixHelper.rotate(-rot * Math.PI / 180);\r\n }\r\n\r\n matrixHelper.translate(xPathPos, yPathPos, 0);\r\n currentLength -= alignment[0] * letters[i].an * 0.005;\r\n\r\n if (letters[i + 1] && ind !== letters[i + 1].ind) {\r\n currentLength += letters[i].an / 2;\r\n currentLength += documentData.tr * 0.001 * documentData.finalSize;\r\n }\r\n } else {\r\n matrixHelper.translate(xPos, yPos, 0);\r\n\r\n if (documentData.ps) {\r\n // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\r\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\r\n }\r\n\r\n switch (documentData.j) {\r\n case 1:\r\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\r\n break;\r\n\r\n case 2:\r\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n\r\n matrixHelper.translate(0, -documentData.ls);\r\n matrixHelper.translate(offf, 0, 0);\r\n matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0);\r\n xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize;\r\n }\r\n\r\n if (renderType === 'html') {\r\n letterM = matrixHelper.toCSS();\r\n } else if (renderType === 'svg') {\r\n letterM = matrixHelper.to2dCSS();\r\n } else {\r\n letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\r\n }\r\n\r\n letterO = elemOpacity;\r\n }\r\n\r\n if (renderedLettersCount <= i) {\r\n letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\r\n this.renderedLetters.push(letterValue);\r\n renderedLettersCount += 1;\r\n this.lettersChangedFlag = true;\r\n } else {\r\n letterValue = this.renderedLetters[i];\r\n this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\r\n }\r\n }\r\n };\r\n\r\n TextAnimatorProperty.prototype.getValue = function () {\r\n if (this._elem.globalData.frameId === this._frameId) {\r\n return;\r\n }\r\n\r\n this._frameId = this._elem.globalData.frameId;\r\n this.iterateDynamicProperties();\r\n };\r\n\r\n TextAnimatorProperty.prototype.mHelper = new Matrix();\r\n TextAnimatorProperty.prototype.defaultPropsArray = [];\r\n extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\r\n\r\n function ITextElement() {}\r\n\r\n ITextElement.prototype.initElement = function (data, globalData, comp) {\r\n this.lettersChangedFlag = true;\r\n this.initFrame();\r\n this.initBaseData(data, globalData, comp);\r\n this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\r\n this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\r\n this.initTransform(data, globalData, comp);\r\n this.initHierarchy();\r\n this.initRenderable();\r\n this.initRendererElement();\r\n this.createContainerElements();\r\n this.createRenderableComponents();\r\n this.createContent();\r\n this.hide();\r\n this.textAnimator.searchProperties(this.dynamicProperties);\r\n };\r\n\r\n ITextElement.prototype.prepareFrame = function (num) {\r\n this._mdf = false;\r\n this.prepareRenderableFrame(num);\r\n this.prepareProperties(num, this.isInRange);\r\n\r\n if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\r\n this.buildNewText();\r\n this.textProperty._isFirstFrame = false;\r\n this.textProperty._mdf = false;\r\n }\r\n };\r\n\r\n ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\r\n var j;\r\n var jLen = shapes.length;\r\n var pathNodes;\r\n var shapeStr = '';\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n if (shapes[j].ty === 'sh') {\r\n pathNodes = shapes[j].ks.k;\r\n shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\r\n }\r\n }\r\n\r\n return shapeStr;\r\n };\r\n\r\n ITextElement.prototype.updateDocumentData = function (newData, index) {\r\n this.textProperty.updateDocumentData(newData, index);\r\n };\r\n\r\n ITextElement.prototype.canResizeFont = function (_canResize) {\r\n this.textProperty.canResizeFont(_canResize);\r\n };\r\n\r\n ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\r\n this.textProperty.setMinimumFontSize(_fontSize);\r\n };\r\n\r\n ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\r\n if (documentData.ps) {\r\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\r\n }\r\n\r\n matrixHelper.translate(0, -documentData.ls, 0);\r\n\r\n switch (documentData.j) {\r\n case 1:\r\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\r\n break;\r\n\r\n case 2:\r\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n\r\n matrixHelper.translate(xPos, yPos, 0);\r\n };\r\n\r\n ITextElement.prototype.buildColor = function (colorData) {\r\n return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\r\n };\r\n\r\n ITextElement.prototype.emptyProp = new LetterProps();\r\n\r\n ITextElement.prototype.destroy = function () {};\r\n\r\n var emptyShapeData = {\r\n shapes: []\r\n };\r\n\r\n function SVGTextLottieElement(data, globalData, comp) {\r\n this.textSpans = [];\r\n this.renderType = 'svg';\r\n this.initElement(data, globalData, comp);\r\n }\r\n\r\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\r\n\r\n SVGTextLottieElement.prototype.createContent = function () {\r\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\r\n this.textContainer = createNS('text');\r\n }\r\n };\r\n\r\n SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\r\n var i = 0;\r\n var len = textArray.length;\r\n var textContents = [];\r\n var currentTextContent = '';\r\n\r\n while (i < len) {\r\n if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\r\n textContents.push(currentTextContent);\r\n currentTextContent = '';\r\n } else {\r\n currentTextContent += textArray[i];\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n textContents.push(currentTextContent);\r\n return textContents;\r\n };\r\n\r\n SVGTextLottieElement.prototype.buildNewText = function () {\r\n this.addDynamicProperty(this);\r\n var i;\r\n var len;\r\n var documentData = this.textProperty.currentData;\r\n this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\r\n\r\n if (documentData.fc) {\r\n this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\r\n } else {\r\n this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\r\n }\r\n\r\n if (documentData.sc) {\r\n this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\r\n this.layerElement.setAttribute('stroke-width', documentData.sw);\r\n }\r\n\r\n this.layerElement.setAttribute('font-size', documentData.finalSize);\r\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\r\n\r\n if (fontData.fClass) {\r\n this.layerElement.setAttribute('class', fontData.fClass);\r\n } else {\r\n this.layerElement.setAttribute('font-family', fontData.fFamily);\r\n var fWeight = documentData.fWeight;\r\n var fStyle = documentData.fStyle;\r\n this.layerElement.setAttribute('font-style', fStyle);\r\n this.layerElement.setAttribute('font-weight', fWeight);\r\n }\r\n\r\n this.layerElement.setAttribute('aria-label', documentData.t);\r\n var letters = documentData.l || [];\r\n var usesGlyphs = !!this.globalData.fontManager.chars;\r\n len = letters.length;\r\n var tSpan;\r\n var matrixHelper = this.mHelper;\r\n var shapeStr = '';\r\n var singleShape = this.data.singleShape;\r\n var xPos = 0;\r\n var yPos = 0;\r\n var firstLine = true;\r\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\r\n\r\n if (singleShape && !usesGlyphs && !documentData.sz) {\r\n var tElement = this.textContainer;\r\n var justify = 'start';\r\n\r\n switch (documentData.j) {\r\n case 1:\r\n justify = 'end';\r\n break;\r\n\r\n case 2:\r\n justify = 'middle';\r\n break;\r\n\r\n default:\r\n justify = 'start';\r\n break;\r\n }\r\n\r\n tElement.setAttribute('text-anchor', justify);\r\n tElement.setAttribute('letter-spacing', trackingOffset);\r\n var textContent = this.buildTextContents(documentData.finalText);\r\n len = textContent.length;\r\n yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n tSpan = this.textSpans[i].span || createNS('tspan');\r\n tSpan.textContent = textContent[i];\r\n tSpan.setAttribute('x', 0);\r\n tSpan.setAttribute('y', yPos);\r\n tSpan.style.display = 'inherit';\r\n tElement.appendChild(tSpan);\r\n\r\n if (!this.textSpans[i]) {\r\n this.textSpans[i] = {\r\n span: null,\r\n glyph: null\r\n };\r\n }\r\n\r\n this.textSpans[i].span = tSpan;\r\n yPos += documentData.finalLineHeight;\r\n }\r\n\r\n this.layerElement.appendChild(tElement);\r\n } else {\r\n var cachedSpansLength = this.textSpans.length;\r\n var charData;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (!this.textSpans[i]) {\r\n this.textSpans[i] = {\r\n span: null,\r\n childSpan: null,\r\n glyph: null\r\n };\r\n }\r\n\r\n if (!usesGlyphs || !singleShape || i === 0) {\r\n tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\r\n\r\n if (cachedSpansLength <= i) {\r\n tSpan.setAttribute('stroke-linecap', 'butt');\r\n tSpan.setAttribute('stroke-linejoin', 'round');\r\n tSpan.setAttribute('stroke-miterlimit', '4');\r\n this.textSpans[i].span = tSpan;\r\n\r\n if (usesGlyphs) {\r\n var childSpan = createNS('g');\r\n tSpan.appendChild(childSpan);\r\n this.textSpans[i].childSpan = childSpan;\r\n }\r\n\r\n this.textSpans[i].span = tSpan;\r\n this.layerElement.appendChild(tSpan);\r\n }\r\n\r\n tSpan.style.display = 'inherit';\r\n }\r\n\r\n matrixHelper.reset();\r\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\r\n\r\n if (singleShape) {\r\n if (letters[i].n) {\r\n xPos = -trackingOffset;\r\n yPos += documentData.yOffset;\r\n yPos += firstLine ? 1 : 0;\r\n firstLine = false;\r\n }\r\n\r\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\r\n xPos += letters[i].l || 0; // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\r\n\r\n xPos += trackingOffset;\r\n }\r\n\r\n if (usesGlyphs) {\r\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\r\n var glyphElement;\r\n\r\n if (charData.t === 1) {\r\n glyphElement = new SVGCompElement(charData.data, this.globalData, this);\r\n } else {\r\n var data = emptyShapeData;\r\n\r\n if (charData.data && charData.data.shapes) {\r\n data = charData.data;\r\n }\r\n\r\n glyphElement = new SVGShapeElement(data, this.globalData, this);\r\n }\r\n\r\n if (this.textSpans[i].glyph) {\r\n var glyph = this.textSpans[i].glyph;\r\n this.textSpans[i].childSpan.removeChild(glyph.layerElement);\r\n glyph.destroy();\r\n }\r\n\r\n this.textSpans[i].glyph = glyphElement;\r\n glyphElement._debug = true;\r\n glyphElement.prepareFrame(0);\r\n glyphElement.renderFrame();\r\n this.textSpans[i].childSpan.appendChild(glyphElement.layerElement);\r\n this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');\r\n } else {\r\n if (singleShape) {\r\n tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\r\n }\r\n\r\n tSpan.textContent = letters[i].val;\r\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\r\n } //\r\n\r\n }\r\n\r\n if (singleShape && tSpan) {\r\n tSpan.setAttribute('d', shapeStr);\r\n }\r\n }\r\n\r\n while (i < this.textSpans.length) {\r\n this.textSpans[i].span.style.display = 'none';\r\n i += 1;\r\n }\r\n\r\n this._sizeChanged = true;\r\n };\r\n\r\n SVGTextLottieElement.prototype.sourceRectAtTime = function () {\r\n this.prepareFrame(this.comp.renderedFrame - this.data.st);\r\n this.renderInnerContent();\r\n\r\n if (this._sizeChanged) {\r\n this._sizeChanged = false;\r\n var textBox = this.layerElement.getBBox();\r\n this.bbox = {\r\n top: textBox.y,\r\n left: textBox.x,\r\n width: textBox.width,\r\n height: textBox.height\r\n };\r\n }\r\n\r\n return this.bbox;\r\n };\r\n\r\n SVGTextLottieElement.prototype.getValue = function () {\r\n var i;\r\n var len = this.textSpans.length;\r\n var glyphElement;\r\n this.renderedFrame = this.comp.renderedFrame;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n glyphElement = this.textSpans[i].glyph;\r\n\r\n if (glyphElement) {\r\n glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\r\n\r\n if (glyphElement._mdf) {\r\n this._mdf = true;\r\n }\r\n }\r\n }\r\n };\r\n\r\n SVGTextLottieElement.prototype.renderInnerContent = function () {\r\n if (!this.data.singleShape || this._mdf) {\r\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\r\n\r\n if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\r\n this._sizeChanged = true;\r\n var i;\r\n var len;\r\n var renderedLetters = this.textAnimator.renderedLetters;\r\n var letters = this.textProperty.currentData.l;\r\n len = letters.length;\r\n var renderedLetter;\r\n var textSpan;\r\n var glyphElement;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (!letters[i].n) {\r\n renderedLetter = renderedLetters[i];\r\n textSpan = this.textSpans[i].span;\r\n glyphElement = this.textSpans[i].glyph;\r\n\r\n if (glyphElement) {\r\n glyphElement.renderFrame();\r\n }\r\n\r\n if (renderedLetter._mdf.m) {\r\n textSpan.setAttribute('transform', renderedLetter.m);\r\n }\r\n\r\n if (renderedLetter._mdf.o) {\r\n textSpan.setAttribute('opacity', renderedLetter.o);\r\n }\r\n\r\n if (renderedLetter._mdf.sw) {\r\n textSpan.setAttribute('stroke-width', renderedLetter.sw);\r\n }\r\n\r\n if (renderedLetter._mdf.sc) {\r\n textSpan.setAttribute('stroke', renderedLetter.sc);\r\n }\r\n\r\n if (renderedLetter._mdf.fc) {\r\n textSpan.setAttribute('fill', renderedLetter.fc);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n function ISolidElement(data, globalData, comp) {\r\n this.initElement(data, globalData, comp);\r\n }\r\n\r\n extendPrototype([IImageElement], ISolidElement);\r\n\r\n ISolidElement.prototype.createContent = function () {\r\n var rect = createNS('rect'); /// /rect.style.width = this.data.sw;\r\n /// /rect.style.height = this.data.sh;\r\n /// /rect.style.fill = this.data.sc;\r\n\r\n rect.setAttribute('width', this.data.sw);\r\n rect.setAttribute('height', this.data.sh);\r\n rect.setAttribute('fill', this.data.sc);\r\n this.layerElement.appendChild(rect);\r\n };\r\n\r\n function NullElement(data, globalData, comp) {\r\n this.initFrame();\r\n this.initBaseData(data, globalData, comp);\r\n this.initFrame();\r\n this.initTransform(data, globalData, comp);\r\n this.initHierarchy();\r\n }\r\n\r\n NullElement.prototype.prepareFrame = function (num) {\r\n this.prepareProperties(num, true);\r\n };\r\n\r\n NullElement.prototype.renderFrame = function () {};\r\n\r\n NullElement.prototype.getBaseElement = function () {\r\n return null;\r\n };\r\n\r\n NullElement.prototype.destroy = function () {};\r\n\r\n NullElement.prototype.sourceRectAtTime = function () {};\r\n\r\n NullElement.prototype.hide = function () {};\r\n\r\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\r\n\r\n function SVGRendererBase() {}\r\n\r\n extendPrototype([BaseRenderer], SVGRendererBase);\r\n\r\n SVGRendererBase.prototype.createNull = function (data) {\r\n return new NullElement(data, this.globalData, this);\r\n };\r\n\r\n SVGRendererBase.prototype.createShape = function (data) {\r\n return new SVGShapeElement(data, this.globalData, this);\r\n };\r\n\r\n SVGRendererBase.prototype.createText = function (data) {\r\n return new SVGTextLottieElement(data, this.globalData, this);\r\n };\r\n\r\n SVGRendererBase.prototype.createImage = function (data) {\r\n return new IImageElement(data, this.globalData, this);\r\n };\r\n\r\n SVGRendererBase.prototype.createSolid = function (data) {\r\n return new ISolidElement(data, this.globalData, this);\r\n };\r\n\r\n SVGRendererBase.prototype.configAnimation = function (animData) {\r\n this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\r\n\r\n if (this.renderConfig.viewBoxSize) {\r\n this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\r\n } else {\r\n this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\r\n }\r\n\r\n if (!this.renderConfig.viewBoxOnly) {\r\n this.svgElement.setAttribute('width', animData.w);\r\n this.svgElement.setAttribute('height', animData.h);\r\n this.svgElement.style.width = '100%';\r\n this.svgElement.style.height = '100%';\r\n this.svgElement.style.transform = 'translate3d(0,0,0)';\r\n this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\r\n }\r\n\r\n if (this.renderConfig.width) {\r\n this.svgElement.setAttribute('width', this.renderConfig.width);\r\n }\r\n\r\n if (this.renderConfig.height) {\r\n this.svgElement.setAttribute('height', this.renderConfig.height);\r\n }\r\n\r\n if (this.renderConfig.className) {\r\n this.svgElement.setAttribute('class', this.renderConfig.className);\r\n }\r\n\r\n if (this.renderConfig.id) {\r\n this.svgElement.setAttribute('id', this.renderConfig.id);\r\n }\r\n\r\n if (this.renderConfig.focusable !== undefined) {\r\n this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\r\n }\r\n\r\n this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); // this.layerElement.style.transform = 'translate3d(0,0,0)';\r\n // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\r\n\r\n this.animationItem.wrapper.appendChild(this.svgElement); // Mask animation\r\n\r\n var defs = this.globalData.defs;\r\n this.setupGlobalData(animData, defs);\r\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\r\n this.data = animData;\r\n var maskElement = createNS('clipPath');\r\n var rect = createNS('rect');\r\n rect.setAttribute('width', animData.w);\r\n rect.setAttribute('height', animData.h);\r\n rect.setAttribute('x', 0);\r\n rect.setAttribute('y', 0);\r\n var maskId = createElementID();\r\n maskElement.setAttribute('id', maskId);\r\n maskElement.appendChild(rect);\r\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');\r\n defs.appendChild(maskElement);\r\n this.layers = animData.layers;\r\n this.elements = createSizedArray(animData.layers.length);\r\n };\r\n\r\n SVGRendererBase.prototype.destroy = function () {\r\n if (this.animationItem.wrapper) {\r\n this.animationItem.wrapper.innerText = '';\r\n }\r\n\r\n this.layerElement = null;\r\n this.globalData.defs = null;\r\n var i;\r\n var len = this.layers ? this.layers.length : 0;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (this.elements[i]) {\r\n this.elements[i].destroy();\r\n }\r\n }\r\n\r\n this.elements.length = 0;\r\n this.destroyed = true;\r\n this.animationItem = null;\r\n };\r\n\r\n SVGRendererBase.prototype.updateContainerSize = function () {};\r\n\r\n SVGRendererBase.prototype.buildItem = function (pos) {\r\n var elements = this.elements;\r\n\r\n if (elements[pos] || this.layers[pos].ty === 99) {\r\n return;\r\n }\r\n\r\n elements[pos] = true;\r\n var element = this.createItem(this.layers[pos]);\r\n elements[pos] = element;\r\n\r\n if (getExpressionsPlugin()) {\r\n if (this.layers[pos].ty === 0) {\r\n this.globalData.projectInterface.registerComposition(element);\r\n }\r\n\r\n element.initExpressions();\r\n }\r\n\r\n this.appendElementInPos(element, pos);\r\n\r\n if (this.layers[pos].tt) {\r\n if (!this.elements[pos - 1] || this.elements[pos - 1] === true) {\r\n this.buildItem(pos - 1);\r\n this.addPendingElement(element);\r\n } else {\r\n element.setMatte(elements[pos - 1].layerId);\r\n }\r\n }\r\n };\r\n\r\n SVGRendererBase.prototype.checkPendingElements = function () {\r\n while (this.pendingElements.length) {\r\n var element = this.pendingElements.pop();\r\n element.checkParenting();\r\n\r\n if (element.data.tt) {\r\n var i = 0;\r\n var len = this.elements.length;\r\n\r\n while (i < len) {\r\n if (this.elements[i] === element) {\r\n element.setMatte(this.elements[i - 1].layerId);\r\n break;\r\n }\r\n\r\n i += 1;\r\n }\r\n }\r\n }\r\n };\r\n\r\n SVGRendererBase.prototype.renderFrame = function (num) {\r\n if (this.renderedFrame === num || this.destroyed) {\r\n return;\r\n }\r\n\r\n if (num === null) {\r\n num = this.renderedFrame;\r\n } else {\r\n this.renderedFrame = num;\r\n } // console.log('-------');\r\n // console.log('FRAME ',num);\r\n\r\n\r\n this.globalData.frameNum = num;\r\n this.globalData.frameId += 1;\r\n this.globalData.projectInterface.currentFrame = num;\r\n this.globalData._mdf = false;\r\n var i;\r\n var len = this.layers.length;\r\n\r\n if (!this.completeLayers) {\r\n this.checkLayers(num);\r\n }\r\n\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n if (this.completeLayers || this.elements[i]) {\r\n this.elements[i].prepareFrame(num - this.layers[i].st);\r\n }\r\n }\r\n\r\n if (this.globalData._mdf) {\r\n for (i = 0; i < len; i += 1) {\r\n if (this.completeLayers || this.elements[i]) {\r\n this.elements[i].renderFrame();\r\n }\r\n }\r\n }\r\n };\r\n\r\n SVGRendererBase.prototype.appendElementInPos = function (element, pos) {\r\n var newElement = element.getBaseElement();\r\n\r\n if (!newElement) {\r\n return;\r\n }\r\n\r\n var i = 0;\r\n var nextElement;\r\n\r\n while (i < pos) {\r\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\r\n nextElement = this.elements[i].getBaseElement();\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n if (nextElement) {\r\n this.layerElement.insertBefore(newElement, nextElement);\r\n } else {\r\n this.layerElement.appendChild(newElement);\r\n }\r\n };\r\n\r\n SVGRendererBase.prototype.hide = function () {\r\n this.layerElement.style.display = 'none';\r\n };\r\n\r\n SVGRendererBase.prototype.show = function () {\r\n this.layerElement.style.display = 'block';\r\n };\r\n\r\n function ICompElement() {}\r\n\r\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\r\n\r\n ICompElement.prototype.initElement = function (data, globalData, comp) {\r\n this.initFrame();\r\n this.initBaseData(data, globalData, comp);\r\n this.initTransform(data, globalData, comp);\r\n this.initRenderable();\r\n this.initHierarchy();\r\n this.initRendererElement();\r\n this.createContainerElements();\r\n this.createRenderableComponents();\r\n\r\n if (this.data.xt || !globalData.progressiveLoad) {\r\n this.buildAllItems();\r\n }\r\n\r\n this.hide();\r\n };\r\n /* ICompElement.prototype.hide = function(){\r\n if(!this.hidden){\r\n this.hideElement();\r\n var i,len = this.elements.length;\r\n for( i = 0; i < len; i+=1 ){\r\n if(this.elements[i]){\r\n this.elements[i].hide();\r\n }\r\n }\r\n }\r\n }; */\r\n\r\n\r\n ICompElement.prototype.prepareFrame = function (num) {\r\n this._mdf = false;\r\n this.prepareRenderableFrame(num);\r\n this.prepareProperties(num, this.isInRange);\r\n\r\n if (!this.isInRange && !this.data.xt) {\r\n return;\r\n }\r\n\r\n if (!this.tm._placeholder) {\r\n var timeRemapped = this.tm.v;\r\n\r\n if (timeRemapped === this.data.op) {\r\n timeRemapped = this.data.op - 1;\r\n }\r\n\r\n this.renderedFrame = timeRemapped;\r\n } else {\r\n this.renderedFrame = num / this.data.sr;\r\n }\r\n\r\n var i;\r\n var len = this.elements.length;\r\n\r\n if (!this.completeLayers) {\r\n this.checkLayers(this.renderedFrame);\r\n } // This iteration needs to be backwards because of how expressions connect between each other\r\n\r\n\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n if (this.completeLayers || this.elements[i]) {\r\n this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\r\n\r\n if (this.elements[i]._mdf) {\r\n this._mdf = true;\r\n }\r\n }\r\n }\r\n };\r\n\r\n ICompElement.prototype.renderInnerContent = function () {\r\n var i;\r\n var len = this.layers.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (this.completeLayers || this.elements[i]) {\r\n this.elements[i].renderFrame();\r\n }\r\n }\r\n };\r\n\r\n ICompElement.prototype.setElements = function (elems) {\r\n this.elements = elems;\r\n };\r\n\r\n ICompElement.prototype.getElements = function () {\r\n return this.elements;\r\n };\r\n\r\n ICompElement.prototype.destroyElements = function () {\r\n var i;\r\n var len = this.layers.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (this.elements[i]) {\r\n this.elements[i].destroy();\r\n }\r\n }\r\n };\r\n\r\n ICompElement.prototype.destroy = function () {\r\n this.destroyElements();\r\n this.destroyBaseElement();\r\n };\r\n\r\n function SVGCompElement(data, globalData, comp) {\r\n this.layers = data.layers;\r\n this.supports3d = true;\r\n this.completeLayers = false;\r\n this.pendingElements = [];\r\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\r\n this.initElement(data, globalData, comp);\r\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\r\n _placeholder: true\r\n };\r\n }\r\n\r\n extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\r\n\r\n SVGCompElement.prototype.createComp = function (data) {\r\n return new SVGCompElement(data, this.globalData, this);\r\n };\r\n\r\n function SVGRenderer(animationItem, config) {\r\n this.animationItem = animationItem;\r\n this.layers = null;\r\n this.renderedFrame = -1;\r\n this.svgElement = createNS('svg');\r\n var ariaLabel = '';\r\n\r\n if (config && config.title) {\r\n var titleElement = createNS('title');\r\n var titleId = createElementID();\r\n titleElement.setAttribute('id', titleId);\r\n titleElement.textContent = config.title;\r\n this.svgElement.appendChild(titleElement);\r\n ariaLabel += titleId;\r\n }\r\n\r\n if (config && config.description) {\r\n var descElement = createNS('desc');\r\n var descId = createElementID();\r\n descElement.setAttribute('id', descId);\r\n descElement.textContent = config.description;\r\n this.svgElement.appendChild(descElement);\r\n ariaLabel += ' ' + descId;\r\n }\r\n\r\n if (ariaLabel) {\r\n this.svgElement.setAttribute('aria-labelledby', ariaLabel);\r\n }\r\n\r\n var defs = createNS('defs');\r\n this.svgElement.appendChild(defs);\r\n var maskElement = createNS('g');\r\n this.svgElement.appendChild(maskElement);\r\n this.layerElement = maskElement;\r\n this.renderConfig = {\r\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\r\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\r\n contentVisibility: config && config.contentVisibility || 'visible',\r\n progressiveLoad: config && config.progressiveLoad || false,\r\n hideOnTransparent: !(config && config.hideOnTransparent === false),\r\n viewBoxOnly: config && config.viewBoxOnly || false,\r\n viewBoxSize: config && config.viewBoxSize || false,\r\n className: config && config.className || '',\r\n id: config && config.id || '',\r\n focusable: config && config.focusable,\r\n filterSize: {\r\n width: config && config.filterSize && config.filterSize.width || '100%',\r\n height: config && config.filterSize && config.filterSize.height || '100%',\r\n x: config && config.filterSize && config.filterSize.x || '0%',\r\n y: config && config.filterSize && config.filterSize.y || '0%'\r\n },\r\n width: config && config.width,\r\n height: config && config.height\r\n };\r\n this.globalData = {\r\n _mdf: false,\r\n frameNum: -1,\r\n defs: defs,\r\n renderConfig: this.renderConfig\r\n };\r\n this.elements = [];\r\n this.pendingElements = [];\r\n this.destroyed = false;\r\n this.rendererType = 'svg';\r\n }\r\n\r\n extendPrototype([SVGRendererBase], SVGRenderer);\r\n\r\n SVGRenderer.prototype.createComp = function (data) {\r\n return new SVGCompElement(data, this.globalData, this);\r\n };\r\n\r\n function CVContextData() {\r\n this.saved = [];\r\n this.cArrPos = 0;\r\n this.cTr = new Matrix();\r\n this.cO = 1;\r\n var i;\r\n var len = 15;\r\n this.savedOp = createTypedArray('float32', len);\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.saved[i] = createTypedArray('float32', 16);\r\n }\r\n\r\n this._length = len;\r\n }\r\n\r\n CVContextData.prototype.duplicate = function () {\r\n var newLength = this._length * 2;\r\n var currentSavedOp = this.savedOp;\r\n this.savedOp = createTypedArray('float32', newLength);\r\n this.savedOp.set(currentSavedOp);\r\n var i = 0;\r\n\r\n for (i = this._length; i < newLength; i += 1) {\r\n this.saved[i] = createTypedArray('float32', 16);\r\n }\r\n\r\n this._length = newLength;\r\n };\r\n\r\n CVContextData.prototype.reset = function () {\r\n this.cArrPos = 0;\r\n this.cTr.reset();\r\n this.cO = 1;\r\n };\r\n\r\n function ShapeTransformManager() {\r\n this.sequences = {};\r\n this.sequenceList = [];\r\n this.transform_key_count = 0;\r\n }\r\n\r\n ShapeTransformManager.prototype = {\r\n addTransformSequence: function addTransformSequence(transforms) {\r\n var i;\r\n var len = transforms.length;\r\n var key = '_';\r\n\r\n for (i = 0; i < len; i += 1) {\r\n key += transforms[i].transform.key + '_';\r\n }\r\n\r\n var sequence = this.sequences[key];\r\n\r\n if (!sequence) {\r\n sequence = {\r\n transforms: [].concat(transforms),\r\n finalTransform: new Matrix(),\r\n _mdf: false\r\n };\r\n this.sequences[key] = sequence;\r\n this.sequenceList.push(sequence);\r\n }\r\n\r\n return sequence;\r\n },\r\n processSequence: function processSequence(sequence, isFirstFrame) {\r\n var i = 0;\r\n var len = sequence.transforms.length;\r\n var _mdf = isFirstFrame;\r\n\r\n while (i < len && !isFirstFrame) {\r\n if (sequence.transforms[i].transform.mProps._mdf) {\r\n _mdf = true;\r\n break;\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n if (_mdf) {\r\n var props;\r\n sequence.finalTransform.reset();\r\n\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n props = sequence.transforms[i].transform.mProps.v.props;\r\n sequence.finalTransform.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\r\n }\r\n }\r\n\r\n sequence._mdf = _mdf;\r\n },\r\n processSequences: function processSequences(isFirstFrame) {\r\n var i;\r\n var len = this.sequenceList.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.processSequence(this.sequenceList[i], isFirstFrame);\r\n }\r\n },\r\n getNewKey: function getNewKey() {\r\n this.transform_key_count += 1;\r\n return '_' + this.transform_key_count;\r\n }\r\n };\r\n\r\n function CVEffects() {}\r\n\r\n CVEffects.prototype.renderFrame = function () {};\r\n\r\n function CVMaskElement(data, element) {\r\n this.data = data;\r\n this.element = element;\r\n this.masksProperties = this.data.masksProperties || [];\r\n this.viewData = createSizedArray(this.masksProperties.length);\r\n var i;\r\n var len = this.masksProperties.length;\r\n var hasMasks = false;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (this.masksProperties[i].mode !== 'n') {\r\n hasMasks = true;\r\n }\r\n\r\n this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\r\n }\r\n\r\n this.hasMasks = hasMasks;\r\n\r\n if (hasMasks) {\r\n this.element.addRenderableComponent(this);\r\n }\r\n }\r\n\r\n CVMaskElement.prototype.renderFrame = function () {\r\n if (!this.hasMasks) {\r\n return;\r\n }\r\n\r\n var transform = this.element.finalTransform.mat;\r\n var ctx = this.element.canvasContext;\r\n var i;\r\n var len = this.masksProperties.length;\r\n var pt;\r\n var pts;\r\n var data;\r\n ctx.beginPath();\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (this.masksProperties[i].mode !== 'n') {\r\n if (this.masksProperties[i].inv) {\r\n ctx.moveTo(0, 0);\r\n ctx.lineTo(this.element.globalData.compSize.w, 0);\r\n ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\r\n ctx.lineTo(0, this.element.globalData.compSize.h);\r\n ctx.lineTo(0, 0);\r\n }\r\n\r\n data = this.viewData[i].v;\r\n pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\r\n ctx.moveTo(pt[0], pt[1]);\r\n var j;\r\n var jLen = data._length;\r\n\r\n for (j = 1; j < jLen; j += 1) {\r\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\r\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\r\n }\r\n\r\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\r\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\r\n }\r\n }\r\n\r\n this.element.globalData.renderer.save(true);\r\n ctx.clip();\r\n };\r\n\r\n CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\r\n\r\n CVMaskElement.prototype.destroy = function () {\r\n this.element = null;\r\n };\r\n\r\n function CVBaseElement() {}\r\n\r\n CVBaseElement.prototype = {\r\n createElements: function createElements() {},\r\n initRendererElement: function initRendererElement() {},\r\n createContainerElements: function createContainerElements() {\r\n this.canvasContext = this.globalData.canvasContext;\r\n this.renderableEffectsManager = new CVEffects(this);\r\n },\r\n createContent: function createContent() {},\r\n setBlendMode: function setBlendMode() {\r\n var globalData = this.globalData;\r\n\r\n if (globalData.blendMode !== this.data.bm) {\r\n globalData.blendMode = this.data.bm;\r\n var blendModeValue = getBlendMode(this.data.bm);\r\n globalData.canvasContext.globalCompositeOperation = blendModeValue;\r\n }\r\n },\r\n createRenderableComponents: function createRenderableComponents() {\r\n this.maskManager = new CVMaskElement(this.data, this);\r\n },\r\n hideElement: function hideElement() {\r\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\r\n this.hidden = true;\r\n }\r\n },\r\n showElement: function showElement() {\r\n if (this.isInRange && !this.isTransparent) {\r\n this.hidden = false;\r\n this._isFirstFrame = true;\r\n this.maskManager._isFirstFrame = true;\r\n }\r\n },\r\n renderFrame: function renderFrame() {\r\n if (this.hidden || this.data.hd) {\r\n return;\r\n }\r\n\r\n this.renderTransform();\r\n this.renderRenderable();\r\n this.setBlendMode();\r\n var forceRealStack = this.data.ty === 0;\r\n this.globalData.renderer.save(forceRealStack);\r\n this.globalData.renderer.ctxTransform(this.finalTransform.mat.props);\r\n this.globalData.renderer.ctxOpacity(this.finalTransform.mProp.o.v);\r\n this.renderInnerContent();\r\n this.globalData.renderer.restore(forceRealStack);\r\n\r\n if (this.maskManager.hasMasks) {\r\n this.globalData.renderer.restore(true);\r\n }\r\n\r\n if (this._isFirstFrame) {\r\n this._isFirstFrame = false;\r\n }\r\n },\r\n destroy: function destroy() {\r\n this.canvasContext = null;\r\n this.data = null;\r\n this.globalData = null;\r\n this.maskManager.destroy();\r\n },\r\n mHelper: new Matrix()\r\n };\r\n CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\r\n CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\r\n\r\n function CVShapeData(element, data, styles, transformsManager) {\r\n this.styledShapes = [];\r\n this.tr = [0, 0, 0, 0, 0, 0];\r\n var ty = 4;\r\n\r\n if (data.ty === 'rc') {\r\n ty = 5;\r\n } else if (data.ty === 'el') {\r\n ty = 6;\r\n } else if (data.ty === 'sr') {\r\n ty = 7;\r\n }\r\n\r\n this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\r\n var i;\r\n var len = styles.length;\r\n var styledShape;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (!styles[i].closed) {\r\n styledShape = {\r\n transforms: transformsManager.addTransformSequence(styles[i].transforms),\r\n trNodes: []\r\n };\r\n this.styledShapes.push(styledShape);\r\n styles[i].elements.push(styledShape);\r\n }\r\n }\r\n }\r\n\r\n CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\r\n\r\n function CVShapeElement(data, globalData, comp) {\r\n this.shapes = [];\r\n this.shapesData = data.shapes;\r\n this.stylesList = [];\r\n this.itemsData = [];\r\n this.prevViewData = [];\r\n this.shapeModifiers = [];\r\n this.processedElements = [];\r\n this.transformsManager = new ShapeTransformManager();\r\n this.initElement(data, globalData, comp);\r\n }\r\n\r\n extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\r\n CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\r\n CVShapeElement.prototype.transformHelper = {\r\n opacity: 1,\r\n _opMdf: false\r\n };\r\n CVShapeElement.prototype.dashResetter = [];\r\n\r\n CVShapeElement.prototype.createContent = function () {\r\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\r\n };\r\n\r\n CVShapeElement.prototype.createStyleElement = function (data, transforms) {\r\n var styleElem = {\r\n data: data,\r\n type: data.ty,\r\n preTransforms: this.transformsManager.addTransformSequence(transforms),\r\n transforms: [],\r\n elements: [],\r\n closed: data.hd === true\r\n };\r\n var elementData = {};\r\n\r\n if (data.ty === 'fl' || data.ty === 'st') {\r\n elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\r\n\r\n if (!elementData.c.k) {\r\n styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';\r\n }\r\n } else if (data.ty === 'gf' || data.ty === 'gs') {\r\n elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\r\n elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\r\n elementData.h = PropertyFactory.getProp(this, data.h || {\r\n k: 0\r\n }, 0, 0.01, this);\r\n elementData.a = PropertyFactory.getProp(this, data.a || {\r\n k: 0\r\n }, 0, degToRads, this);\r\n elementData.g = new GradientProperty(this, data.g, this);\r\n }\r\n\r\n elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\r\n\r\n if (data.ty === 'st' || data.ty === 'gs') {\r\n styleElem.lc = lineCapEnum[data.lc || 2];\r\n styleElem.lj = lineJoinEnum[data.lj || 2];\r\n\r\n if (data.lj == 1) {\r\n // eslint-disable-line eqeqeq\r\n styleElem.ml = data.ml;\r\n }\r\n\r\n elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\r\n\r\n if (!elementData.w.k) {\r\n styleElem.wi = elementData.w.v;\r\n }\r\n\r\n if (data.d) {\r\n var d = new DashProperty(this, data.d, 'canvas', this);\r\n elementData.d = d;\r\n\r\n if (!elementData.d.k) {\r\n styleElem.da = elementData.d.dashArray;\r\n styleElem[\"do\"] = elementData.d.dashoffset[0];\r\n }\r\n }\r\n } else {\r\n styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\r\n }\r\n\r\n this.stylesList.push(styleElem);\r\n elementData.style = styleElem;\r\n return elementData;\r\n };\r\n\r\n CVShapeElement.prototype.createGroupElement = function () {\r\n var elementData = {\r\n it: [],\r\n prevViewData: []\r\n };\r\n return elementData;\r\n };\r\n\r\n CVShapeElement.prototype.createTransformElement = function (data) {\r\n var elementData = {\r\n transform: {\r\n opacity: 1,\r\n _opMdf: false,\r\n key: this.transformsManager.getNewKey(),\r\n op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\r\n mProps: TransformPropertyFactory.getTransformProperty(this, data, this)\r\n }\r\n };\r\n return elementData;\r\n };\r\n\r\n CVShapeElement.prototype.createShapeElement = function (data) {\r\n var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\r\n this.shapes.push(elementData);\r\n this.addShapeToModifiers(elementData);\r\n return elementData;\r\n };\r\n\r\n CVShapeElement.prototype.reloadShapes = function () {\r\n this._isFirstFrame = true;\r\n var i;\r\n var len = this.itemsData.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.prevViewData[i] = this.itemsData[i];\r\n }\r\n\r\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\r\n len = this.dynamicProperties.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.dynamicProperties[i].getValue();\r\n }\r\n\r\n this.renderModifiers();\r\n this.transformsManager.processSequences(this._isFirstFrame);\r\n };\r\n\r\n CVShapeElement.prototype.addTransformToStyleList = function (transform) {\r\n var i;\r\n var len = this.stylesList.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (!this.stylesList[i].closed) {\r\n this.stylesList[i].transforms.push(transform);\r\n }\r\n }\r\n };\r\n\r\n CVShapeElement.prototype.removeTransformFromStyleList = function () {\r\n var i;\r\n var len = this.stylesList.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (!this.stylesList[i].closed) {\r\n this.stylesList[i].transforms.pop();\r\n }\r\n }\r\n };\r\n\r\n CVShapeElement.prototype.closeStyles = function (styles) {\r\n var i;\r\n var len = styles.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n styles[i].closed = true;\r\n }\r\n };\r\n\r\n CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\r\n var i;\r\n var len = arr.length - 1;\r\n var j;\r\n var jLen;\r\n var ownStyles = [];\r\n var ownModifiers = [];\r\n var processedPos;\r\n var modifier;\r\n var currentTransform;\r\n var ownTransforms = [].concat(transforms);\r\n\r\n for (i = len; i >= 0; i -= 1) {\r\n processedPos = this.searchProcessedElement(arr[i]);\r\n\r\n if (!processedPos) {\r\n arr[i]._shouldRender = shouldRender;\r\n } else {\r\n itemsData[i] = prevViewData[processedPos - 1];\r\n }\r\n\r\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\r\n if (!processedPos) {\r\n itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\r\n } else {\r\n itemsData[i].style.closed = false;\r\n }\r\n\r\n ownStyles.push(itemsData[i].style);\r\n } else if (arr[i].ty === 'gr') {\r\n if (!processedPos) {\r\n itemsData[i] = this.createGroupElement(arr[i]);\r\n } else {\r\n jLen = itemsData[i].it.length;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\r\n }\r\n }\r\n\r\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\r\n } else if (arr[i].ty === 'tr') {\r\n if (!processedPos) {\r\n currentTransform = this.createTransformElement(arr[i]);\r\n itemsData[i] = currentTransform;\r\n }\r\n\r\n ownTransforms.push(itemsData[i]);\r\n this.addTransformToStyleList(itemsData[i]);\r\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\r\n if (!processedPos) {\r\n itemsData[i] = this.createShapeElement(arr[i]);\r\n }\r\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb') {\r\n if (!processedPos) {\r\n modifier = ShapeModifiers.getModifier(arr[i].ty);\r\n modifier.init(this, arr[i]);\r\n itemsData[i] = modifier;\r\n this.shapeModifiers.push(modifier);\r\n } else {\r\n modifier = itemsData[i];\r\n modifier.closed = false;\r\n }\r\n\r\n ownModifiers.push(modifier);\r\n } else if (arr[i].ty === 'rp') {\r\n if (!processedPos) {\r\n modifier = ShapeModifiers.getModifier(arr[i].ty);\r\n itemsData[i] = modifier;\r\n modifier.init(this, arr, i, itemsData);\r\n this.shapeModifiers.push(modifier);\r\n shouldRender = false;\r\n } else {\r\n modifier = itemsData[i];\r\n modifier.closed = true;\r\n }\r\n\r\n ownModifiers.push(modifier);\r\n }\r\n\r\n this.addProcessedElement(arr[i], i + 1);\r\n }\r\n\r\n this.removeTransformFromStyleList();\r\n this.closeStyles(ownStyles);\r\n len = ownModifiers.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n ownModifiers[i].closed = true;\r\n }\r\n };\r\n\r\n CVShapeElement.prototype.renderInnerContent = function () {\r\n this.transformHelper.opacity = 1;\r\n this.transformHelper._opMdf = false;\r\n this.renderModifiers();\r\n this.transformsManager.processSequences(this._isFirstFrame);\r\n this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\r\n };\r\n\r\n CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\r\n if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\r\n groupTransform.opacity = parentTransform.opacity;\r\n groupTransform.opacity *= groupTransform.op.v;\r\n groupTransform._opMdf = true;\r\n }\r\n };\r\n\r\n CVShapeElement.prototype.drawLayer = function () {\r\n var i;\r\n var len = this.stylesList.length;\r\n var j;\r\n var jLen;\r\n var k;\r\n var kLen;\r\n var elems;\r\n var nodes;\r\n var renderer = this.globalData.renderer;\r\n var ctx = this.globalData.canvasContext;\r\n var type;\r\n var currentStyle;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n currentStyle = this.stylesList[i];\r\n type = currentStyle.type; // Skipping style when\r\n // Stroke width equals 0\r\n // style should not be rendered (extra unused repeaters)\r\n // current opacity equals 0\r\n // global opacity equals 0\r\n\r\n if (!((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\r\n renderer.save();\r\n elems = currentStyle.elements;\r\n\r\n if (type === 'st' || type === 'gs') {\r\n ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\r\n ctx.lineWidth = currentStyle.wi;\r\n ctx.lineCap = currentStyle.lc;\r\n ctx.lineJoin = currentStyle.lj;\r\n ctx.miterLimit = currentStyle.ml || 0;\r\n } else {\r\n ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\r\n }\r\n\r\n renderer.ctxOpacity(currentStyle.coOp);\r\n\r\n if (type !== 'st' && type !== 'gs') {\r\n ctx.beginPath();\r\n }\r\n\r\n renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\r\n jLen = elems.length;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n if (type === 'st' || type === 'gs') {\r\n ctx.beginPath();\r\n\r\n if (currentStyle.da) {\r\n ctx.setLineDash(currentStyle.da);\r\n ctx.lineDashOffset = currentStyle[\"do\"];\r\n }\r\n }\r\n\r\n nodes = elems[j].trNodes;\r\n kLen = nodes.length;\r\n\r\n for (k = 0; k < kLen; k += 1) {\r\n if (nodes[k].t === 'm') {\r\n ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\r\n } else if (nodes[k].t === 'c') {\r\n ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\r\n } else {\r\n ctx.closePath();\r\n }\r\n }\r\n\r\n if (type === 'st' || type === 'gs') {\r\n ctx.stroke();\r\n\r\n if (currentStyle.da) {\r\n ctx.setLineDash(this.dashResetter);\r\n }\r\n }\r\n }\r\n\r\n if (type !== 'st' && type !== 'gs') {\r\n ctx.fill(currentStyle.r);\r\n }\r\n\r\n renderer.restore();\r\n }\r\n }\r\n };\r\n\r\n CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\r\n var i;\r\n var len = items.length - 1;\r\n var groupTransform;\r\n groupTransform = parentTransform;\r\n\r\n for (i = len; i >= 0; i -= 1) {\r\n if (items[i].ty === 'tr') {\r\n groupTransform = data[i].transform;\r\n this.renderShapeTransform(parentTransform, groupTransform);\r\n } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {\r\n this.renderPath(items[i], data[i]);\r\n } else if (items[i].ty === 'fl') {\r\n this.renderFill(items[i], data[i], groupTransform);\r\n } else if (items[i].ty === 'st') {\r\n this.renderStroke(items[i], data[i], groupTransform);\r\n } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {\r\n this.renderGradientFill(items[i], data[i], groupTransform);\r\n } else if (items[i].ty === 'gr') {\r\n this.renderShape(groupTransform, items[i].it, data[i].it);\r\n } else if (items[i].ty === 'tm') {//\r\n }\r\n }\r\n\r\n if (isMain) {\r\n this.drawLayer();\r\n }\r\n };\r\n\r\n CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\r\n if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\r\n var shapeNodes = styledShape.trNodes;\r\n var paths = shape.paths;\r\n var i;\r\n var len;\r\n var j;\r\n var jLen = paths._length;\r\n shapeNodes.length = 0;\r\n var groupTransformMat = styledShape.transforms.finalTransform;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n var pathNodes = paths.shapes[j];\r\n\r\n if (pathNodes && pathNodes.v) {\r\n len = pathNodes._length;\r\n\r\n for (i = 1; i < len; i += 1) {\r\n if (i === 1) {\r\n shapeNodes.push({\r\n t: 'm',\r\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\r\n });\r\n }\r\n\r\n shapeNodes.push({\r\n t: 'c',\r\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\r\n });\r\n }\r\n\r\n if (len === 1) {\r\n shapeNodes.push({\r\n t: 'm',\r\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\r\n });\r\n }\r\n\r\n if (pathNodes.c && len) {\r\n shapeNodes.push({\r\n t: 'c',\r\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])\r\n });\r\n shapeNodes.push({\r\n t: 'z'\r\n });\r\n }\r\n }\r\n }\r\n\r\n styledShape.trNodes = shapeNodes;\r\n }\r\n };\r\n\r\n CVShapeElement.prototype.renderPath = function (pathData, itemData) {\r\n if (pathData.hd !== true && pathData._shouldRender) {\r\n var i;\r\n var len = itemData.styledShapes.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\r\n }\r\n }\r\n };\r\n\r\n CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\r\n var styleElem = itemData.style;\r\n\r\n if (itemData.c._mdf || this._isFirstFrame) {\r\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\r\n }\r\n\r\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\r\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\r\n }\r\n };\r\n\r\n CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\r\n var styleElem = itemData.style;\r\n var grd;\r\n\r\n if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {\r\n var ctx = this.globalData.canvasContext;\r\n var pt1 = itemData.s.v;\r\n var pt2 = itemData.e.v;\r\n\r\n if (styleData.t === 1) {\r\n grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\r\n } else {\r\n var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\r\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\r\n var percent = itemData.h.v;\r\n\r\n if (percent >= 1) {\r\n percent = 0.99;\r\n } else if (percent <= -1) {\r\n percent = -0.99;\r\n }\r\n\r\n var dist = rad * percent;\r\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\r\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\r\n grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\r\n }\r\n\r\n var i;\r\n var len = styleData.g.p;\r\n var cValues = itemData.g.c;\r\n var opacity = 1;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (itemData.g._hasOpacity && itemData.g._collapsable) {\r\n opacity = itemData.g.o[i * 2 + 1];\r\n }\r\n\r\n grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\r\n }\r\n\r\n styleElem.grd = grd;\r\n }\r\n\r\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\r\n };\r\n\r\n CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\r\n var styleElem = itemData.style;\r\n var d = itemData.d;\r\n\r\n if (d && (d._mdf || this._isFirstFrame)) {\r\n styleElem.da = d.dashArray;\r\n styleElem[\"do\"] = d.dashoffset[0];\r\n }\r\n\r\n if (itemData.c._mdf || this._isFirstFrame) {\r\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\r\n }\r\n\r\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\r\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\r\n }\r\n\r\n if (itemData.w._mdf || this._isFirstFrame) {\r\n styleElem.wi = itemData.w.v;\r\n }\r\n };\r\n\r\n CVShapeElement.prototype.destroy = function () {\r\n this.shapesData = null;\r\n this.globalData = null;\r\n this.canvasContext = null;\r\n this.stylesList.length = 0;\r\n this.itemsData.length = 0;\r\n };\r\n\r\n function CVTextElement(data, globalData, comp) {\r\n this.textSpans = [];\r\n this.yOffset = 0;\r\n this.fillColorAnim = false;\r\n this.strokeColorAnim = false;\r\n this.strokeWidthAnim = false;\r\n this.stroke = false;\r\n this.fill = false;\r\n this.justifyOffset = 0;\r\n this.currentRender = null;\r\n this.renderType = 'canvas';\r\n this.values = {\r\n fill: 'rgba(0,0,0,0)',\r\n stroke: 'rgba(0,0,0,0)',\r\n sWidth: 0,\r\n fValue: ''\r\n };\r\n this.initElement(data, globalData, comp);\r\n }\r\n\r\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\r\n CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\r\n\r\n CVTextElement.prototype.buildNewText = function () {\r\n var documentData = this.textProperty.currentData;\r\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\r\n var hasFill = false;\r\n\r\n if (documentData.fc) {\r\n hasFill = true;\r\n this.values.fill = this.buildColor(documentData.fc);\r\n } else {\r\n this.values.fill = 'rgba(0,0,0,0)';\r\n }\r\n\r\n this.fill = hasFill;\r\n var hasStroke = false;\r\n\r\n if (documentData.sc) {\r\n hasStroke = true;\r\n this.values.stroke = this.buildColor(documentData.sc);\r\n this.values.sWidth = documentData.sw;\r\n }\r\n\r\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\r\n var i;\r\n var len;\r\n var letters = documentData.l;\r\n var matrixHelper = this.mHelper;\r\n this.stroke = hasStroke;\r\n this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\r\n len = documentData.finalText.length; // this.tHelper.font = this.values.fValue;\r\n\r\n var charData;\r\n var shapeData;\r\n var k;\r\n var kLen;\r\n var shapes;\r\n var j;\r\n var jLen;\r\n var pathNodes;\r\n var commands;\r\n var pathArr;\r\n var singleShape = this.data.singleShape;\r\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\r\n var xPos = 0;\r\n var yPos = 0;\r\n var firstLine = true;\r\n var cnt = 0;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\r\n shapeData = charData && charData.data || {};\r\n matrixHelper.reset();\r\n\r\n if (singleShape && letters[i].n) {\r\n xPos = -trackingOffset;\r\n yPos += documentData.yOffset;\r\n yPos += firstLine ? 1 : 0;\r\n firstLine = false;\r\n }\r\n\r\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\r\n jLen = shapes.length;\r\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\r\n\r\n if (singleShape) {\r\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\r\n }\r\n\r\n commands = createSizedArray(jLen - 1);\r\n var commandsCounter = 0;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n if (shapes[j].ty === 'sh') {\r\n kLen = shapes[j].ks.k.i.length;\r\n pathNodes = shapes[j].ks.k;\r\n pathArr = [];\r\n\r\n for (k = 1; k < kLen; k += 1) {\r\n if (k === 1) {\r\n pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\r\n }\r\n\r\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\r\n }\r\n\r\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\r\n commands[commandsCounter] = pathArr;\r\n commandsCounter += 1;\r\n }\r\n }\r\n\r\n if (singleShape) {\r\n xPos += letters[i].l;\r\n xPos += trackingOffset;\r\n }\r\n\r\n if (this.textSpans[cnt]) {\r\n this.textSpans[cnt].elem = commands;\r\n } else {\r\n this.textSpans[cnt] = {\r\n elem: commands\r\n };\r\n }\r\n\r\n cnt += 1;\r\n }\r\n };\r\n\r\n CVTextElement.prototype.renderInnerContent = function () {\r\n var ctx = this.canvasContext;\r\n ctx.font = this.values.fValue;\r\n ctx.lineCap = 'butt';\r\n ctx.lineJoin = 'miter';\r\n ctx.miterLimit = 4;\r\n\r\n if (!this.data.singleShape) {\r\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\r\n }\r\n\r\n var i;\r\n var len;\r\n var j;\r\n var jLen;\r\n var k;\r\n var kLen;\r\n var renderedLetters = this.textAnimator.renderedLetters;\r\n var letters = this.textProperty.currentData.l;\r\n len = letters.length;\r\n var renderedLetter;\r\n var lastFill = null;\r\n var lastStroke = null;\r\n var lastStrokeW = null;\r\n var commands;\r\n var pathArr;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (!letters[i].n) {\r\n renderedLetter = renderedLetters[i];\r\n\r\n if (renderedLetter) {\r\n this.globalData.renderer.save();\r\n this.globalData.renderer.ctxTransform(renderedLetter.p);\r\n this.globalData.renderer.ctxOpacity(renderedLetter.o);\r\n }\r\n\r\n if (this.fill) {\r\n if (renderedLetter && renderedLetter.fc) {\r\n if (lastFill !== renderedLetter.fc) {\r\n lastFill = renderedLetter.fc;\r\n ctx.fillStyle = renderedLetter.fc;\r\n }\r\n } else if (lastFill !== this.values.fill) {\r\n lastFill = this.values.fill;\r\n ctx.fillStyle = this.values.fill;\r\n }\r\n\r\n commands = this.textSpans[i].elem;\r\n jLen = commands.length;\r\n this.globalData.canvasContext.beginPath();\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n pathArr = commands[j];\r\n kLen = pathArr.length;\r\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\r\n\r\n for (k = 2; k < kLen; k += 6) {\r\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\r\n }\r\n }\r\n\r\n this.globalData.canvasContext.closePath();\r\n this.globalData.canvasContext.fill(); /// ctx.fillText(this.textSpans[i].val,0,0);\r\n }\r\n\r\n if (this.stroke) {\r\n if (renderedLetter && renderedLetter.sw) {\r\n if (lastStrokeW !== renderedLetter.sw) {\r\n lastStrokeW = renderedLetter.sw;\r\n ctx.lineWidth = renderedLetter.sw;\r\n }\r\n } else if (lastStrokeW !== this.values.sWidth) {\r\n lastStrokeW = this.values.sWidth;\r\n ctx.lineWidth = this.values.sWidth;\r\n }\r\n\r\n if (renderedLetter && renderedLetter.sc) {\r\n if (lastStroke !== renderedLetter.sc) {\r\n lastStroke = renderedLetter.sc;\r\n ctx.strokeStyle = renderedLetter.sc;\r\n }\r\n } else if (lastStroke !== this.values.stroke) {\r\n lastStroke = this.values.stroke;\r\n ctx.strokeStyle = this.values.stroke;\r\n }\r\n\r\n commands = this.textSpans[i].elem;\r\n jLen = commands.length;\r\n this.globalData.canvasContext.beginPath();\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n pathArr = commands[j];\r\n kLen = pathArr.length;\r\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\r\n\r\n for (k = 2; k < kLen; k += 6) {\r\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\r\n }\r\n }\r\n\r\n this.globalData.canvasContext.closePath();\r\n this.globalData.canvasContext.stroke(); /// ctx.strokeText(letters[i].val,0,0);\r\n }\r\n\r\n if (renderedLetter) {\r\n this.globalData.renderer.restore();\r\n }\r\n }\r\n }\r\n };\r\n\r\n function CVImageElement(data, globalData, comp) {\r\n this.assetData = globalData.getAssetData(data.refId);\r\n this.img = globalData.imageLoader.getAsset(this.assetData);\r\n this.initElement(data, globalData, comp);\r\n }\r\n\r\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\r\n CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\r\n CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\r\n\r\n CVImageElement.prototype.createContent = function () {\r\n if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\r\n var canvas = createTag('canvas');\r\n canvas.width = this.assetData.w;\r\n canvas.height = this.assetData.h;\r\n var ctx = canvas.getContext('2d');\r\n var imgW = this.img.width;\r\n var imgH = this.img.height;\r\n var imgRel = imgW / imgH;\r\n var canvasRel = this.assetData.w / this.assetData.h;\r\n var widthCrop;\r\n var heightCrop;\r\n var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\r\n\r\n if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') {\r\n heightCrop = imgH;\r\n widthCrop = heightCrop * canvasRel;\r\n } else {\r\n widthCrop = imgW;\r\n heightCrop = widthCrop / canvasRel;\r\n }\r\n\r\n ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\r\n this.img = canvas;\r\n }\r\n };\r\n\r\n CVImageElement.prototype.renderInnerContent = function () {\r\n this.canvasContext.drawImage(this.img, 0, 0);\r\n };\r\n\r\n CVImageElement.prototype.destroy = function () {\r\n this.img = null;\r\n };\r\n\r\n function CVSolidElement(data, globalData, comp) {\r\n this.initElement(data, globalData, comp);\r\n }\r\n\r\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\r\n CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\r\n CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\r\n\r\n CVSolidElement.prototype.renderInnerContent = function () {\r\n var ctx = this.canvasContext;\r\n ctx.fillStyle = this.data.sc;\r\n ctx.fillRect(0, 0, this.data.sw, this.data.sh); //\r\n };\r\n\r\n function CanvasRendererBase(animationItem, config) {\r\n this.animationItem = animationItem;\r\n this.renderConfig = {\r\n clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\r\n context: config && config.context || null,\r\n progressiveLoad: config && config.progressiveLoad || false,\r\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\r\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\r\n contentVisibility: config && config.contentVisibility || 'visible',\r\n className: config && config.className || '',\r\n id: config && config.id || ''\r\n };\r\n this.renderConfig.dpr = config && config.dpr || 1;\r\n\r\n if (this.animationItem.wrapper) {\r\n this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\r\n }\r\n\r\n this.renderedFrame = -1;\r\n this.globalData = {\r\n frameNum: -1,\r\n _mdf: false,\r\n renderConfig: this.renderConfig,\r\n currentGlobalAlpha: -1\r\n };\r\n this.contextData = new CVContextData();\r\n this.elements = [];\r\n this.pendingElements = [];\r\n this.transformMat = new Matrix();\r\n this.completeLayers = false;\r\n this.rendererType = 'canvas';\r\n }\r\n\r\n extendPrototype([BaseRenderer], CanvasRendererBase);\r\n\r\n CanvasRendererBase.prototype.createShape = function (data) {\r\n return new CVShapeElement(data, this.globalData, this);\r\n };\r\n\r\n CanvasRendererBase.prototype.createText = function (data) {\r\n return new CVTextElement(data, this.globalData, this);\r\n };\r\n\r\n CanvasRendererBase.prototype.createImage = function (data) {\r\n return new CVImageElement(data, this.globalData, this);\r\n };\r\n\r\n CanvasRendererBase.prototype.createSolid = function (data) {\r\n return new CVSolidElement(data, this.globalData, this);\r\n };\r\n\r\n CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\r\n\r\n CanvasRendererBase.prototype.ctxTransform = function (props) {\r\n if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\r\n return;\r\n }\r\n\r\n if (!this.renderConfig.clearCanvas) {\r\n this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\r\n return;\r\n }\r\n\r\n this.transformMat.cloneFromProps(props);\r\n var cProps = this.contextData.cTr.props;\r\n this.transformMat.transform(cProps[0], cProps[1], cProps[2], cProps[3], cProps[4], cProps[5], cProps[6], cProps[7], cProps[8], cProps[9], cProps[10], cProps[11], cProps[12], cProps[13], cProps[14], cProps[15]); // this.contextData.cTr.transform(props[0],props[1],props[2],props[3],props[4],props[5],props[6],props[7],props[8],props[9],props[10],props[11],props[12],props[13],props[14],props[15]);\r\n\r\n this.contextData.cTr.cloneFromProps(this.transformMat.props);\r\n var trProps = this.contextData.cTr.props;\r\n this.canvasContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\r\n };\r\n\r\n CanvasRendererBase.prototype.ctxOpacity = function (op) {\r\n /* if(op === 1){\r\n return;\r\n } */\r\n if (!this.renderConfig.clearCanvas) {\r\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\r\n this.globalData.currentGlobalAlpha = this.contextData.cO;\r\n return;\r\n }\r\n\r\n this.contextData.cO *= op < 0 ? 0 : op;\r\n\r\n if (this.globalData.currentGlobalAlpha !== this.contextData.cO) {\r\n this.canvasContext.globalAlpha = this.contextData.cO;\r\n this.globalData.currentGlobalAlpha = this.contextData.cO;\r\n }\r\n };\r\n\r\n CanvasRendererBase.prototype.reset = function () {\r\n if (!this.renderConfig.clearCanvas) {\r\n this.canvasContext.restore();\r\n return;\r\n }\r\n\r\n this.contextData.reset();\r\n };\r\n\r\n CanvasRendererBase.prototype.save = function (actionFlag) {\r\n if (!this.renderConfig.clearCanvas) {\r\n this.canvasContext.save();\r\n return;\r\n }\r\n\r\n if (actionFlag) {\r\n this.canvasContext.save();\r\n }\r\n\r\n var props = this.contextData.cTr.props;\r\n\r\n if (this.contextData._length <= this.contextData.cArrPos) {\r\n this.contextData.duplicate();\r\n }\r\n\r\n var i;\r\n var arr = this.contextData.saved[this.contextData.cArrPos];\r\n\r\n for (i = 0; i < 16; i += 1) {\r\n arr[i] = props[i];\r\n }\r\n\r\n this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO;\r\n this.contextData.cArrPos += 1;\r\n };\r\n\r\n CanvasRendererBase.prototype.restore = function (actionFlag) {\r\n if (!this.renderConfig.clearCanvas) {\r\n this.canvasContext.restore();\r\n return;\r\n }\r\n\r\n if (actionFlag) {\r\n this.canvasContext.restore();\r\n this.globalData.blendMode = 'source-over';\r\n }\r\n\r\n this.contextData.cArrPos -= 1;\r\n var popped = this.contextData.saved[this.contextData.cArrPos];\r\n var i;\r\n var arr = this.contextData.cTr.props;\r\n\r\n for (i = 0; i < 16; i += 1) {\r\n arr[i] = popped[i];\r\n }\r\n\r\n this.canvasContext.setTransform(popped[0], popped[1], popped[4], popped[5], popped[12], popped[13]);\r\n popped = this.contextData.savedOp[this.contextData.cArrPos];\r\n this.contextData.cO = popped;\r\n\r\n if (this.globalData.currentGlobalAlpha !== popped) {\r\n this.canvasContext.globalAlpha = popped;\r\n this.globalData.currentGlobalAlpha = popped;\r\n }\r\n };\r\n\r\n CanvasRendererBase.prototype.configAnimation = function (animData) {\r\n if (this.animationItem.wrapper) {\r\n this.animationItem.container = createTag('canvas');\r\n var containerStyle = this.animationItem.container.style;\r\n containerStyle.width = '100%';\r\n containerStyle.height = '100%';\r\n var origin = '0px 0px 0px';\r\n containerStyle.transformOrigin = origin;\r\n containerStyle.mozTransformOrigin = origin;\r\n containerStyle.webkitTransformOrigin = origin;\r\n containerStyle['-webkit-transform'] = origin;\r\n containerStyle.contentVisibility = this.renderConfig.contentVisibility;\r\n this.animationItem.wrapper.appendChild(this.animationItem.container);\r\n this.canvasContext = this.animationItem.container.getContext('2d');\r\n\r\n if (this.renderConfig.className) {\r\n this.animationItem.container.setAttribute('class', this.renderConfig.className);\r\n }\r\n\r\n if (this.renderConfig.id) {\r\n this.animationItem.container.setAttribute('id', this.renderConfig.id);\r\n }\r\n } else {\r\n this.canvasContext = this.renderConfig.context;\r\n }\r\n\r\n this.data = animData;\r\n this.layers = animData.layers;\r\n this.transformCanvas = {\r\n w: animData.w,\r\n h: animData.h,\r\n sx: 0,\r\n sy: 0,\r\n tx: 0,\r\n ty: 0\r\n };\r\n this.setupGlobalData(animData, document.body);\r\n this.globalData.canvasContext = this.canvasContext;\r\n this.globalData.renderer = this;\r\n this.globalData.isDashed = false;\r\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\r\n this.globalData.transformCanvas = this.transformCanvas;\r\n this.elements = createSizedArray(animData.layers.length);\r\n this.updateContainerSize();\r\n };\r\n\r\n CanvasRendererBase.prototype.updateContainerSize = function () {\r\n this.reset();\r\n var elementWidth;\r\n var elementHeight;\r\n\r\n if (this.animationItem.wrapper && this.animationItem.container) {\r\n elementWidth = this.animationItem.wrapper.offsetWidth;\r\n elementHeight = this.animationItem.wrapper.offsetHeight;\r\n this.animationItem.container.setAttribute('width', elementWidth * this.renderConfig.dpr);\r\n this.animationItem.container.setAttribute('height', elementHeight * this.renderConfig.dpr);\r\n } else {\r\n elementWidth = this.canvasContext.canvas.width * this.renderConfig.dpr;\r\n elementHeight = this.canvasContext.canvas.height * this.renderConfig.dpr;\r\n }\r\n\r\n var elementRel;\r\n var animationRel;\r\n\r\n if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\r\n var par = this.renderConfig.preserveAspectRatio.split(' ');\r\n var fillType = par[1] || 'meet';\r\n var pos = par[0] || 'xMidYMid';\r\n var xPos = pos.substr(0, 4);\r\n var yPos = pos.substr(4);\r\n elementRel = elementWidth / elementHeight;\r\n animationRel = this.transformCanvas.w / this.transformCanvas.h;\r\n\r\n if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {\r\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\r\n this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\r\n } else {\r\n this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\r\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\r\n }\r\n\r\n if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\r\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\r\n } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\r\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\r\n } else {\r\n this.transformCanvas.tx = 0;\r\n }\r\n\r\n if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\r\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\r\n } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\r\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\r\n } else {\r\n this.transformCanvas.ty = 0;\r\n }\r\n } else if (this.renderConfig.preserveAspectRatio === 'none') {\r\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\r\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\r\n this.transformCanvas.tx = 0;\r\n this.transformCanvas.ty = 0;\r\n } else {\r\n this.transformCanvas.sx = this.renderConfig.dpr;\r\n this.transformCanvas.sy = this.renderConfig.dpr;\r\n this.transformCanvas.tx = 0;\r\n this.transformCanvas.ty = 0;\r\n }\r\n\r\n this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\r\n /* var i, len = this.elements.length;\r\n for(i=0;i= 0; i -= 1) {\r\n if (this.elements[i]) {\r\n this.elements[i].destroy();\r\n }\r\n }\r\n\r\n this.elements.length = 0;\r\n this.globalData.canvasContext = null;\r\n this.animationItem.container = null;\r\n this.destroyed = true;\r\n };\r\n\r\n CanvasRendererBase.prototype.renderFrame = function (num, forceRender) {\r\n if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {\r\n return;\r\n }\r\n\r\n this.renderedFrame = num;\r\n this.globalData.frameNum = num - this.animationItem._isFirstFrame;\r\n this.globalData.frameId += 1;\r\n this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\r\n this.globalData.projectInterface.currentFrame = num; // console.log('--------');\r\n // console.log('NEW: ',num);\r\n\r\n var i;\r\n var len = this.layers.length;\r\n\r\n if (!this.completeLayers) {\r\n this.checkLayers(num);\r\n }\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (this.completeLayers || this.elements[i]) {\r\n this.elements[i].prepareFrame(num - this.layers[i].st);\r\n }\r\n }\r\n\r\n if (this.globalData._mdf) {\r\n if (this.renderConfig.clearCanvas === true) {\r\n this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\r\n } else {\r\n this.save();\r\n }\r\n\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n if (this.completeLayers || this.elements[i]) {\r\n this.elements[i].renderFrame();\r\n }\r\n }\r\n\r\n if (this.renderConfig.clearCanvas !== true) {\r\n this.restore();\r\n }\r\n }\r\n };\r\n\r\n CanvasRendererBase.prototype.buildItem = function (pos) {\r\n var elements = this.elements;\r\n\r\n if (elements[pos] || this.layers[pos].ty === 99) {\r\n return;\r\n }\r\n\r\n var element = this.createItem(this.layers[pos], this, this.globalData);\r\n elements[pos] = element;\r\n element.initExpressions();\r\n /* if(this.layers[pos].ty === 0){\r\n element.resize(this.globalData.transformCanvas);\r\n } */\r\n };\r\n\r\n CanvasRendererBase.prototype.checkPendingElements = function () {\r\n while (this.pendingElements.length) {\r\n var element = this.pendingElements.pop();\r\n element.checkParenting();\r\n }\r\n };\r\n\r\n CanvasRendererBase.prototype.hide = function () {\r\n this.animationItem.container.style.display = 'none';\r\n };\r\n\r\n CanvasRendererBase.prototype.show = function () {\r\n this.animationItem.container.style.display = 'block';\r\n };\r\n\r\n function CVCompElement(data, globalData, comp) {\r\n this.completeLayers = false;\r\n this.layers = data.layers;\r\n this.pendingElements = [];\r\n this.elements = createSizedArray(this.layers.length);\r\n this.initElement(data, globalData, comp);\r\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\r\n _placeholder: true\r\n };\r\n }\r\n\r\n extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\r\n\r\n CVCompElement.prototype.renderInnerContent = function () {\r\n var ctx = this.canvasContext;\r\n ctx.beginPath();\r\n ctx.moveTo(0, 0);\r\n ctx.lineTo(this.data.w, 0);\r\n ctx.lineTo(this.data.w, this.data.h);\r\n ctx.lineTo(0, this.data.h);\r\n ctx.lineTo(0, 0);\r\n ctx.clip();\r\n var i;\r\n var len = this.layers.length;\r\n\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n if (this.completeLayers || this.elements[i]) {\r\n this.elements[i].renderFrame();\r\n }\r\n }\r\n };\r\n\r\n CVCompElement.prototype.destroy = function () {\r\n var i;\r\n var len = this.layers.length;\r\n\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n if (this.elements[i]) {\r\n this.elements[i].destroy();\r\n }\r\n }\r\n\r\n this.layers = null;\r\n this.elements = null;\r\n };\r\n\r\n CVCompElement.prototype.createComp = function (data) {\r\n return new CVCompElement(data, this.globalData, this);\r\n };\r\n\r\n function CanvasRenderer(animationItem, config) {\r\n this.animationItem = animationItem;\r\n this.renderConfig = {\r\n clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\r\n context: config && config.context || null,\r\n progressiveLoad: config && config.progressiveLoad || false,\r\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\r\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\r\n contentVisibility: config && config.contentVisibility || 'visible',\r\n className: config && config.className || '',\r\n id: config && config.id || ''\r\n };\r\n this.renderConfig.dpr = config && config.dpr || 1;\r\n\r\n if (this.animationItem.wrapper) {\r\n this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\r\n }\r\n\r\n this.renderedFrame = -1;\r\n this.globalData = {\r\n frameNum: -1,\r\n _mdf: false,\r\n renderConfig: this.renderConfig,\r\n currentGlobalAlpha: -1\r\n };\r\n this.contextData = new CVContextData();\r\n this.elements = [];\r\n this.pendingElements = [];\r\n this.transformMat = new Matrix();\r\n this.completeLayers = false;\r\n this.rendererType = 'canvas';\r\n }\r\n\r\n extendPrototype([CanvasRendererBase], CanvasRenderer);\r\n\r\n CanvasRenderer.prototype.createComp = function (data) {\r\n return new CVCompElement(data, this.globalData, this);\r\n };\r\n\r\n function HBaseElement() {}\r\n\r\n HBaseElement.prototype = {\r\n checkBlendMode: function checkBlendMode() {},\r\n initRendererElement: function initRendererElement() {\r\n this.baseElement = createTag(this.data.tg || 'div');\r\n\r\n if (this.data.hasMask) {\r\n this.svgElement = createNS('svg');\r\n this.layerElement = createNS('g');\r\n this.maskedElement = this.layerElement;\r\n this.svgElement.appendChild(this.layerElement);\r\n this.baseElement.appendChild(this.svgElement);\r\n } else {\r\n this.layerElement = this.baseElement;\r\n }\r\n\r\n styleDiv(this.baseElement);\r\n },\r\n createContainerElements: function createContainerElements() {\r\n this.renderableEffectsManager = new CVEffects(this);\r\n this.transformedElement = this.baseElement;\r\n this.maskedElement = this.layerElement;\r\n\r\n if (this.data.ln) {\r\n this.layerElement.setAttribute('id', this.data.ln);\r\n }\r\n\r\n if (this.data.cl) {\r\n this.layerElement.setAttribute('class', this.data.cl);\r\n }\r\n\r\n if (this.data.bm !== 0) {\r\n this.setBlendMode();\r\n }\r\n },\r\n renderElement: function renderElement() {\r\n var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {};\r\n\r\n if (this.finalTransform._matMdf) {\r\n var matrixValue = this.finalTransform.mat.toCSS();\r\n transformedElementStyle.transform = matrixValue;\r\n transformedElementStyle.webkitTransform = matrixValue;\r\n }\r\n\r\n if (this.finalTransform._opMdf) {\r\n transformedElementStyle.opacity = this.finalTransform.mProp.o.v;\r\n }\r\n },\r\n renderFrame: function renderFrame() {\r\n // If it is exported as hidden (data.hd === true) no need to render\r\n // If it is not visible no need to render\r\n if (this.data.hd || this.hidden) {\r\n return;\r\n }\r\n\r\n this.renderTransform();\r\n this.renderRenderable();\r\n this.renderElement();\r\n this.renderInnerContent();\r\n\r\n if (this._isFirstFrame) {\r\n this._isFirstFrame = false;\r\n }\r\n },\r\n destroy: function destroy() {\r\n this.layerElement = null;\r\n this.transformedElement = null;\r\n\r\n if (this.matteElement) {\r\n this.matteElement = null;\r\n }\r\n\r\n if (this.maskManager) {\r\n this.maskManager.destroy();\r\n this.maskManager = null;\r\n }\r\n },\r\n createRenderableComponents: function createRenderableComponents() {\r\n this.maskManager = new MaskElement(this.data, this, this.globalData);\r\n },\r\n addEffects: function addEffects() {},\r\n setMatte: function setMatte() {}\r\n };\r\n HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;\r\n HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;\r\n HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting;\r\n\r\n function HSolidElement(data, globalData, comp) {\r\n this.initElement(data, globalData, comp);\r\n }\r\n\r\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\r\n\r\n HSolidElement.prototype.createContent = function () {\r\n var rect;\r\n\r\n if (this.data.hasMask) {\r\n rect = createNS('rect');\r\n rect.setAttribute('width', this.data.sw);\r\n rect.setAttribute('height', this.data.sh);\r\n rect.setAttribute('fill', this.data.sc);\r\n this.svgElement.setAttribute('width', this.data.sw);\r\n this.svgElement.setAttribute('height', this.data.sh);\r\n } else {\r\n rect = createTag('div');\r\n rect.style.width = this.data.sw + 'px';\r\n rect.style.height = this.data.sh + 'px';\r\n rect.style.backgroundColor = this.data.sc;\r\n }\r\n\r\n this.layerElement.appendChild(rect);\r\n };\r\n\r\n function HShapeElement(data, globalData, comp) {\r\n // List of drawable elements\r\n this.shapes = []; // Full shape data\r\n\r\n this.shapesData = data.shapes; // List of styles that will be applied to shapes\r\n\r\n this.stylesList = []; // List of modifiers that will be applied to shapes\r\n\r\n this.shapeModifiers = []; // List of items in shape tree\r\n\r\n this.itemsData = []; // List of items in previous shape tree\r\n\r\n this.processedElements = []; // List of animated components\r\n\r\n this.animatedContents = [];\r\n this.shapesContainer = createNS('g');\r\n this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\r\n // List of elements that have been created\r\n\r\n this.prevViewData = [];\r\n this.currentBBox = {\r\n x: 999999,\r\n y: -999999,\r\n h: 0,\r\n w: 0\r\n };\r\n }\r\n\r\n extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\r\n HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\r\n\r\n HShapeElement.prototype.createContent = function () {\r\n var cont;\r\n this.baseElement.style.fontSize = 0;\r\n\r\n if (this.data.hasMask) {\r\n this.layerElement.appendChild(this.shapesContainer);\r\n cont = this.svgElement;\r\n } else {\r\n cont = createNS('svg');\r\n var size = this.comp.data ? this.comp.data : this.globalData.compSize;\r\n cont.setAttribute('width', size.w);\r\n cont.setAttribute('height', size.h);\r\n cont.appendChild(this.shapesContainer);\r\n this.layerElement.appendChild(cont);\r\n }\r\n\r\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\r\n this.filterUniqueShapes();\r\n this.shapeCont = cont;\r\n };\r\n\r\n HShapeElement.prototype.getTransformedPoint = function (transformers, point) {\r\n var i;\r\n var len = transformers.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\r\n }\r\n\r\n return point;\r\n };\r\n\r\n HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {\r\n var shape = item.sh.v;\r\n var transformers = item.transformers;\r\n var i;\r\n var len = shape._length;\r\n var vPoint;\r\n var oPoint;\r\n var nextIPoint;\r\n var nextVPoint;\r\n\r\n if (len <= 1) {\r\n return;\r\n }\r\n\r\n for (i = 0; i < len - 1; i += 1) {\r\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\r\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\r\n nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);\r\n nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);\r\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\r\n }\r\n\r\n if (shape.c) {\r\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\r\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\r\n nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);\r\n nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);\r\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\r\n }\r\n };\r\n\r\n HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {\r\n this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);\r\n var bounds = this.shapeBoundingBox;\r\n boundingBox.x = bmMin(bounds.left, boundingBox.x);\r\n boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax);\r\n boundingBox.y = bmMin(bounds.top, boundingBox.y);\r\n boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax);\r\n };\r\n\r\n HShapeElement.prototype.shapeBoundingBox = {\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n bottom: 0\r\n };\r\n HShapeElement.prototype.tempBoundingBox = {\r\n x: 0,\r\n xMax: 0,\r\n y: 0,\r\n yMax: 0,\r\n width: 0,\r\n height: 0\r\n };\r\n\r\n HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\r\n var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\r\n\r\n for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {\r\n // eslint-disable-line no-plusplus\r\n b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\r\n a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\r\n c = 3 * p1[i] - 3 * p0[i];\r\n b |= 0; // eslint-disable-line no-bitwise\r\n\r\n a |= 0; // eslint-disable-line no-bitwise\r\n\r\n c |= 0; // eslint-disable-line no-bitwise\r\n\r\n if (a === 0 && b === 0) {//\r\n } else if (a === 0) {\r\n t = -c / b;\r\n\r\n if (t > 0 && t < 1) {\r\n bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\r\n }\r\n } else {\r\n b2ac = b * b - 4 * c * a;\r\n\r\n if (b2ac >= 0) {\r\n t1 = (-b + bmSqrt(b2ac)) / (2 * a);\r\n if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\r\n t2 = (-b - bmSqrt(b2ac)) / (2 * a);\r\n if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\r\n }\r\n }\r\n }\r\n\r\n this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]);\r\n this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]);\r\n this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]);\r\n this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]);\r\n };\r\n\r\n HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\r\n return bmPow(1 - t, 3) * p0[i] + 3 * bmPow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bmPow(t, 2) * p2[i] + bmPow(t, 3) * p3[i];\r\n };\r\n\r\n HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\r\n var i;\r\n var len = itemsData.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (itemsData[i] && itemsData[i].sh) {\r\n this.calculateShapeBoundingBox(itemsData[i], boundingBox);\r\n } else if (itemsData[i] && itemsData[i].it) {\r\n this.calculateBoundingBox(itemsData[i].it, boundingBox);\r\n }\r\n }\r\n };\r\n\r\n HShapeElement.prototype.currentBoxContains = function (box) {\r\n return this.currentBBox.x <= box.x && this.currentBBox.y <= box.y && this.currentBBox.width + this.currentBBox.x >= box.x + box.width && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;\r\n };\r\n\r\n HShapeElement.prototype.renderInnerContent = function () {\r\n this._renderShapeFrame();\r\n\r\n if (!this.hidden && (this._isFirstFrame || this._mdf)) {\r\n var tempBoundingBox = this.tempBoundingBox;\r\n var max = 999999;\r\n tempBoundingBox.x = max;\r\n tempBoundingBox.xMax = -max;\r\n tempBoundingBox.y = max;\r\n tempBoundingBox.yMax = -max;\r\n this.calculateBoundingBox(this.itemsData, tempBoundingBox);\r\n tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;\r\n tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y; // var tempBoundingBox = this.shapeCont.getBBox();\r\n\r\n if (this.currentBoxContains(tempBoundingBox)) {\r\n return;\r\n }\r\n\r\n var changed = false;\r\n\r\n if (this.currentBBox.w !== tempBoundingBox.width) {\r\n this.currentBBox.w = tempBoundingBox.width;\r\n this.shapeCont.setAttribute('width', tempBoundingBox.width);\r\n changed = true;\r\n }\r\n\r\n if (this.currentBBox.h !== tempBoundingBox.height) {\r\n this.currentBBox.h = tempBoundingBox.height;\r\n this.shapeCont.setAttribute('height', tempBoundingBox.height);\r\n changed = true;\r\n }\r\n\r\n if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {\r\n this.currentBBox.w = tempBoundingBox.width;\r\n this.currentBBox.h = tempBoundingBox.height;\r\n this.currentBBox.x = tempBoundingBox.x;\r\n this.currentBBox.y = tempBoundingBox.y;\r\n this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\r\n var shapeStyle = this.shapeCont.style;\r\n var shapeTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\r\n shapeStyle.transform = shapeTransform;\r\n shapeStyle.webkitTransform = shapeTransform;\r\n }\r\n }\r\n };\r\n\r\n function HTextElement(data, globalData, comp) {\r\n this.textSpans = [];\r\n this.textPaths = [];\r\n this.currentBBox = {\r\n x: 999999,\r\n y: -999999,\r\n h: 0,\r\n w: 0\r\n };\r\n this.renderType = 'svg';\r\n this.isMasked = false;\r\n this.initElement(data, globalData, comp);\r\n }\r\n\r\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);\r\n\r\n HTextElement.prototype.createContent = function () {\r\n this.isMasked = this.checkMasks();\r\n\r\n if (this.isMasked) {\r\n this.renderType = 'svg';\r\n this.compW = this.comp.data.w;\r\n this.compH = this.comp.data.h;\r\n this.svgElement.setAttribute('width', this.compW);\r\n this.svgElement.setAttribute('height', this.compH);\r\n var g = createNS('g');\r\n this.maskedElement.appendChild(g);\r\n this.innerElem = g;\r\n } else {\r\n this.renderType = 'html';\r\n this.innerElem = this.layerElement;\r\n }\r\n\r\n this.checkParenting();\r\n };\r\n\r\n HTextElement.prototype.buildNewText = function () {\r\n var documentData = this.textProperty.currentData;\r\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\r\n var innerElemStyle = this.innerElem.style;\r\n var textColor = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\r\n innerElemStyle.fill = textColor;\r\n innerElemStyle.color = textColor;\r\n\r\n if (documentData.sc) {\r\n innerElemStyle.stroke = this.buildColor(documentData.sc);\r\n innerElemStyle.strokeWidth = documentData.sw + 'px';\r\n }\r\n\r\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\r\n\r\n if (!this.globalData.fontManager.chars) {\r\n innerElemStyle.fontSize = documentData.finalSize + 'px';\r\n innerElemStyle.lineHeight = documentData.finalSize + 'px';\r\n\r\n if (fontData.fClass) {\r\n this.innerElem.className = fontData.fClass;\r\n } else {\r\n innerElemStyle.fontFamily = fontData.fFamily;\r\n var fWeight = documentData.fWeight;\r\n var fStyle = documentData.fStyle;\r\n innerElemStyle.fontStyle = fStyle;\r\n innerElemStyle.fontWeight = fWeight;\r\n }\r\n }\r\n\r\n var i;\r\n var len;\r\n var letters = documentData.l;\r\n len = letters.length;\r\n var tSpan;\r\n var tParent;\r\n var tCont;\r\n var matrixHelper = this.mHelper;\r\n var shapes;\r\n var shapeStr = '';\r\n var cnt = 0;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (this.globalData.fontManager.chars) {\r\n if (!this.textPaths[cnt]) {\r\n tSpan = createNS('path');\r\n tSpan.setAttribute('stroke-linecap', lineCapEnum[1]);\r\n tSpan.setAttribute('stroke-linejoin', lineJoinEnum[2]);\r\n tSpan.setAttribute('stroke-miterlimit', '4');\r\n } else {\r\n tSpan = this.textPaths[cnt];\r\n }\r\n\r\n if (!this.isMasked) {\r\n if (this.textSpans[cnt]) {\r\n tParent = this.textSpans[cnt];\r\n tCont = tParent.children[0];\r\n } else {\r\n tParent = createTag('div');\r\n tParent.style.lineHeight = 0;\r\n tCont = createNS('svg');\r\n tCont.appendChild(tSpan);\r\n styleDiv(tParent);\r\n }\r\n }\r\n } else if (!this.isMasked) {\r\n if (this.textSpans[cnt]) {\r\n tParent = this.textSpans[cnt];\r\n tSpan = this.textPaths[cnt];\r\n } else {\r\n tParent = createTag('span');\r\n styleDiv(tParent);\r\n tSpan = createTag('span');\r\n styleDiv(tSpan);\r\n tParent.appendChild(tSpan);\r\n }\r\n } else {\r\n tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');\r\n } // tSpan.setAttribute('visibility', 'hidden');\r\n\r\n\r\n if (this.globalData.fontManager.chars) {\r\n var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\r\n var shapeData;\r\n\r\n if (charData) {\r\n shapeData = charData.data;\r\n } else {\r\n shapeData = null;\r\n }\r\n\r\n matrixHelper.reset();\r\n\r\n if (shapeData && shapeData.shapes && shapeData.shapes.length) {\r\n shapes = shapeData.shapes[0].it;\r\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\r\n shapeStr = this.createPathShape(matrixHelper, shapes);\r\n tSpan.setAttribute('d', shapeStr);\r\n }\r\n\r\n if (!this.isMasked) {\r\n this.innerElem.appendChild(tParent);\r\n\r\n if (shapeData && shapeData.shapes) {\r\n // document.body.appendChild is needed to get exact measure of shape\r\n document.body.appendChild(tCont);\r\n var boundingBox = tCont.getBBox();\r\n tCont.setAttribute('width', boundingBox.width + 2);\r\n tCont.setAttribute('height', boundingBox.height + 2);\r\n tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));\r\n var tContStyle = tCont.style;\r\n var tContTranslation = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\r\n tContStyle.transform = tContTranslation;\r\n tContStyle.webkitTransform = tContTranslation;\r\n letters[i].yOffset = boundingBox.y - 1;\r\n } else {\r\n tCont.setAttribute('width', 1);\r\n tCont.setAttribute('height', 1);\r\n }\r\n\r\n tParent.appendChild(tCont);\r\n } else {\r\n this.innerElem.appendChild(tSpan);\r\n }\r\n } else {\r\n tSpan.textContent = letters[i].val;\r\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\r\n\r\n if (!this.isMasked) {\r\n this.innerElem.appendChild(tParent); //\r\n\r\n var tStyle = tSpan.style;\r\n var tSpanTranslation = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\r\n tStyle.transform = tSpanTranslation;\r\n tStyle.webkitTransform = tSpanTranslation;\r\n } else {\r\n this.innerElem.appendChild(tSpan);\r\n }\r\n } //\r\n\r\n\r\n if (!this.isMasked) {\r\n this.textSpans[cnt] = tParent;\r\n } else {\r\n this.textSpans[cnt] = tSpan;\r\n }\r\n\r\n this.textSpans[cnt].style.display = 'block';\r\n this.textPaths[cnt] = tSpan;\r\n cnt += 1;\r\n }\r\n\r\n while (cnt < this.textSpans.length) {\r\n this.textSpans[cnt].style.display = 'none';\r\n cnt += 1;\r\n }\r\n };\r\n\r\n HTextElement.prototype.renderInnerContent = function () {\r\n var svgStyle;\r\n\r\n if (this.data.singleShape) {\r\n if (!this._isFirstFrame && !this.lettersChangedFlag) {\r\n return;\r\n }\r\n\r\n if (this.isMasked && this.finalTransform._matMdf) {\r\n // Todo Benchmark if using this is better than getBBox\r\n this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\r\n svgStyle = this.svgElement.style;\r\n var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\r\n svgStyle.transform = translation;\r\n svgStyle.webkitTransform = translation;\r\n }\r\n }\r\n\r\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\r\n\r\n if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\r\n return;\r\n }\r\n\r\n var i;\r\n var len;\r\n var count = 0;\r\n var renderedLetters = this.textAnimator.renderedLetters;\r\n var letters = this.textProperty.currentData.l;\r\n len = letters.length;\r\n var renderedLetter;\r\n var textSpan;\r\n var textPath;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (letters[i].n) {\r\n count += 1;\r\n } else {\r\n textSpan = this.textSpans[i];\r\n textPath = this.textPaths[i];\r\n renderedLetter = renderedLetters[count];\r\n count += 1;\r\n\r\n if (renderedLetter._mdf.m) {\r\n if (!this.isMasked) {\r\n textSpan.style.webkitTransform = renderedLetter.m;\r\n textSpan.style.transform = renderedLetter.m;\r\n } else {\r\n textSpan.setAttribute('transform', renderedLetter.m);\r\n }\r\n } /// /textSpan.setAttribute('opacity',renderedLetter.o);\r\n\r\n\r\n textSpan.style.opacity = renderedLetter.o;\r\n\r\n if (renderedLetter.sw && renderedLetter._mdf.sw) {\r\n textPath.setAttribute('stroke-width', renderedLetter.sw);\r\n }\r\n\r\n if (renderedLetter.sc && renderedLetter._mdf.sc) {\r\n textPath.setAttribute('stroke', renderedLetter.sc);\r\n }\r\n\r\n if (renderedLetter.fc && renderedLetter._mdf.fc) {\r\n textPath.setAttribute('fill', renderedLetter.fc);\r\n textPath.style.color = renderedLetter.fc;\r\n }\r\n }\r\n }\r\n\r\n if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\r\n var boundingBox = this.innerElem.getBBox();\r\n\r\n if (this.currentBBox.w !== boundingBox.width) {\r\n this.currentBBox.w = boundingBox.width;\r\n this.svgElement.setAttribute('width', boundingBox.width);\r\n }\r\n\r\n if (this.currentBBox.h !== boundingBox.height) {\r\n this.currentBBox.h = boundingBox.height;\r\n this.svgElement.setAttribute('height', boundingBox.height);\r\n }\r\n\r\n var margin = 1;\r\n\r\n if (this.currentBBox.w !== boundingBox.width + margin * 2 || this.currentBBox.h !== boundingBox.height + margin * 2 || this.currentBBox.x !== boundingBox.x - margin || this.currentBBox.y !== boundingBox.y - margin) {\r\n this.currentBBox.w = boundingBox.width + margin * 2;\r\n this.currentBBox.h = boundingBox.height + margin * 2;\r\n this.currentBBox.x = boundingBox.x - margin;\r\n this.currentBBox.y = boundingBox.y - margin;\r\n this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\r\n svgStyle = this.svgElement.style;\r\n var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\r\n svgStyle.transform = svgTransform;\r\n svgStyle.webkitTransform = svgTransform;\r\n }\r\n }\r\n };\r\n\r\n function HCameraElement(data, globalData, comp) {\r\n this.initFrame();\r\n this.initBaseData(data, globalData, comp);\r\n this.initHierarchy();\r\n var getProp = PropertyFactory.getProp;\r\n this.pe = getProp(this, data.pe, 0, 0, this);\r\n\r\n if (data.ks.p.s) {\r\n this.px = getProp(this, data.ks.p.x, 1, 0, this);\r\n this.py = getProp(this, data.ks.p.y, 1, 0, this);\r\n this.pz = getProp(this, data.ks.p.z, 1, 0, this);\r\n } else {\r\n this.p = getProp(this, data.ks.p, 1, 0, this);\r\n }\r\n\r\n if (data.ks.a) {\r\n this.a = getProp(this, data.ks.a, 1, 0, this);\r\n }\r\n\r\n if (data.ks.or.k.length && data.ks.or.k[0].to) {\r\n var i;\r\n var len = data.ks.or.k.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n data.ks.or.k[i].to = null;\r\n data.ks.or.k[i].ti = null;\r\n }\r\n }\r\n\r\n this.or = getProp(this, data.ks.or, 1, degToRads, this);\r\n this.or.sh = true;\r\n this.rx = getProp(this, data.ks.rx, 0, degToRads, this);\r\n this.ry = getProp(this, data.ks.ry, 0, degToRads, this);\r\n this.rz = getProp(this, data.ks.rz, 0, degToRads, this);\r\n this.mat = new Matrix();\r\n this._prevMat = new Matrix();\r\n this._isFirstFrame = true; // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\r\n\r\n this.finalTransform = {\r\n mProp: this\r\n };\r\n }\r\n\r\n extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\r\n\r\n HCameraElement.prototype.setup = function () {\r\n var i;\r\n var len = this.comp.threeDElements.length;\r\n var comp;\r\n var perspectiveStyle;\r\n var containerStyle;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n // [perspectiveElem,container]\r\n comp = this.comp.threeDElements[i];\r\n\r\n if (comp.type === '3d') {\r\n perspectiveStyle = comp.perspectiveElem.style;\r\n containerStyle = comp.container.style;\r\n var perspective = this.pe.v + 'px';\r\n var origin = '0px 0px 0px';\r\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\r\n perspectiveStyle.perspective = perspective;\r\n perspectiveStyle.webkitPerspective = perspective;\r\n containerStyle.transformOrigin = origin;\r\n containerStyle.mozTransformOrigin = origin;\r\n containerStyle.webkitTransformOrigin = origin;\r\n perspectiveStyle.transform = matrix;\r\n perspectiveStyle.webkitTransform = matrix;\r\n }\r\n }\r\n };\r\n\r\n HCameraElement.prototype.createElements = function () {};\r\n\r\n HCameraElement.prototype.hide = function () {};\r\n\r\n HCameraElement.prototype.renderFrame = function () {\r\n var _mdf = this._isFirstFrame;\r\n var i;\r\n var len;\r\n\r\n if (this.hierarchy) {\r\n len = this.hierarchy.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\r\n }\r\n }\r\n\r\n if (_mdf || this.pe._mdf || this.p && this.p._mdf || this.px && (this.px._mdf || this.py._mdf || this.pz._mdf) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || this.a && this.a._mdf) {\r\n this.mat.reset();\r\n\r\n if (this.hierarchy) {\r\n len = this.hierarchy.length - 1;\r\n\r\n for (i = len; i >= 0; i -= 1) {\r\n var mTransf = this.hierarchy[i].finalTransform.mProp;\r\n this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);\r\n this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);\r\n this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);\r\n this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);\r\n this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);\r\n }\r\n }\r\n\r\n if (this.p) {\r\n this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);\r\n } else {\r\n this.mat.translate(-this.px.v, -this.py.v, this.pz.v);\r\n }\r\n\r\n if (this.a) {\r\n var diffVector;\r\n\r\n if (this.p) {\r\n diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];\r\n } else {\r\n diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];\r\n }\r\n\r\n var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2)); // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\r\n\r\n var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];\r\n var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);\r\n var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\r\n var mRotationY = Math.atan2(lookDir[0], -lookDir[2]);\r\n this.mat.rotateY(mRotationY).rotateX(-mRotationX);\r\n }\r\n\r\n this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\r\n this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\r\n this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);\r\n this.mat.translate(0, 0, this.pe.v);\r\n var hasMatrixChanged = !this._prevMat.equals(this.mat);\r\n\r\n if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\r\n len = this.comp.threeDElements.length;\r\n var comp;\r\n var perspectiveStyle;\r\n var containerStyle;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n comp = this.comp.threeDElements[i];\r\n\r\n if (comp.type === '3d') {\r\n if (hasMatrixChanged) {\r\n var matValue = this.mat.toCSS();\r\n containerStyle = comp.container.style;\r\n containerStyle.transform = matValue;\r\n containerStyle.webkitTransform = matValue;\r\n }\r\n\r\n if (this.pe._mdf) {\r\n perspectiveStyle = comp.perspectiveElem.style;\r\n perspectiveStyle.perspective = this.pe.v + 'px';\r\n perspectiveStyle.webkitPerspective = this.pe.v + 'px';\r\n }\r\n }\r\n }\r\n\r\n this.mat.clone(this._prevMat);\r\n }\r\n }\r\n\r\n this._isFirstFrame = false;\r\n };\r\n\r\n HCameraElement.prototype.prepareFrame = function (num) {\r\n this.prepareProperties(num, true);\r\n };\r\n\r\n HCameraElement.prototype.destroy = function () {};\r\n\r\n HCameraElement.prototype.getBaseElement = function () {\r\n return null;\r\n };\r\n\r\n function HImageElement(data, globalData, comp) {\r\n this.assetData = globalData.getAssetData(data.refId);\r\n this.initElement(data, globalData, comp);\r\n }\r\n\r\n extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\r\n\r\n HImageElement.prototype.createContent = function () {\r\n var assetPath = this.globalData.getAssetsPath(this.assetData);\r\n var img = new Image();\r\n\r\n if (this.data.hasMask) {\r\n this.imageElem = createNS('image');\r\n this.imageElem.setAttribute('width', this.assetData.w + 'px');\r\n this.imageElem.setAttribute('height', this.assetData.h + 'px');\r\n this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\r\n this.layerElement.appendChild(this.imageElem);\r\n this.baseElement.setAttribute('width', this.assetData.w);\r\n this.baseElement.setAttribute('height', this.assetData.h);\r\n } else {\r\n this.layerElement.appendChild(img);\r\n }\r\n\r\n img.crossOrigin = 'anonymous';\r\n img.src = assetPath;\r\n\r\n if (this.data.ln) {\r\n this.baseElement.setAttribute('id', this.data.ln);\r\n }\r\n };\r\n\r\n function HybridRendererBase(animationItem, config) {\r\n this.animationItem = animationItem;\r\n this.layers = null;\r\n this.renderedFrame = -1;\r\n this.renderConfig = {\r\n className: config && config.className || '',\r\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\r\n hideOnTransparent: !(config && config.hideOnTransparent === false),\r\n filterSize: {\r\n width: config && config.filterSize && config.filterSize.width || '400%',\r\n height: config && config.filterSize && config.filterSize.height || '400%',\r\n x: config && config.filterSize && config.filterSize.x || '-100%',\r\n y: config && config.filterSize && config.filterSize.y || '-100%'\r\n }\r\n };\r\n this.globalData = {\r\n _mdf: false,\r\n frameNum: -1,\r\n renderConfig: this.renderConfig\r\n };\r\n this.pendingElements = [];\r\n this.elements = [];\r\n this.threeDElements = [];\r\n this.destroyed = false;\r\n this.camera = null;\r\n this.supports3d = true;\r\n this.rendererType = 'html';\r\n }\r\n\r\n extendPrototype([BaseRenderer], HybridRendererBase);\r\n HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem;\r\n\r\n HybridRendererBase.prototype.checkPendingElements = function () {\r\n while (this.pendingElements.length) {\r\n var element = this.pendingElements.pop();\r\n element.checkParenting();\r\n }\r\n };\r\n\r\n HybridRendererBase.prototype.appendElementInPos = function (element, pos) {\r\n var newDOMElement = element.getBaseElement();\r\n\r\n if (!newDOMElement) {\r\n return;\r\n }\r\n\r\n var layer = this.layers[pos];\r\n\r\n if (!layer.ddd || !this.supports3d) {\r\n if (this.threeDElements) {\r\n this.addTo3dContainer(newDOMElement, pos);\r\n } else {\r\n var i = 0;\r\n var nextDOMElement;\r\n var nextLayer;\r\n var tmpDOMElement;\r\n\r\n while (i < pos) {\r\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\r\n nextLayer = this.elements[i];\r\n tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\r\n nextDOMElement = tmpDOMElement || nextDOMElement;\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n if (nextDOMElement) {\r\n if (!layer.ddd || !this.supports3d) {\r\n this.layerElement.insertBefore(newDOMElement, nextDOMElement);\r\n }\r\n } else if (!layer.ddd || !this.supports3d) {\r\n this.layerElement.appendChild(newDOMElement);\r\n }\r\n }\r\n } else {\r\n this.addTo3dContainer(newDOMElement, pos);\r\n }\r\n };\r\n\r\n HybridRendererBase.prototype.createShape = function (data) {\r\n if (!this.supports3d) {\r\n return new SVGShapeElement(data, this.globalData, this);\r\n }\r\n\r\n return new HShapeElement(data, this.globalData, this);\r\n };\r\n\r\n HybridRendererBase.prototype.createText = function (data) {\r\n if (!this.supports3d) {\r\n return new SVGTextLottieElement(data, this.globalData, this);\r\n }\r\n\r\n return new HTextElement(data, this.globalData, this);\r\n };\r\n\r\n HybridRendererBase.prototype.createCamera = function (data) {\r\n this.camera = new HCameraElement(data, this.globalData, this);\r\n return this.camera;\r\n };\r\n\r\n HybridRendererBase.prototype.createImage = function (data) {\r\n if (!this.supports3d) {\r\n return new IImageElement(data, this.globalData, this);\r\n }\r\n\r\n return new HImageElement(data, this.globalData, this);\r\n };\r\n\r\n HybridRendererBase.prototype.createSolid = function (data) {\r\n if (!this.supports3d) {\r\n return new ISolidElement(data, this.globalData, this);\r\n }\r\n\r\n return new HSolidElement(data, this.globalData, this);\r\n };\r\n\r\n HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\r\n\r\n HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) {\r\n var i = 0;\r\n var len = this.threeDElements.length;\r\n\r\n while (i < len) {\r\n if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\r\n return this.threeDElements[i].perspectiveElem;\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n HybridRendererBase.prototype.createThreeDContainer = function (pos, type) {\r\n var perspectiveElem = createTag('div');\r\n var style;\r\n var containerStyle;\r\n styleDiv(perspectiveElem);\r\n var container = createTag('div');\r\n styleDiv(container);\r\n\r\n if (type === '3d') {\r\n style = perspectiveElem.style;\r\n style.width = this.globalData.compSize.w + 'px';\r\n style.height = this.globalData.compSize.h + 'px';\r\n var center = '50% 50%';\r\n style.webkitTransformOrigin = center;\r\n style.mozTransformOrigin = center;\r\n style.transformOrigin = center;\r\n containerStyle = container.style;\r\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\r\n containerStyle.transform = matrix;\r\n containerStyle.webkitTransform = matrix;\r\n }\r\n\r\n perspectiveElem.appendChild(container); // this.resizerElem.appendChild(perspectiveElem);\r\n\r\n var threeDContainerData = {\r\n container: container,\r\n perspectiveElem: perspectiveElem,\r\n startPos: pos,\r\n endPos: pos,\r\n type: type\r\n };\r\n this.threeDElements.push(threeDContainerData);\r\n return threeDContainerData;\r\n };\r\n\r\n HybridRendererBase.prototype.build3dContainers = function () {\r\n var i;\r\n var len = this.layers.length;\r\n var lastThreeDContainerData;\r\n var currentContainer = '';\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (this.layers[i].ddd && this.layers[i].ty !== 3) {\r\n if (currentContainer !== '3d') {\r\n currentContainer = '3d';\r\n lastThreeDContainerData = this.createThreeDContainer(i, '3d');\r\n }\r\n\r\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\r\n } else {\r\n if (currentContainer !== '2d') {\r\n currentContainer = '2d';\r\n lastThreeDContainerData = this.createThreeDContainer(i, '2d');\r\n }\r\n\r\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\r\n }\r\n }\r\n\r\n len = this.threeDElements.length;\r\n\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\r\n }\r\n };\r\n\r\n HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) {\r\n var i = 0;\r\n var len = this.threeDElements.length;\r\n\r\n while (i < len) {\r\n if (pos <= this.threeDElements[i].endPos) {\r\n var j = this.threeDElements[i].startPos;\r\n var nextElement;\r\n\r\n while (j < pos) {\r\n if (this.elements[j] && this.elements[j].getBaseElement) {\r\n nextElement = this.elements[j].getBaseElement();\r\n }\r\n\r\n j += 1;\r\n }\r\n\r\n if (nextElement) {\r\n this.threeDElements[i].container.insertBefore(elem, nextElement);\r\n } else {\r\n this.threeDElements[i].container.appendChild(elem);\r\n }\r\n\r\n break;\r\n }\r\n\r\n i += 1;\r\n }\r\n };\r\n\r\n HybridRendererBase.prototype.configAnimation = function (animData) {\r\n var resizerElem = createTag('div');\r\n var wrapper = this.animationItem.wrapper;\r\n var style = resizerElem.style;\r\n style.width = animData.w + 'px';\r\n style.height = animData.h + 'px';\r\n this.resizerElem = resizerElem;\r\n styleDiv(resizerElem);\r\n style.transformStyle = 'flat';\r\n style.mozTransformStyle = 'flat';\r\n style.webkitTransformStyle = 'flat';\r\n\r\n if (this.renderConfig.className) {\r\n resizerElem.setAttribute('class', this.renderConfig.className);\r\n }\r\n\r\n wrapper.appendChild(resizerElem);\r\n style.overflow = 'hidden';\r\n var svg = createNS('svg');\r\n svg.setAttribute('width', '1');\r\n svg.setAttribute('height', '1');\r\n styleDiv(svg);\r\n this.resizerElem.appendChild(svg);\r\n var defs = createNS('defs');\r\n svg.appendChild(defs);\r\n this.data = animData; // Mask animation\r\n\r\n this.setupGlobalData(animData, svg);\r\n this.globalData.defs = defs;\r\n this.layers = animData.layers;\r\n this.layerElement = this.resizerElem;\r\n this.build3dContainers();\r\n this.updateContainerSize();\r\n };\r\n\r\n HybridRendererBase.prototype.destroy = function () {\r\n if (this.animationItem.wrapper) {\r\n this.animationItem.wrapper.innerText = '';\r\n }\r\n\r\n this.animationItem.container = null;\r\n this.globalData.defs = null;\r\n var i;\r\n var len = this.layers ? this.layers.length : 0;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n this.elements[i].destroy();\r\n }\r\n\r\n this.elements.length = 0;\r\n this.destroyed = true;\r\n this.animationItem = null;\r\n };\r\n\r\n HybridRendererBase.prototype.updateContainerSize = function () {\r\n var elementWidth = this.animationItem.wrapper.offsetWidth;\r\n var elementHeight = this.animationItem.wrapper.offsetHeight;\r\n var elementRel = elementWidth / elementHeight;\r\n var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;\r\n var sx;\r\n var sy;\r\n var tx;\r\n var ty;\r\n\r\n if (animationRel > elementRel) {\r\n sx = elementWidth / this.globalData.compSize.w;\r\n sy = elementWidth / this.globalData.compSize.w;\r\n tx = 0;\r\n ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2;\r\n } else {\r\n sx = elementHeight / this.globalData.compSize.h;\r\n sy = elementHeight / this.globalData.compSize.h;\r\n tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;\r\n ty = 0;\r\n }\r\n\r\n var style = this.resizerElem.style;\r\n style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\r\n style.transform = style.webkitTransform;\r\n };\r\n\r\n HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\r\n\r\n HybridRendererBase.prototype.hide = function () {\r\n this.resizerElem.style.display = 'none';\r\n };\r\n\r\n HybridRendererBase.prototype.show = function () {\r\n this.resizerElem.style.display = 'block';\r\n };\r\n\r\n HybridRendererBase.prototype.initItems = function () {\r\n this.buildAllItems();\r\n\r\n if (this.camera) {\r\n this.camera.setup();\r\n } else {\r\n var cWidth = this.globalData.compSize.w;\r\n var cHeight = this.globalData.compSize.h;\r\n var i;\r\n var len = this.threeDElements.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n var style = this.threeDElements[i].perspectiveElem.style;\r\n style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\r\n style.perspective = style.webkitPerspective;\r\n }\r\n }\r\n };\r\n\r\n HybridRendererBase.prototype.searchExtraCompositions = function (assets) {\r\n var i;\r\n var len = assets.length;\r\n var floatingContainer = createTag('div');\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (assets[i].xt) {\r\n var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\r\n comp.initExpressions();\r\n this.globalData.projectInterface.registerComposition(comp);\r\n }\r\n }\r\n };\r\n\r\n function HCompElement(data, globalData, comp) {\r\n this.layers = data.layers;\r\n this.supports3d = !data.hasMask;\r\n this.completeLayers = false;\r\n this.pendingElements = [];\r\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\r\n this.initElement(data, globalData, comp);\r\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\r\n _placeholder: true\r\n };\r\n }\r\n\r\n extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement);\r\n HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\r\n\r\n HCompElement.prototype.createContainerElements = function () {\r\n this._createBaseContainerElements(); // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\r\n\r\n\r\n if (this.data.hasMask) {\r\n this.svgElement.setAttribute('width', this.data.w);\r\n this.svgElement.setAttribute('height', this.data.h);\r\n this.transformedElement = this.baseElement;\r\n } else {\r\n this.transformedElement = this.layerElement;\r\n }\r\n };\r\n\r\n HCompElement.prototype.addTo3dContainer = function (elem, pos) {\r\n var j = 0;\r\n var nextElement;\r\n\r\n while (j < pos) {\r\n if (this.elements[j] && this.elements[j].getBaseElement) {\r\n nextElement = this.elements[j].getBaseElement();\r\n }\r\n\r\n j += 1;\r\n }\r\n\r\n if (nextElement) {\r\n this.layerElement.insertBefore(elem, nextElement);\r\n } else {\r\n this.layerElement.appendChild(elem);\r\n }\r\n };\r\n\r\n HCompElement.prototype.createComp = function (data) {\r\n if (!this.supports3d) {\r\n return new SVGCompElement(data, this.globalData, this);\r\n }\r\n\r\n return new HCompElement(data, this.globalData, this);\r\n };\r\n\r\n function HybridRenderer(animationItem, config) {\r\n this.animationItem = animationItem;\r\n this.layers = null;\r\n this.renderedFrame = -1;\r\n this.renderConfig = {\r\n className: config && config.className || '',\r\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\r\n hideOnTransparent: !(config && config.hideOnTransparent === false),\r\n filterSize: {\r\n width: config && config.filterSize && config.filterSize.width || '400%',\r\n height: config && config.filterSize && config.filterSize.height || '400%',\r\n x: config && config.filterSize && config.filterSize.x || '-100%',\r\n y: config && config.filterSize && config.filterSize.y || '-100%'\r\n }\r\n };\r\n this.globalData = {\r\n _mdf: false,\r\n frameNum: -1,\r\n renderConfig: this.renderConfig\r\n };\r\n this.pendingElements = [];\r\n this.elements = [];\r\n this.threeDElements = [];\r\n this.destroyed = false;\r\n this.camera = null;\r\n this.supports3d = true;\r\n this.rendererType = 'html';\r\n }\r\n\r\n extendPrototype([HybridRendererBase], HybridRenderer);\r\n\r\n HybridRenderer.prototype.createComp = function (data) {\r\n if (!this.supports3d) {\r\n return new SVGCompElement(data, this.globalData, this);\r\n }\r\n\r\n return new HCompElement(data, this.globalData, this);\r\n };\r\n\r\n var Expressions = function () {\r\n var ob = {};\r\n ob.initExpressions = initExpressions;\r\n\r\n function initExpressions(animation) {\r\n var stackCount = 0;\r\n var registers = [];\r\n\r\n function pushExpression() {\r\n stackCount += 1;\r\n }\r\n\r\n function popExpression() {\r\n stackCount -= 1;\r\n\r\n if (stackCount === 0) {\r\n releaseInstances();\r\n }\r\n }\r\n\r\n function registerExpressionProperty(expression) {\r\n if (registers.indexOf(expression) === -1) {\r\n registers.push(expression);\r\n }\r\n }\r\n\r\n function releaseInstances() {\r\n var i;\r\n var len = registers.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n registers[i].release();\r\n }\r\n\r\n registers.length = 0;\r\n }\r\n\r\n animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\r\n animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\r\n animation.renderer.globalData.pushExpression = pushExpression;\r\n animation.renderer.globalData.popExpression = popExpression;\r\n animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\r\n }\r\n\r\n return ob;\r\n }();\r\n\r\n function _typeof$1(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$1 = function _typeof(obj) { return typeof obj; }; } else { _typeof$1 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$1(obj); }\r\n\r\n /* eslint-disable */\r\n\r\n /*\r\n Copyright 2014 David Bau.\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining\r\n a copy of this software and associated documentation files (the\r\n \"Software\"), to deal in the Software without restriction, including\r\n without limitation the rights to use, copy, modify, merge, publish,\r\n distribute, sublicense, and/or sell copies of the Software, and to\r\n permit persons to whom the Software is furnished to do so, subject to\r\n the following conditions:\r\n\r\n The above copyright notice and this permission notice shall be\r\n included in all copies or substantial portions of the Software.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n */\r\n function seedRandom(pool, math) {\r\n //\r\n // The following constants are related to IEEE 754 limits.\r\n //\r\n var global = this,\r\n width = 256,\r\n // each RC4 output is 0 <= x < 256\r\n chunks = 6,\r\n // at least six RC4 outputs for each double\r\n digits = 52,\r\n // there are 52 significant digits in a double\r\n rngname = 'random',\r\n // rngname: name for Math.random and Math.seedrandom\r\n startdenom = math.pow(width, chunks),\r\n significance = math.pow(2, digits),\r\n overflow = significance * 2,\r\n mask = width - 1,\r\n nodecrypto; // node.js crypto module, initialized at the bottom.\r\n //\r\n // seedrandom()\r\n // This is the seedrandom function described above.\r\n //\r\n\r\n function seedrandom(seed, options, callback) {\r\n var key = [];\r\n options = options === true ? {\r\n entropy: true\r\n } : options || {}; // Flatten the seed string or build one from local entropy if needed.\r\n\r\n var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); // Use the seed to initialize an ARC4 generator.\r\n\r\n var arc4 = new ARC4(key); // This function returns a random double in [0, 1) that contains\r\n // randomness in every bit of the mantissa of the IEEE 754 value.\r\n\r\n var prng = function prng() {\r\n var n = arc4.g(chunks),\r\n // Start with a numerator n < 2 ^ 48\r\n d = startdenom,\r\n // and denominator d = 2 ^ 48.\r\n x = 0; // and no 'extra last byte'.\r\n\r\n while (n < significance) {\r\n // Fill up all significant digits by\r\n n = (n + x) * width; // shifting numerator and\r\n\r\n d *= width; // denominator and generating a\r\n\r\n x = arc4.g(1); // new least-significant-byte.\r\n }\r\n\r\n while (n >= overflow) {\r\n // To avoid rounding up, before adding\r\n n /= 2; // last byte, shift everything\r\n\r\n d /= 2; // right using integer math until\r\n\r\n x >>>= 1; // we have exactly the desired bits.\r\n }\r\n\r\n return (n + x) / d; // Form the number within [0, 1).\r\n };\r\n\r\n prng.int32 = function () {\r\n return arc4.g(4) | 0;\r\n };\r\n\r\n prng.quick = function () {\r\n return arc4.g(4) / 0x100000000;\r\n };\r\n\r\n prng[\"double\"] = prng; // Mix the randomness into accumulated entropy.\r\n\r\n mixkey(tostring(arc4.S), pool); // Calling convention: what to return as a function of prng, seed, is_math.\r\n\r\n return (options.pass || callback || function (prng, seed, is_math_call, state) {\r\n if (state) {\r\n // Load the arc4 state from the given state if it has an S array.\r\n if (state.S) {\r\n copy(state, arc4);\r\n } // Only provide the .state method if requested via options.state.\r\n\r\n\r\n prng.state = function () {\r\n return copy(arc4, {});\r\n };\r\n } // If called as a method of Math (Math.seedrandom()), mutate\r\n // Math.random because that is how seedrandom.js has worked since v1.0.\r\n\r\n\r\n if (is_math_call) {\r\n math[rngname] = prng;\r\n return seed;\r\n } // Otherwise, it is a newer calling convention, so return the\r\n // prng directly.\r\n else return prng;\r\n })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);\r\n }\r\n\r\n math['seed' + rngname] = seedrandom; //\r\n // ARC4\r\n //\r\n // An ARC4 implementation. The constructor takes a key in the form of\r\n // an array of at most (width) integers that should be 0 <= x < (width).\r\n //\r\n // The g(count) method returns a pseudorandom integer that concatenates\r\n // the next (count) outputs from ARC4. Its return value is a number x\r\n // that is in the range 0 <= x < (width ^ count).\r\n //\r\n\r\n function ARC4(key) {\r\n var t,\r\n keylen = key.length,\r\n me = this,\r\n i = 0,\r\n j = me.i = me.j = 0,\r\n s = me.S = []; // The empty key [] is treated as [0].\r\n\r\n if (!keylen) {\r\n key = [keylen++];\r\n } // Set up S using the standard key scheduling algorithm.\r\n\r\n\r\n while (i < width) {\r\n s[i] = i++;\r\n }\r\n\r\n for (i = 0; i < width; i++) {\r\n s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];\r\n s[j] = t;\r\n } // The \"g\" method returns the next (count) outputs as one number.\r\n\r\n\r\n me.g = function (count) {\r\n // Using instance members instead of closure state nearly doubles speed.\r\n var t,\r\n r = 0,\r\n i = me.i,\r\n j = me.j,\r\n s = me.S;\r\n\r\n while (count--) {\r\n t = s[i = mask & i + 1];\r\n r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)];\r\n }\r\n\r\n me.i = i;\r\n me.j = j;\r\n return r; // For robust unpredictability, the function call below automatically\r\n // discards an initial batch of values. This is called RC4-drop[256].\r\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\r\n };\r\n } //\r\n // copy()\r\n // Copies internal state of ARC4 to or from a plain object.\r\n //\r\n\r\n\r\n function copy(f, t) {\r\n t.i = f.i;\r\n t.j = f.j;\r\n t.S = f.S.slice();\r\n return t;\r\n } //\r\n // flatten()\r\n // Converts an object tree to nested arrays of strings.\r\n //\r\n\r\n\r\n function flatten(obj, depth) {\r\n var result = [],\r\n typ = _typeof$1(obj),\r\n prop;\r\n\r\n if (depth && typ == 'object') {\r\n for (prop in obj) {\r\n try {\r\n result.push(flatten(obj[prop], depth - 1));\r\n } catch (e) {}\r\n }\r\n }\r\n\r\n return result.length ? result : typ == 'string' ? obj : obj + '\\0';\r\n } //\r\n // mixkey()\r\n // Mixes a string seed into a key that is an array of integers, and\r\n // returns a shortened string seed that is equivalent to the result key.\r\n //\r\n\r\n\r\n function mixkey(seed, key) {\r\n var stringseed = seed + '',\r\n smear,\r\n j = 0;\r\n\r\n while (j < stringseed.length) {\r\n key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\r\n }\r\n\r\n return tostring(key);\r\n } //\r\n // autoseed()\r\n // Returns an object for autoseeding, using window.crypto and Node crypto\r\n // module if available.\r\n //\r\n\r\n\r\n function autoseed() {\r\n try {\r\n if (nodecrypto) {\r\n return tostring(nodecrypto.randomBytes(width));\r\n }\r\n\r\n var out = new Uint8Array(width);\r\n (global.crypto || global.msCrypto).getRandomValues(out);\r\n return tostring(out);\r\n } catch (e) {\r\n var browser = global.navigator,\r\n plugins = browser && browser.plugins;\r\n return [+new Date(), global, plugins, global.screen, tostring(pool)];\r\n }\r\n } //\r\n // tostring()\r\n // Converts an array of charcodes to a string\r\n //\r\n\r\n\r\n function tostring(a) {\r\n return String.fromCharCode.apply(0, a);\r\n } //\r\n // When seedrandom.js is loaded, we immediately mix a few bits\r\n // from the built-in RNG into the entropy pool. Because we do\r\n // not want to interfere with deterministic PRNG state later,\r\n // seedrandom will not call math.random on its own again after\r\n // initialization.\r\n //\r\n\r\n\r\n mixkey(math.random(), pool); //\r\n // Nodejs and AMD support: export the implementation as a module using\r\n // either convention.\r\n //\r\n // End anonymous scope, and pass initial values.\r\n }\r\n\r\n ;\r\n\r\n function initialize$2(BMMath) {\r\n seedRandom([], BMMath);\r\n }\r\n\r\n var propTypes = {\r\n SHAPE: 'shape'\r\n };\r\n\r\n function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\n var ExpressionManager = function () {\r\n 'use strict';\r\n\r\n var ob = {};\r\n var Math = BMMath;\r\n var window = null;\r\n var document = null;\r\n var XMLHttpRequest = null;\r\n var fetch = null;\r\n var frames = null;\r\n initialize$2(BMMath);\r\n\r\n function $bm_isInstanceOfArray(arr) {\r\n return arr.constructor === Array || arr.constructor === Float32Array;\r\n }\r\n\r\n function isNumerable(tOfV, v) {\r\n return tOfV === 'number' || tOfV === 'boolean' || tOfV === 'string' || v instanceof Number;\r\n }\r\n\r\n function $bm_neg(a) {\r\n var tOfA = _typeof(a);\r\n\r\n if (tOfA === 'number' || tOfA === 'boolean' || a instanceof Number) {\r\n return -a;\r\n }\r\n\r\n if ($bm_isInstanceOfArray(a)) {\r\n var i;\r\n var lenA = a.length;\r\n var retArr = [];\r\n\r\n for (i = 0; i < lenA; i += 1) {\r\n retArr[i] = -a[i];\r\n }\r\n\r\n return retArr;\r\n }\r\n\r\n if (a.propType) {\r\n return a.v;\r\n }\r\n\r\n return -a;\r\n }\r\n\r\n var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;\r\n var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;\r\n var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;\r\n\r\n function sum(a, b) {\r\n var tOfA = _typeof(a);\r\n\r\n var tOfB = _typeof(b);\r\n\r\n if (tOfA === 'string' || tOfB === 'string') {\r\n return a + b;\r\n }\r\n\r\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\r\n return a + b;\r\n }\r\n\r\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\r\n a = a.slice(0);\r\n a[0] += b;\r\n return a;\r\n }\r\n\r\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\r\n b = b.slice(0);\r\n b[0] = a + b[0];\r\n return b;\r\n }\r\n\r\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\r\n var i = 0;\r\n var lenA = a.length;\r\n var lenB = b.length;\r\n var retArr = [];\r\n\r\n while (i < lenA || i < lenB) {\r\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\r\n retArr[i] = a[i] + b[i];\r\n } else {\r\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n return retArr;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n var add = sum;\r\n\r\n function sub(a, b) {\r\n var tOfA = _typeof(a);\r\n\r\n var tOfB = _typeof(b);\r\n\r\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\r\n if (tOfA === 'string') {\r\n a = parseInt(a, 10);\r\n }\r\n\r\n if (tOfB === 'string') {\r\n b = parseInt(b, 10);\r\n }\r\n\r\n return a - b;\r\n }\r\n\r\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\r\n a = a.slice(0);\r\n a[0] -= b;\r\n return a;\r\n }\r\n\r\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\r\n b = b.slice(0);\r\n b[0] = a - b[0];\r\n return b;\r\n }\r\n\r\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\r\n var i = 0;\r\n var lenA = a.length;\r\n var lenB = b.length;\r\n var retArr = [];\r\n\r\n while (i < lenA || i < lenB) {\r\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\r\n retArr[i] = a[i] - b[i];\r\n } else {\r\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n return retArr;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n function mul(a, b) {\r\n var tOfA = _typeof(a);\r\n\r\n var tOfB = _typeof(b);\r\n\r\n var arr;\r\n\r\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\r\n return a * b;\r\n }\r\n\r\n var i;\r\n var len;\r\n\r\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\r\n len = a.length;\r\n arr = createTypedArray('float32', len);\r\n\r\n for (i = 0; i < len; i += 1) {\r\n arr[i] = a[i] * b;\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\r\n len = b.length;\r\n arr = createTypedArray('float32', len);\r\n\r\n for (i = 0; i < len; i += 1) {\r\n arr[i] = a * b[i];\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n function div(a, b) {\r\n var tOfA = _typeof(a);\r\n\r\n var tOfB = _typeof(b);\r\n\r\n var arr;\r\n\r\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\r\n return a / b;\r\n }\r\n\r\n var i;\r\n var len;\r\n\r\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\r\n len = a.length;\r\n arr = createTypedArray('float32', len);\r\n\r\n for (i = 0; i < len; i += 1) {\r\n arr[i] = a[i] / b;\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\r\n len = b.length;\r\n arr = createTypedArray('float32', len);\r\n\r\n for (i = 0; i < len; i += 1) {\r\n arr[i] = a / b[i];\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n function mod(a, b) {\r\n if (typeof a === 'string') {\r\n a = parseInt(a, 10);\r\n }\r\n\r\n if (typeof b === 'string') {\r\n b = parseInt(b, 10);\r\n }\r\n\r\n return a % b;\r\n }\r\n\r\n var $bm_sum = sum;\r\n var $bm_sub = sub;\r\n var $bm_mul = mul;\r\n var $bm_div = div;\r\n var $bm_mod = mod;\r\n\r\n function clamp(num, min, max) {\r\n if (min > max) {\r\n var mm = max;\r\n max = min;\r\n min = mm;\r\n }\r\n\r\n return Math.min(Math.max(num, min), max);\r\n }\r\n\r\n function radiansToDegrees(val) {\r\n return val / degToRads;\r\n }\r\n\r\n var radians_to_degrees = radiansToDegrees;\r\n\r\n function degreesToRadians(val) {\r\n return val * degToRads;\r\n }\r\n\r\n var degrees_to_radians = radiansToDegrees;\r\n var helperLengthArray = [0, 0, 0, 0, 0, 0];\r\n\r\n function length(arr1, arr2) {\r\n if (typeof arr1 === 'number' || arr1 instanceof Number) {\r\n arr2 = arr2 || 0;\r\n return Math.abs(arr1 - arr2);\r\n }\r\n\r\n if (!arr2) {\r\n arr2 = helperLengthArray;\r\n }\r\n\r\n var i;\r\n var len = Math.min(arr1.length, arr2.length);\r\n var addedLength = 0;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n addedLength += Math.pow(arr2[i] - arr1[i], 2);\r\n }\r\n\r\n return Math.sqrt(addedLength);\r\n }\r\n\r\n function normalize(vec) {\r\n return div(vec, length(vec));\r\n }\r\n\r\n function rgbToHsl(val) {\r\n var r = val[0];\r\n var g = val[1];\r\n var b = val[2];\r\n var max = Math.max(r, g, b);\r\n var min = Math.min(r, g, b);\r\n var h;\r\n var s;\r\n var l = (max + min) / 2;\r\n\r\n if (max === min) {\r\n h = 0; // achromatic\r\n\r\n s = 0; // achromatic\r\n } else {\r\n var d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n\r\n h /= 6;\r\n }\r\n\r\n return [h, s, l, val[3]];\r\n }\r\n\r\n function hue2rgb(p, q, t) {\r\n if (t < 0) t += 1;\r\n if (t > 1) t -= 1;\r\n if (t < 1 / 6) return p + (q - p) * 6 * t;\r\n if (t < 1 / 2) return q;\r\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\r\n return p;\r\n }\r\n\r\n function hslToRgb(val) {\r\n var h = val[0];\r\n var s = val[1];\r\n var l = val[2];\r\n var r;\r\n var g;\r\n var b;\r\n\r\n if (s === 0) {\r\n r = l; // achromatic\r\n\r\n b = l; // achromatic\r\n\r\n g = l; // achromatic\r\n } else {\r\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\r\n var p = 2 * l - q;\r\n r = hue2rgb(p, q, h + 1 / 3);\r\n g = hue2rgb(p, q, h);\r\n b = hue2rgb(p, q, h - 1 / 3);\r\n }\r\n\r\n return [r, g, b, val[3]];\r\n }\r\n\r\n function linear(t, tMin, tMax, value1, value2) {\r\n if (value1 === undefined || value2 === undefined) {\r\n value1 = tMin;\r\n value2 = tMax;\r\n tMin = 0;\r\n tMax = 1;\r\n }\r\n\r\n if (tMax < tMin) {\r\n var _tMin = tMax;\r\n tMax = tMin;\r\n tMin = _tMin;\r\n }\r\n\r\n if (t <= tMin) {\r\n return value1;\r\n }\r\n\r\n if (t >= tMax) {\r\n return value2;\r\n }\r\n\r\n var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\r\n\r\n if (!value1.length) {\r\n return value1 + (value2 - value1) * perc;\r\n }\r\n\r\n var i;\r\n var len = value1.length;\r\n var arr = createTypedArray('float32', len);\r\n\r\n for (i = 0; i < len; i += 1) {\r\n arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n function random(min, max) {\r\n if (max === undefined) {\r\n if (min === undefined) {\r\n min = 0;\r\n max = 1;\r\n } else {\r\n max = min;\r\n min = undefined;\r\n }\r\n }\r\n\r\n if (max.length) {\r\n var i;\r\n var len = max.length;\r\n\r\n if (!min) {\r\n min = createTypedArray('float32', len);\r\n }\r\n\r\n var arr = createTypedArray('float32', len);\r\n var rnd = BMMath.random();\r\n\r\n for (i = 0; i < len; i += 1) {\r\n arr[i] = min[i] + rnd * (max[i] - min[i]);\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n if (min === undefined) {\r\n min = 0;\r\n }\r\n\r\n var rndm = BMMath.random();\r\n return min + rndm * (max - min);\r\n }\r\n\r\n function createPath(points, inTangents, outTangents, closed) {\r\n var i;\r\n var len = points.length;\r\n var path = shapePool.newElement();\r\n path.setPathData(!!closed, len);\r\n var arrPlaceholder = [0, 0];\r\n var inVertexPoint;\r\n var outVertexPoint;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;\r\n outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;\r\n path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\r\n }\r\n\r\n return path;\r\n }\r\n\r\n function initiateExpression(elem, data, property) {\r\n var val = data.x;\r\n var needsVelocity = /velocity(?![\\w\\d])/.test(val);\r\n\r\n var _needsRandom = val.indexOf('random') !== -1;\r\n\r\n var elemType = elem.data.ty;\r\n var transform;\r\n var $bm_transform;\r\n var content;\r\n var effect;\r\n var thisProperty = property;\r\n thisProperty.valueAtTime = thisProperty.getValueAtTime;\r\n Object.defineProperty(thisProperty, 'value', {\r\n get: function get() {\r\n return thisProperty.v;\r\n }\r\n });\r\n elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\r\n elem.comp.displayStartTime = 0;\r\n var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\r\n var outPoint = elem.data.op / elem.comp.globalData.frameRate;\r\n var width = elem.data.sw ? elem.data.sw : 0;\r\n var height = elem.data.sh ? elem.data.sh : 0;\r\n var name = elem.data.nm;\r\n var loopIn;\r\n var loop_in;\r\n var loopOut;\r\n var loop_out;\r\n var smooth;\r\n var toWorld;\r\n var fromWorld;\r\n var fromComp;\r\n var toComp;\r\n var fromCompToSurface;\r\n var position;\r\n var rotation;\r\n var anchorPoint;\r\n var scale;\r\n var thisLayer;\r\n var thisComp;\r\n var mask;\r\n var valueAtTime;\r\n var velocityAtTime;\r\n var scoped_bm_rt; // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\r\n\r\n var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\r\n\r\n var numKeys = property.kf ? data.k.length : 0;\r\n var active = !this.data || this.data.hd !== true;\r\n\r\n var wiggle = function wiggle(freq, amp) {\r\n var iWiggle;\r\n var j;\r\n var lenWiggle = this.pv.length ? this.pv.length : 1;\r\n var addedAmps = createTypedArray('float32', lenWiggle);\r\n freq = 5;\r\n var iterations = Math.floor(time * freq);\r\n iWiggle = 0;\r\n j = 0;\r\n\r\n while (iWiggle < iterations) {\r\n // var rnd = BMMath.random();\r\n for (j = 0; j < lenWiggle; j += 1) {\r\n addedAmps[j] += -amp + amp * 2 * BMMath.random(); // addedAmps[j] += -amp + amp*2*rnd;\r\n }\r\n\r\n iWiggle += 1;\r\n } // var rnd2 = BMMath.random();\r\n\r\n\r\n var periods = time * freq;\r\n var perc = periods - Math.floor(periods);\r\n var arr = createTypedArray('float32', lenWiggle);\r\n\r\n if (lenWiggle > 1) {\r\n for (j = 0; j < lenWiggle; j += 1) {\r\n arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\r\n // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\r\n }.bind(this);\r\n\r\n if (thisProperty.loopIn) {\r\n loopIn = thisProperty.loopIn.bind(thisProperty);\r\n loop_in = loopIn;\r\n }\r\n\r\n if (thisProperty.loopOut) {\r\n loopOut = thisProperty.loopOut.bind(thisProperty);\r\n loop_out = loopOut;\r\n }\r\n\r\n if (thisProperty.smooth) {\r\n smooth = thisProperty.smooth.bind(thisProperty);\r\n }\r\n\r\n function loopInDuration(type, duration) {\r\n return loopIn(type, duration, true);\r\n }\r\n\r\n function loopOutDuration(type, duration) {\r\n return loopOut(type, duration, true);\r\n }\r\n\r\n if (this.getValueAtTime) {\r\n valueAtTime = this.getValueAtTime.bind(this);\r\n }\r\n\r\n if (this.getVelocityAtTime) {\r\n velocityAtTime = this.getVelocityAtTime.bind(this);\r\n }\r\n\r\n var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\r\n\r\n function lookAt(elem1, elem2) {\r\n var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\r\n var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\r\n var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\r\n return [yaw, pitch, 0];\r\n }\r\n\r\n function easeOut(t, tMin, tMax, val1, val2) {\r\n return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\r\n }\r\n\r\n function easeIn(t, tMin, tMax, val1, val2) {\r\n return applyEase(easeInBez, t, tMin, tMax, val1, val2);\r\n }\r\n\r\n function ease(t, tMin, tMax, val1, val2) {\r\n return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\r\n }\r\n\r\n function applyEase(fn, t, tMin, tMax, val1, val2) {\r\n if (val1 === undefined) {\r\n val1 = tMin;\r\n val2 = tMax;\r\n } else {\r\n t = (t - tMin) / (tMax - tMin);\r\n }\r\n\r\n if (t > 1) {\r\n t = 1;\r\n } else if (t < 0) {\r\n t = 0;\r\n }\r\n\r\n var mult = fn(t);\r\n\r\n if ($bm_isInstanceOfArray(val1)) {\r\n var iKey;\r\n var lenKey = val1.length;\r\n var arr = createTypedArray('float32', lenKey);\r\n\r\n for (iKey = 0; iKey < lenKey; iKey += 1) {\r\n arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n return (val2 - val1) * mult + val1;\r\n }\r\n\r\n function nearestKey(time) {\r\n var iKey;\r\n var lenKey = data.k.length;\r\n var index;\r\n var keyTime;\r\n\r\n if (!data.k.length || typeof data.k[0] === 'number') {\r\n index = 0;\r\n keyTime = 0;\r\n } else {\r\n index = -1;\r\n time *= elem.comp.globalData.frameRate;\r\n\r\n if (time < data.k[0].t) {\r\n index = 1;\r\n keyTime = data.k[0].t;\r\n } else {\r\n for (iKey = 0; iKey < lenKey - 1; iKey += 1) {\r\n if (time === data.k[iKey].t) {\r\n index = iKey + 1;\r\n keyTime = data.k[iKey].t;\r\n break;\r\n } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {\r\n if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {\r\n index = iKey + 2;\r\n keyTime = data.k[iKey + 1].t;\r\n } else {\r\n index = iKey + 1;\r\n keyTime = data.k[iKey].t;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n if (index === -1) {\r\n index = iKey + 1;\r\n keyTime = data.k[iKey].t;\r\n }\r\n }\r\n }\r\n\r\n var obKey = {};\r\n obKey.index = index;\r\n obKey.time = keyTime / elem.comp.globalData.frameRate;\r\n return obKey;\r\n }\r\n\r\n function key(ind) {\r\n var obKey;\r\n var iKey;\r\n var lenKey;\r\n\r\n if (!data.k.length || typeof data.k[0] === 'number') {\r\n throw new Error('The property has no keyframe at index ' + ind);\r\n }\r\n\r\n ind -= 1;\r\n obKey = {\r\n time: data.k[ind].t / elem.comp.globalData.frameRate,\r\n value: []\r\n };\r\n var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;\r\n lenKey = arr.length;\r\n\r\n for (iKey = 0; iKey < lenKey; iKey += 1) {\r\n obKey[iKey] = arr[iKey];\r\n obKey.value[iKey] = arr[iKey];\r\n }\r\n\r\n return obKey;\r\n }\r\n\r\n function framesToTime(fr, fps) {\r\n if (!fps) {\r\n fps = elem.comp.globalData.frameRate;\r\n }\r\n\r\n return fr / fps;\r\n }\r\n\r\n function timeToFrames(t, fps) {\r\n if (!t && t !== 0) {\r\n t = time;\r\n }\r\n\r\n if (!fps) {\r\n fps = elem.comp.globalData.frameRate;\r\n }\r\n\r\n return t * fps;\r\n }\r\n\r\n function seedRandom(seed) {\r\n BMMath.seedrandom(randSeed + seed);\r\n }\r\n\r\n function sourceRectAtTime() {\r\n return elem.sourceRectAtTime();\r\n }\r\n\r\n function substring(init, end) {\r\n if (typeof value === 'string') {\r\n if (end === undefined) {\r\n return value.substring(init);\r\n }\r\n\r\n return value.substring(init, end);\r\n }\r\n\r\n return '';\r\n }\r\n\r\n function substr(init, end) {\r\n if (typeof value === 'string') {\r\n if (end === undefined) {\r\n return value.substr(init);\r\n }\r\n\r\n return value.substr(init, end);\r\n }\r\n\r\n return '';\r\n }\r\n\r\n function posterizeTime(framesPerSecond) {\r\n time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\r\n value = valueAtTime(time);\r\n }\r\n\r\n var time;\r\n var velocity;\r\n var value;\r\n var text;\r\n var textIndex;\r\n var textTotal;\r\n var selectorValue;\r\n var index = elem.data.ind;\r\n var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\r\n var parent;\r\n var randSeed = Math.floor(Math.random() * 1000000);\r\n var globalData = elem.globalData;\r\n\r\n function executeExpression(_value) {\r\n // globalData.pushExpression();\r\n value = _value;\r\n\r\n if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\r\n return value;\r\n }\r\n\r\n if (this.propType === 'textSelector') {\r\n textIndex = this.textIndex;\r\n textTotal = this.textTotal;\r\n selectorValue = this.selectorValue;\r\n }\r\n\r\n if (!thisLayer) {\r\n text = elem.layerInterface.text;\r\n thisLayer = elem.layerInterface;\r\n thisComp = elem.comp.compInterface;\r\n toWorld = thisLayer.toWorld.bind(thisLayer);\r\n fromWorld = thisLayer.fromWorld.bind(thisLayer);\r\n fromComp = thisLayer.fromComp.bind(thisLayer);\r\n toComp = thisLayer.toComp.bind(thisLayer);\r\n mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\r\n fromCompToSurface = fromComp;\r\n }\r\n\r\n if (!transform) {\r\n transform = elem.layerInterface('ADBE Transform Group');\r\n $bm_transform = transform;\r\n\r\n if (transform) {\r\n anchorPoint = transform.anchorPoint;\r\n /* position = transform.position;\r\n rotation = transform.rotation;\r\n scale = transform.scale; */\r\n }\r\n }\r\n\r\n if (elemType === 4 && !content) {\r\n content = thisLayer('ADBE Root Vectors Group');\r\n }\r\n\r\n if (!effect) {\r\n effect = thisLayer(4);\r\n }\r\n\r\n hasParent = !!(elem.hierarchy && elem.hierarchy.length);\r\n\r\n if (hasParent && !parent) {\r\n parent = elem.hierarchy[0].layerInterface;\r\n }\r\n\r\n time = this.comp.renderedFrame / this.comp.globalData.frameRate;\r\n\r\n if (_needsRandom) {\r\n seedRandom(randSeed + time);\r\n }\r\n\r\n if (needsVelocity) {\r\n velocity = velocityAtTime(time);\r\n }\r\n\r\n expression_function();\r\n this.frameExpressionId = elem.globalData.frameId; // TODO: Check if it's possible to return on ShapeInterface the .v value\r\n // Changed this to a ternary operation because Rollup failed compiling it correctly\r\n\r\n scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt;\r\n return scoped_bm_rt;\r\n } // Bundlers will see these as dead code and unless we reference them\r\n\r\n\r\n executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData];\r\n return executeExpression;\r\n }\r\n\r\n ob.initiateExpression = initiateExpression;\r\n ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath];\r\n return ob;\r\n }();\r\n\r\n var expressionHelpers = function () {\r\n function searchExpressions(elem, data, prop) {\r\n if (data.x) {\r\n prop.k = true;\r\n prop.x = true;\r\n prop.initiateExpression = ExpressionManager.initiateExpression;\r\n prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\r\n }\r\n }\r\n\r\n function getValueAtTime(frameNum) {\r\n frameNum *= this.elem.globalData.frameRate;\r\n frameNum -= this.offsetTime;\r\n\r\n if (frameNum !== this._cachingAtTime.lastFrame) {\r\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\r\n this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\r\n this._cachingAtTime.lastFrame = frameNum;\r\n }\r\n\r\n return this._cachingAtTime.value;\r\n }\r\n\r\n function getSpeedAtTime(frameNum) {\r\n var delta = -0.01;\r\n var v1 = this.getValueAtTime(frameNum);\r\n var v2 = this.getValueAtTime(frameNum + delta);\r\n var speed = 0;\r\n\r\n if (v1.length) {\r\n var i;\r\n\r\n for (i = 0; i < v1.length; i += 1) {\r\n speed += Math.pow(v2[i] - v1[i], 2);\r\n }\r\n\r\n speed = Math.sqrt(speed) * 100;\r\n } else {\r\n speed = 0;\r\n }\r\n\r\n return speed;\r\n }\r\n\r\n function getVelocityAtTime(frameNum) {\r\n if (this.vel !== undefined) {\r\n return this.vel;\r\n }\r\n\r\n var delta = -0.001; // frameNum += this.elem.data.st;\r\n\r\n var v1 = this.getValueAtTime(frameNum);\r\n var v2 = this.getValueAtTime(frameNum + delta);\r\n var velocity;\r\n\r\n if (v1.length) {\r\n velocity = createTypedArray('float32', v1.length);\r\n var i;\r\n\r\n for (i = 0; i < v1.length; i += 1) {\r\n // removing frameRate\r\n // if needed, don't add it here\r\n // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\r\n velocity[i] = (v2[i] - v1[i]) / delta;\r\n }\r\n } else {\r\n velocity = (v2 - v1) / delta;\r\n }\r\n\r\n return velocity;\r\n }\r\n\r\n function getStaticValueAtTime() {\r\n return this.pv;\r\n }\r\n\r\n function setGroupProperty(propertyGroup) {\r\n this.propertyGroup = propertyGroup;\r\n }\r\n\r\n return {\r\n searchExpressions: searchExpressions,\r\n getSpeedAtTime: getSpeedAtTime,\r\n getVelocityAtTime: getVelocityAtTime,\r\n getValueAtTime: getValueAtTime,\r\n getStaticValueAtTime: getStaticValueAtTime,\r\n setGroupProperty: setGroupProperty\r\n };\r\n }();\r\n\r\n function addPropertyDecorator() {\r\n function loopOut(type, duration, durationFlag) {\r\n if (!this.k || !this.keyframes) {\r\n return this.pv;\r\n }\r\n\r\n type = type ? type.toLowerCase() : '';\r\n var currentFrame = this.comp.renderedFrame;\r\n var keyframes = this.keyframes;\r\n var lastKeyFrame = keyframes[keyframes.length - 1].t;\r\n\r\n if (currentFrame <= lastKeyFrame) {\r\n return this.pv;\r\n }\r\n\r\n var cycleDuration;\r\n var firstKeyFrame;\r\n\r\n if (!durationFlag) {\r\n if (!duration || duration > keyframes.length - 1) {\r\n duration = keyframes.length - 1;\r\n }\r\n\r\n firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\r\n cycleDuration = lastKeyFrame - firstKeyFrame;\r\n } else {\r\n if (!duration) {\r\n cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\r\n } else {\r\n cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\r\n }\r\n\r\n firstKeyFrame = lastKeyFrame - cycleDuration;\r\n }\r\n\r\n var i;\r\n var len;\r\n var ret;\r\n\r\n if (type === 'pingpong') {\r\n var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\r\n\r\n if (iterations % 2 !== 0) {\r\n return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\r\n }\r\n } else if (type === 'offset') {\r\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\r\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\r\n var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\r\n\r\n var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\r\n\r\n if (this.pv.length) {\r\n ret = new Array(initV.length);\r\n len = ret.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n ret[i] = (endV[i] - initV[i]) * repeats + current[i];\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n return (endV - initV) * repeats + current;\r\n } else if (type === 'continue') {\r\n var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\r\n var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\r\n\r\n if (this.pv.length) {\r\n ret = new Array(lastValue.length);\r\n len = ret.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\r\n }\r\n\r\n return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\r\n }\r\n\r\n function loopIn(type, duration, durationFlag) {\r\n if (!this.k) {\r\n return this.pv;\r\n }\r\n\r\n type = type ? type.toLowerCase() : '';\r\n var currentFrame = this.comp.renderedFrame;\r\n var keyframes = this.keyframes;\r\n var firstKeyFrame = keyframes[0].t;\r\n\r\n if (currentFrame >= firstKeyFrame) {\r\n return this.pv;\r\n }\r\n\r\n var cycleDuration;\r\n var lastKeyFrame;\r\n\r\n if (!durationFlag) {\r\n if (!duration || duration > keyframes.length - 1) {\r\n duration = keyframes.length - 1;\r\n }\r\n\r\n lastKeyFrame = keyframes[duration].t;\r\n cycleDuration = lastKeyFrame - firstKeyFrame;\r\n } else {\r\n if (!duration) {\r\n cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\r\n } else {\r\n cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\r\n }\r\n\r\n lastKeyFrame = firstKeyFrame + cycleDuration;\r\n }\r\n\r\n var i;\r\n var len;\r\n var ret;\r\n\r\n if (type === 'pingpong') {\r\n var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\r\n\r\n if (iterations % 2 === 0) {\r\n return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\r\n }\r\n } else if (type === 'offset') {\r\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\r\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\r\n var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\r\n var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\r\n\r\n if (this.pv.length) {\r\n ret = new Array(initV.length);\r\n len = ret.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n return current - (endV - initV) * repeats;\r\n } else if (type === 'continue') {\r\n var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\r\n var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\r\n\r\n if (this.pv.length) {\r\n ret = new Array(firstValue.length);\r\n len = ret.length;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\r\n }\r\n\r\n return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\r\n }\r\n\r\n function smooth(width, samples) {\r\n if (!this.k) {\r\n return this.pv;\r\n }\r\n\r\n width = (width || 0.4) * 0.5;\r\n samples = Math.floor(samples || 5);\r\n\r\n if (samples <= 1) {\r\n return this.pv;\r\n }\r\n\r\n var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\r\n var initFrame = currentTime - width;\r\n var endFrame = currentTime + width;\r\n var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\r\n var i = 0;\r\n var j = 0;\r\n var value;\r\n\r\n if (this.pv.length) {\r\n value = createTypedArray('float32', this.pv.length);\r\n } else {\r\n value = 0;\r\n }\r\n\r\n var sampleValue;\r\n\r\n while (i < samples) {\r\n sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\r\n\r\n if (this.pv.length) {\r\n for (j = 0; j < this.pv.length; j += 1) {\r\n value[j] += sampleValue[j];\r\n }\r\n } else {\r\n value += sampleValue;\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n if (this.pv.length) {\r\n for (j = 0; j < this.pv.length; j += 1) {\r\n value[j] /= samples;\r\n }\r\n } else {\r\n value /= samples;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n function getTransformValueAtTime(time) {\r\n if (!this._transformCachingAtTime) {\r\n this._transformCachingAtTime = {\r\n v: new Matrix()\r\n };\r\n } /// /\r\n\r\n\r\n var matrix = this._transformCachingAtTime.v;\r\n matrix.cloneFromProps(this.pre.props);\r\n\r\n if (this.appliedTransformations < 1) {\r\n var anchor = this.a.getValueAtTime(time);\r\n matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult);\r\n }\r\n\r\n if (this.appliedTransformations < 2) {\r\n var scale = this.s.getValueAtTime(time);\r\n matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult);\r\n }\r\n\r\n if (this.sk && this.appliedTransformations < 3) {\r\n var skew = this.sk.getValueAtTime(time);\r\n var skewAxis = this.sa.getValueAtTime(time);\r\n matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\r\n }\r\n\r\n if (this.r && this.appliedTransformations < 4) {\r\n var rotation = this.r.getValueAtTime(time);\r\n matrix.rotate(-rotation * this.r.mult);\r\n } else if (!this.r && this.appliedTransformations < 4) {\r\n var rotationZ = this.rz.getValueAtTime(time);\r\n var rotationY = this.ry.getValueAtTime(time);\r\n var rotationX = this.rx.getValueAtTime(time);\r\n var orientation = this.or.getValueAtTime(time);\r\n matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult);\r\n }\r\n\r\n if (this.data.p && this.data.p.s) {\r\n var positionX = this.px.getValueAtTime(time);\r\n var positionY = this.py.getValueAtTime(time);\r\n\r\n if (this.data.p.z) {\r\n var positionZ = this.pz.getValueAtTime(time);\r\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult);\r\n } else {\r\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\r\n }\r\n } else {\r\n var position = this.p.getValueAtTime(time);\r\n matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult);\r\n }\r\n\r\n return matrix; /// /\r\n }\r\n\r\n function getTransformStaticValueAtTime() {\r\n return this.v.clone(new Matrix());\r\n }\r\n\r\n var getTransformProperty = TransformPropertyFactory.getTransformProperty;\r\n\r\n TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\r\n var prop = getTransformProperty(elem, data, container);\r\n\r\n if (prop.dynamicProperties.length) {\r\n prop.getValueAtTime = getTransformValueAtTime.bind(prop);\r\n } else {\r\n prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\r\n }\r\n\r\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\r\n return prop;\r\n };\r\n\r\n var propertyGetProp = PropertyFactory.getProp;\r\n\r\n PropertyFactory.getProp = function (elem, data, type, mult, container) {\r\n var prop = propertyGetProp(elem, data, type, mult, container); // prop.getVelocityAtTime = getVelocityAtTime;\r\n // prop.loopOut = loopOut;\r\n // prop.loopIn = loopIn;\r\n\r\n if (prop.kf) {\r\n prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\r\n } else {\r\n prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\r\n }\r\n\r\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\r\n prop.loopOut = loopOut;\r\n prop.loopIn = loopIn;\r\n prop.smooth = smooth;\r\n prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\r\n prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\r\n prop.numKeys = data.a === 1 ? data.k.length : 0;\r\n prop.propertyIndex = data.ix;\r\n var value = 0;\r\n\r\n if (type !== 0) {\r\n value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\r\n }\r\n\r\n prop._cachingAtTime = {\r\n lastFrame: initialDefaultFrame,\r\n lastIndex: 0,\r\n value: value\r\n };\r\n expressionHelpers.searchExpressions(elem, data, prop);\r\n\r\n if (prop.k) {\r\n container.addDynamicProperty(prop);\r\n }\r\n\r\n return prop;\r\n };\r\n\r\n function getShapeValueAtTime(frameNum) {\r\n // For now this caching object is created only when needed instead of creating it when the shape is initialized.\r\n if (!this._cachingAtTime) {\r\n this._cachingAtTime = {\r\n shapeValue: shapePool.clone(this.pv),\r\n lastIndex: 0,\r\n lastTime: initialDefaultFrame\r\n };\r\n }\r\n\r\n frameNum *= this.elem.globalData.frameRate;\r\n frameNum -= this.offsetTime;\r\n\r\n if (frameNum !== this._cachingAtTime.lastTime) {\r\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\r\n this._cachingAtTime.lastTime = frameNum;\r\n this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\r\n }\r\n\r\n return this._cachingAtTime.shapeValue;\r\n }\r\n\r\n var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\r\n var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\r\n\r\n function ShapeExpressions() {}\r\n\r\n ShapeExpressions.prototype = {\r\n vertices: function vertices(prop, time) {\r\n if (this.k) {\r\n this.getValue();\r\n }\r\n\r\n var shapePath = this.v;\r\n\r\n if (time !== undefined) {\r\n shapePath = this.getValueAtTime(time, 0);\r\n }\r\n\r\n var i;\r\n var len = shapePath._length;\r\n var vertices = shapePath[prop];\r\n var points = shapePath.v;\r\n var arr = createSizedArray(len);\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (prop === 'i' || prop === 'o') {\r\n arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\r\n } else {\r\n arr[i] = [vertices[i][0], vertices[i][1]];\r\n }\r\n }\r\n\r\n return arr;\r\n },\r\n points: function points(time) {\r\n return this.vertices('v', time);\r\n },\r\n inTangents: function inTangents(time) {\r\n return this.vertices('i', time);\r\n },\r\n outTangents: function outTangents(time) {\r\n return this.vertices('o', time);\r\n },\r\n isClosed: function isClosed() {\r\n return this.v.c;\r\n },\r\n pointOnPath: function pointOnPath(perc, time) {\r\n var shapePath = this.v;\r\n\r\n if (time !== undefined) {\r\n shapePath = this.getValueAtTime(time, 0);\r\n }\r\n\r\n if (!this._segmentsLength) {\r\n this._segmentsLength = bez.getSegmentsLength(shapePath);\r\n }\r\n\r\n var segmentsLength = this._segmentsLength;\r\n var lengths = segmentsLength.lengths;\r\n var lengthPos = segmentsLength.totalLength * perc;\r\n var i = 0;\r\n var len = lengths.length;\r\n var accumulatedLength = 0;\r\n var pt;\r\n\r\n while (i < len) {\r\n if (accumulatedLength + lengths[i].addedLength > lengthPos) {\r\n var initIndex = i;\r\n var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\r\n var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\r\n pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\r\n break;\r\n } else {\r\n accumulatedLength += lengths[i].addedLength;\r\n }\r\n\r\n i += 1;\r\n }\r\n\r\n if (!pt) {\r\n pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\r\n }\r\n\r\n return pt;\r\n },\r\n vectorOnPath: function vectorOnPath(perc, time, vectorType) {\r\n // perc doesn't use triple equality because it can be a Number object as well as a primitive.\r\n if (perc == 1) {\r\n // eslint-disable-line eqeqeq\r\n perc = this.v.c;\r\n } else if (perc == 0) {\r\n // eslint-disable-line eqeqeq\r\n perc = 0.999;\r\n }\r\n\r\n var pt1 = this.pointOnPath(perc, time);\r\n var pt2 = this.pointOnPath(perc + 0.001, time);\r\n var xLength = pt2[0] - pt1[0];\r\n var yLength = pt2[1] - pt1[1];\r\n var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\r\n\r\n if (magnitude === 0) {\r\n return [0, 0];\r\n }\r\n\r\n var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\r\n return unitVector;\r\n },\r\n tangentOnPath: function tangentOnPath(perc, time) {\r\n return this.vectorOnPath(perc, time, 'tangent');\r\n },\r\n normalOnPath: function normalOnPath(perc, time) {\r\n return this.vectorOnPath(perc, time, 'normal');\r\n },\r\n setGroupProperty: expressionHelpers.setGroupProperty,\r\n getValueAtTime: expressionHelpers.getStaticValueAtTime\r\n };\r\n extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\r\n extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\r\n KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\r\n KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\r\n var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\r\n\r\n ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\r\n var prop = propertyGetShapeProp(elem, data, type, arr, trims);\r\n prop.propertyIndex = data.ix;\r\n prop.lock = false;\r\n\r\n if (type === 3) {\r\n expressionHelpers.searchExpressions(elem, data.pt, prop);\r\n } else if (type === 4) {\r\n expressionHelpers.searchExpressions(elem, data.ks, prop);\r\n }\r\n\r\n if (prop.k) {\r\n elem.addDynamicProperty(prop);\r\n }\r\n\r\n return prop;\r\n };\r\n }\r\n\r\n function initialize$1() {\r\n addPropertyDecorator();\r\n }\r\n\r\n function addDecorator() {\r\n function searchExpressions() {\r\n if (this.data.d.x) {\r\n this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\r\n this.addEffect(this.getExpressionValue.bind(this));\r\n return true;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n TextProperty.prototype.getExpressionValue = function (currentValue, text) {\r\n var newValue = this.calculateExpression(text);\r\n\r\n if (currentValue.t !== newValue) {\r\n var newData = {};\r\n this.copyData(newData, currentValue);\r\n newData.t = newValue.toString();\r\n newData.__complete = false;\r\n return newData;\r\n }\r\n\r\n return currentValue;\r\n };\r\n\r\n TextProperty.prototype.searchProperty = function () {\r\n var isKeyframed = this.searchKeyframes();\r\n var hasExpressions = this.searchExpressions();\r\n this.kf = isKeyframed || hasExpressions;\r\n return this.kf;\r\n };\r\n\r\n TextProperty.prototype.searchExpressions = searchExpressions;\r\n }\r\n\r\n function initialize() {\r\n addDecorator();\r\n }\r\n\r\n registerRenderer('canvas', CanvasRenderer);\r\n registerRenderer('html', HybridRenderer);\r\n registerRenderer('svg', SVGRenderer); // Registering shape modifiers\r\n\r\n ShapeModifiers.registerModifier('tm', TrimModifier);\r\n ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\r\n ShapeModifiers.registerModifier('rp', RepeaterModifier);\r\n ShapeModifiers.registerModifier('rd', RoundCornersModifier); // Registering expression plugin\r\n\r\n setExpressionsPlugin(Expressions);\r\n initialize$1();\r\n initialize(); // Registering svg effects\r\n\r\n registerEffect(20, SVGTintFilter, true);\r\n registerEffect(21, SVGFillFilter, true);\r\n registerEffect(22, SVGStrokeEffect, false);\r\n registerEffect(23, SVGTritoneFilter, true);\r\n registerEffect(24, SVGProLevelsFilter, true);\r\n registerEffect(25, SVGDropShadowEffect, true);\r\n registerEffect(28, SVGMatte3Effect, false);\r\n registerEffect(29, SVGGaussianBlurEffect, true);\r\n\r\n return lottie;\r\n\r\n}));\r\n","//! moment.js\n//! version : 2.29.3\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m),\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n }),\n isNowValid =\n !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n return mom.isValid()\n ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (\n unit === 'FullYear' &&\n isLeapYear(mom.year()) &&\n mom.month() === 1 &&\n mom.date() === 29\n ) {\n value = toInt(value);\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n value,\n mom.month(),\n daysInMonth(value, mom.month())\n );\n } else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n return name.match('^[^/\\\\\\\\]*$') != null;\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^)]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n namePieces.push(regexEscape(eras[i].name));\n abbrPieces.push(regexEscape(eras[i].abbr));\n narrowPieces.push(regexEscape(eras[i].narrow));\n\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1() {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y');\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.29.3';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'GGGG-[W]WW', // \n MONTH: 'YYYY-MM', // \n };\n\n return hooks;\n\n})));\n","if performance? and performance.now\n module.exports = -> performance.now()\nelse if process? and process.hrtime\n module.exports = -> (getNanoSeconds() - nodeLoadTime) / 1e6\n hrtime = process.hrtime\n getNanoSeconds = ->\n hr = hrtime()\n hr[0] * 1e9 + hr[1]\n moduleLoadTime = getNanoSeconds()\n upTime = process.uptime() * 1e9\n nodeLoadTime = moduleLoadTime - upTime\nelse if Date.now\n module.exports = -> Date.now() - loadTime\n loadTime = Date.now()\nelse\n module.exports = -> new Date().getTime() - loadTime\n loadTime = new Date().getTime()\n","var div = null\nvar prefixes = [ 'Webkit', 'Moz', 'O', 'ms' ]\n\nmodule.exports = function prefixStyle (prop) {\n // re-use a dummy div\n if (!div) {\n div = document.createElement('div')\n }\n\n var style = div.style\n\n // prop exists without prefix\n if (prop in style) {\n return prop\n }\n\n // borderRadius -> BorderRadius\n var titleCase = prop.charAt(0).toUpperCase() + prop.slice(1)\n\n // find the vendor-prefixed prop\n for (var i = prefixes.length; i >= 0; i--) {\n var name = prefixes[i] + titleCase\n // e.g. WebkitBorderRadius or webkitBorderRadius\n if (name in style) {\n return name\n }\n }\n\n return false\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","var now = require('performance-now')\n , root = typeof window === 'undefined' ? global : window\n , vendors = ['moz', 'webkit']\n , suffix = 'AnimationFrame'\n , raf = root['request' + suffix]\n , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\nfor(var i = 0; !raf && i < vendors.length; i++) {\n raf = root[vendors[i] + 'Request' + suffix]\n caf = root[vendors[i] + 'Cancel' + suffix]\n || root[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n var last = 0\n , id = 0\n , queue = []\n , frameDuration = 1000 / 60\n\n raf = function(callback) {\n if(queue.length === 0) {\n var _now = now()\n , next = Math.max(0, frameDuration - (_now - last))\n last = next + _now\n setTimeout(function() {\n var cp = queue.slice(0)\n // Clear queue here to prevent\n // callbacks from appending listeners\n // to the current frame's queue\n queue.length = 0\n for(var i = 0; i < cp.length; i++) {\n if(!cp[i].cancelled) {\n try{\n cp[i].callback(last)\n } catch(e) {\n setTimeout(function() { throw e }, 0)\n }\n }\n }\n }, Math.round(next))\n }\n queue.push({\n handle: ++id,\n callback: callback,\n cancelled: false\n })\n return id\n }\n\n caf = function(handle) {\n for(var i = 0; i < queue.length; i++) {\n if(queue[i].handle === handle) {\n queue[i].cancelled = true\n }\n }\n }\n}\n\nmodule.exports = function(fn) {\n // Wrap in a new function to prevent\n // `cancel` potentially being assigned\n // to the native rAF function\n return raf.call(root, fn)\n}\nmodule.exports.cancel = function() {\n caf.apply(root, arguments)\n}\nmodule.exports.polyfill = function(object) {\n if (!object) {\n object = root;\n }\n object.requestAnimationFrame = raf\n object.cancelAnimationFrame = caf\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.renderViewDefault = renderViewDefault;\nexports.renderTrackHorizontalDefault = renderTrackHorizontalDefault;\nexports.renderTrackVerticalDefault = renderTrackVerticalDefault;\nexports.renderThumbHorizontalDefault = renderThumbHorizontalDefault;\nexports.renderThumbVerticalDefault = renderThumbVerticalDefault;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\n/* eslint-disable react/prop-types */\n\nfunction renderViewDefault(props) {\n return _react2[\"default\"].createElement('div', props);\n}\n\nfunction renderTrackHorizontalDefault(_ref) {\n var style = _ref.style,\n props = _objectWithoutProperties(_ref, ['style']);\n\n var finalStyle = _extends({}, style, {\n right: 2,\n bottom: 2,\n left: 2,\n borderRadius: 3\n });\n return _react2[\"default\"].createElement('div', _extends({ style: finalStyle }, props));\n}\n\nfunction renderTrackVerticalDefault(_ref2) {\n var style = _ref2.style,\n props = _objectWithoutProperties(_ref2, ['style']);\n\n var finalStyle = _extends({}, style, {\n right: 2,\n bottom: 2,\n top: 2,\n borderRadius: 3\n });\n return _react2[\"default\"].createElement('div', _extends({ style: finalStyle }, props));\n}\n\nfunction renderThumbHorizontalDefault(_ref3) {\n var style = _ref3.style,\n props = _objectWithoutProperties(_ref3, ['style']);\n\n var finalStyle = _extends({}, style, {\n cursor: 'pointer',\n borderRadius: 'inherit',\n backgroundColor: 'rgba(0,0,0,.2)'\n });\n return _react2[\"default\"].createElement('div', _extends({ style: finalStyle }, props));\n}\n\nfunction renderThumbVerticalDefault(_ref4) {\n var style = _ref4.style,\n props = _objectWithoutProperties(_ref4, ['style']);\n\n var finalStyle = _extends({}, style, {\n cursor: 'pointer',\n borderRadius: 'inherit',\n backgroundColor: 'rgba(0,0,0,.2)'\n });\n return _react2[\"default\"].createElement('div', _extends({ style: finalStyle }, props));\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _raf2 = require('raf');\n\nvar _raf3 = _interopRequireDefault(_raf2);\n\nvar _domCss = require('dom-css');\n\nvar _domCss2 = _interopRequireDefault(_domCss);\n\nvar _react = require('react');\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _isString = require('../utils/isString');\n\nvar _isString2 = _interopRequireDefault(_isString);\n\nvar _getScrollbarWidth = require('../utils/getScrollbarWidth');\n\nvar _getScrollbarWidth2 = _interopRequireDefault(_getScrollbarWidth);\n\nvar _returnFalse = require('../utils/returnFalse');\n\nvar _returnFalse2 = _interopRequireDefault(_returnFalse);\n\nvar _getInnerWidth = require('../utils/getInnerWidth');\n\nvar _getInnerWidth2 = _interopRequireDefault(_getInnerWidth);\n\nvar _getInnerHeight = require('../utils/getInnerHeight');\n\nvar _getInnerHeight2 = _interopRequireDefault(_getInnerHeight);\n\nvar _styles = require('./styles');\n\nvar _defaultRenderElements = require('./defaultRenderElements');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Scrollbars = function (_Component) {\n _inherits(Scrollbars, _Component);\n\n function Scrollbars(props) {\n var _ref;\n\n _classCallCheck(this, Scrollbars);\n\n for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n\n var _this = _possibleConstructorReturn(this, (_ref = Scrollbars.__proto__ || Object.getPrototypeOf(Scrollbars)).call.apply(_ref, [this, props].concat(rest)));\n\n _this.getScrollLeft = _this.getScrollLeft.bind(_this);\n _this.getScrollTop = _this.getScrollTop.bind(_this);\n _this.getScrollWidth = _this.getScrollWidth.bind(_this);\n _this.getScrollHeight = _this.getScrollHeight.bind(_this);\n _this.getClientWidth = _this.getClientWidth.bind(_this);\n _this.getClientHeight = _this.getClientHeight.bind(_this);\n _this.getValues = _this.getValues.bind(_this);\n _this.getThumbHorizontalWidth = _this.getThumbHorizontalWidth.bind(_this);\n _this.getThumbVerticalHeight = _this.getThumbVerticalHeight.bind(_this);\n _this.getScrollLeftForOffset = _this.getScrollLeftForOffset.bind(_this);\n _this.getScrollTopForOffset = _this.getScrollTopForOffset.bind(_this);\n\n _this.scrollLeft = _this.scrollLeft.bind(_this);\n _this.scrollTop = _this.scrollTop.bind(_this);\n _this.scrollToLeft = _this.scrollToLeft.bind(_this);\n _this.scrollToTop = _this.scrollToTop.bind(_this);\n _this.scrollToRight = _this.scrollToRight.bind(_this);\n _this.scrollToBottom = _this.scrollToBottom.bind(_this);\n\n _this.handleTrackMouseEnter = _this.handleTrackMouseEnter.bind(_this);\n _this.handleTrackMouseLeave = _this.handleTrackMouseLeave.bind(_this);\n _this.handleHorizontalTrackMouseDown = _this.handleHorizontalTrackMouseDown.bind(_this);\n _this.handleVerticalTrackMouseDown = _this.handleVerticalTrackMouseDown.bind(_this);\n _this.handleHorizontalThumbMouseDown = _this.handleHorizontalThumbMouseDown.bind(_this);\n _this.handleVerticalThumbMouseDown = _this.handleVerticalThumbMouseDown.bind(_this);\n _this.handleWindowResize = _this.handleWindowResize.bind(_this);\n _this.handleScroll = _this.handleScroll.bind(_this);\n _this.handleDrag = _this.handleDrag.bind(_this);\n _this.handleDragEnd = _this.handleDragEnd.bind(_this);\n\n _this.state = {\n didMountUniversal: false\n };\n return _this;\n }\n\n _createClass(Scrollbars, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.addListeners();\n this.update();\n this.componentDidMountUniversal();\n }\n }, {\n key: 'componentDidMountUniversal',\n value: function componentDidMountUniversal() {\n // eslint-disable-line react/sort-comp\n var universal = this.props.universal;\n\n if (!universal) return;\n this.setState({ didMountUniversal: true });\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate() {\n this.update();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.removeListeners();\n (0, _raf2.cancel)(this.requestFrame);\n clearTimeout(this.hideTracksTimeout);\n clearInterval(this.detectScrollingInterval);\n }\n }, {\n key: 'getScrollLeft',\n value: function getScrollLeft() {\n if (!this.view) return 0;\n return this.view.scrollLeft;\n }\n }, {\n key: 'getScrollTop',\n value: function getScrollTop() {\n if (!this.view) return 0;\n return this.view.scrollTop;\n }\n }, {\n key: 'getScrollWidth',\n value: function getScrollWidth() {\n if (!this.view) return 0;\n return this.view.scrollWidth;\n }\n }, {\n key: 'getScrollHeight',\n value: function getScrollHeight() {\n if (!this.view) return 0;\n return this.view.scrollHeight;\n }\n }, {\n key: 'getClientWidth',\n value: function getClientWidth() {\n if (!this.view) return 0;\n return this.view.clientWidth;\n }\n }, {\n key: 'getClientHeight',\n value: function getClientHeight() {\n if (!this.view) return 0;\n return this.view.clientHeight;\n }\n }, {\n key: 'getValues',\n value: function getValues() {\n var _ref2 = this.view || {},\n _ref2$scrollLeft = _ref2.scrollLeft,\n scrollLeft = _ref2$scrollLeft === undefined ? 0 : _ref2$scrollLeft,\n _ref2$scrollTop = _ref2.scrollTop,\n scrollTop = _ref2$scrollTop === undefined ? 0 : _ref2$scrollTop,\n _ref2$scrollWidth = _ref2.scrollWidth,\n scrollWidth = _ref2$scrollWidth === undefined ? 0 : _ref2$scrollWidth,\n _ref2$scrollHeight = _ref2.scrollHeight,\n scrollHeight = _ref2$scrollHeight === undefined ? 0 : _ref2$scrollHeight,\n _ref2$clientWidth = _ref2.clientWidth,\n clientWidth = _ref2$clientWidth === undefined ? 0 : _ref2$clientWidth,\n _ref2$clientHeight = _ref2.clientHeight,\n clientHeight = _ref2$clientHeight === undefined ? 0 : _ref2$clientHeight;\n\n return {\n left: scrollLeft / (scrollWidth - clientWidth) || 0,\n top: scrollTop / (scrollHeight - clientHeight) || 0,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollWidth: scrollWidth,\n scrollHeight: scrollHeight,\n clientWidth: clientWidth,\n clientHeight: clientHeight\n };\n }\n }, {\n key: 'getThumbHorizontalWidth',\n value: function getThumbHorizontalWidth() {\n var _props = this.props,\n thumbSize = _props.thumbSize,\n thumbMinSize = _props.thumbMinSize;\n var _view = this.view,\n scrollWidth = _view.scrollWidth,\n clientWidth = _view.clientWidth;\n\n var trackWidth = (0, _getInnerWidth2[\"default\"])(this.trackHorizontal);\n var width = Math.ceil(clientWidth / scrollWidth * trackWidth);\n if (trackWidth === width) return 0;\n if (thumbSize) return thumbSize;\n return Math.max(width, thumbMinSize);\n }\n }, {\n key: 'getThumbVerticalHeight',\n value: function getThumbVerticalHeight() {\n var _props2 = this.props,\n thumbSize = _props2.thumbSize,\n thumbMinSize = _props2.thumbMinSize;\n var _view2 = this.view,\n scrollHeight = _view2.scrollHeight,\n clientHeight = _view2.clientHeight;\n\n var trackHeight = (0, _getInnerHeight2[\"default\"])(this.trackVertical);\n var height = Math.ceil(clientHeight / scrollHeight * trackHeight);\n if (trackHeight === height) return 0;\n if (thumbSize) return thumbSize;\n return Math.max(height, thumbMinSize);\n }\n }, {\n key: 'getScrollLeftForOffset',\n value: function getScrollLeftForOffset(offset) {\n var _view3 = this.view,\n scrollWidth = _view3.scrollWidth,\n clientWidth = _view3.clientWidth;\n\n var trackWidth = (0, _getInnerWidth2[\"default\"])(this.trackHorizontal);\n var thumbWidth = this.getThumbHorizontalWidth();\n return offset / (trackWidth - thumbWidth) * (scrollWidth - clientWidth);\n }\n }, {\n key: 'getScrollTopForOffset',\n value: function getScrollTopForOffset(offset) {\n var _view4 = this.view,\n scrollHeight = _view4.scrollHeight,\n clientHeight = _view4.clientHeight;\n\n var trackHeight = (0, _getInnerHeight2[\"default\"])(this.trackVertical);\n var thumbHeight = this.getThumbVerticalHeight();\n return offset / (trackHeight - thumbHeight) * (scrollHeight - clientHeight);\n }\n }, {\n key: 'scrollLeft',\n value: function scrollLeft() {\n var left = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (!this.view) return;\n this.view.scrollLeft = left;\n }\n }, {\n key: 'scrollTop',\n value: function scrollTop() {\n var top = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (!this.view) return;\n this.view.scrollTop = top;\n }\n }, {\n key: 'scrollToLeft',\n value: function scrollToLeft() {\n if (!this.view) return;\n this.view.scrollLeft = 0;\n }\n }, {\n key: 'scrollToTop',\n value: function scrollToTop() {\n if (!this.view) return;\n this.view.scrollTop = 0;\n }\n }, {\n key: 'scrollToRight',\n value: function scrollToRight() {\n if (!this.view) return;\n this.view.scrollLeft = this.view.scrollWidth;\n }\n }, {\n key: 'scrollToBottom',\n value: function scrollToBottom() {\n if (!this.view) return;\n this.view.scrollTop = this.view.scrollHeight;\n }\n }, {\n key: 'addListeners',\n value: function addListeners() {\n /* istanbul ignore if */\n if (typeof document === 'undefined' || !this.view) return;\n var view = this.view,\n trackHorizontal = this.trackHorizontal,\n trackVertical = this.trackVertical,\n thumbHorizontal = this.thumbHorizontal,\n thumbVertical = this.thumbVertical;\n\n view.addEventListener('scroll', this.handleScroll);\n if (!(0, _getScrollbarWidth2[\"default\"])()) return;\n trackHorizontal.addEventListener('mouseenter', this.handleTrackMouseEnter);\n trackHorizontal.addEventListener('mouseleave', this.handleTrackMouseLeave);\n trackHorizontal.addEventListener('mousedown', this.handleHorizontalTrackMouseDown);\n trackVertical.addEventListener('mouseenter', this.handleTrackMouseEnter);\n trackVertical.addEventListener('mouseleave', this.handleTrackMouseLeave);\n trackVertical.addEventListener('mousedown', this.handleVerticalTrackMouseDown);\n thumbHorizontal.addEventListener('mousedown', this.handleHorizontalThumbMouseDown);\n thumbVertical.addEventListener('mousedown', this.handleVerticalThumbMouseDown);\n window.addEventListener('resize', this.handleWindowResize);\n }\n }, {\n key: 'removeListeners',\n value: function removeListeners() {\n /* istanbul ignore if */\n if (typeof document === 'undefined' || !this.view) return;\n var view = this.view,\n trackHorizontal = this.trackHorizontal,\n trackVertical = this.trackVertical,\n thumbHorizontal = this.thumbHorizontal,\n thumbVertical = this.thumbVertical;\n\n view.removeEventListener('scroll', this.handleScroll);\n if (!(0, _getScrollbarWidth2[\"default\"])()) return;\n trackHorizontal.removeEventListener('mouseenter', this.handleTrackMouseEnter);\n trackHorizontal.removeEventListener('mouseleave', this.handleTrackMouseLeave);\n trackHorizontal.removeEventListener('mousedown', this.handleHorizontalTrackMouseDown);\n trackVertical.removeEventListener('mouseenter', this.handleTrackMouseEnter);\n trackVertical.removeEventListener('mouseleave', this.handleTrackMouseLeave);\n trackVertical.removeEventListener('mousedown', this.handleVerticalTrackMouseDown);\n thumbHorizontal.removeEventListener('mousedown', this.handleHorizontalThumbMouseDown);\n thumbVertical.removeEventListener('mousedown', this.handleVerticalThumbMouseDown);\n window.removeEventListener('resize', this.handleWindowResize);\n // Possibly setup by `handleDragStart`\n this.teardownDragging();\n }\n }, {\n key: 'handleScroll',\n value: function handleScroll(event) {\n var _this2 = this;\n\n var _props3 = this.props,\n onScroll = _props3.onScroll,\n onScrollFrame = _props3.onScrollFrame;\n\n if (onScroll) onScroll(event);\n this.update(function (values) {\n var scrollLeft = values.scrollLeft,\n scrollTop = values.scrollTop;\n\n _this2.viewScrollLeft = scrollLeft;\n _this2.viewScrollTop = scrollTop;\n if (onScrollFrame) onScrollFrame(values);\n });\n this.detectScrolling();\n }\n }, {\n key: 'handleScrollStart',\n value: function handleScrollStart() {\n var onScrollStart = this.props.onScrollStart;\n\n if (onScrollStart) onScrollStart();\n this.handleScrollStartAutoHide();\n }\n }, {\n key: 'handleScrollStartAutoHide',\n value: function handleScrollStartAutoHide() {\n var autoHide = this.props.autoHide;\n\n if (!autoHide) return;\n this.showTracks();\n }\n }, {\n key: 'handleScrollStop',\n value: function handleScrollStop() {\n var onScrollStop = this.props.onScrollStop;\n\n if (onScrollStop) onScrollStop();\n this.handleScrollStopAutoHide();\n }\n }, {\n key: 'handleScrollStopAutoHide',\n value: function handleScrollStopAutoHide() {\n var autoHide = this.props.autoHide;\n\n if (!autoHide) return;\n this.hideTracks();\n }\n }, {\n key: 'handleWindowResize',\n value: function handleWindowResize() {\n this.update();\n }\n }, {\n key: 'handleHorizontalTrackMouseDown',\n value: function handleHorizontalTrackMouseDown(event) {\n event.preventDefault();\n var target = event.target,\n clientX = event.clientX;\n\n var _target$getBoundingCl = target.getBoundingClientRect(),\n targetLeft = _target$getBoundingCl.left;\n\n var thumbWidth = this.getThumbHorizontalWidth();\n var offset = Math.abs(targetLeft - clientX) - thumbWidth / 2;\n this.view.scrollLeft = this.getScrollLeftForOffset(offset);\n }\n }, {\n key: 'handleVerticalTrackMouseDown',\n value: function handleVerticalTrackMouseDown(event) {\n event.preventDefault();\n var target = event.target,\n clientY = event.clientY;\n\n var _target$getBoundingCl2 = target.getBoundingClientRect(),\n targetTop = _target$getBoundingCl2.top;\n\n var thumbHeight = this.getThumbVerticalHeight();\n var offset = Math.abs(targetTop - clientY) - thumbHeight / 2;\n this.view.scrollTop = this.getScrollTopForOffset(offset);\n }\n }, {\n key: 'handleHorizontalThumbMouseDown',\n value: function handleHorizontalThumbMouseDown(event) {\n event.preventDefault();\n this.handleDragStart(event);\n var target = event.target,\n clientX = event.clientX;\n var offsetWidth = target.offsetWidth;\n\n var _target$getBoundingCl3 = target.getBoundingClientRect(),\n left = _target$getBoundingCl3.left;\n\n this.prevPageX = offsetWidth - (clientX - left);\n }\n }, {\n key: 'handleVerticalThumbMouseDown',\n value: function handleVerticalThumbMouseDown(event) {\n event.preventDefault();\n this.handleDragStart(event);\n var target = event.target,\n clientY = event.clientY;\n var offsetHeight = target.offsetHeight;\n\n var _target$getBoundingCl4 = target.getBoundingClientRect(),\n top = _target$getBoundingCl4.top;\n\n this.prevPageY = offsetHeight - (clientY - top);\n }\n }, {\n key: 'setupDragging',\n value: function setupDragging() {\n (0, _domCss2[\"default\"])(document.body, _styles.disableSelectStyle);\n document.addEventListener('mousemove', this.handleDrag);\n document.addEventListener('mouseup', this.handleDragEnd);\n document.onselectstart = _returnFalse2[\"default\"];\n }\n }, {\n key: 'teardownDragging',\n value: function teardownDragging() {\n (0, _domCss2[\"default\"])(document.body, _styles.disableSelectStyleReset);\n document.removeEventListener('mousemove', this.handleDrag);\n document.removeEventListener('mouseup', this.handleDragEnd);\n document.onselectstart = undefined;\n }\n }, {\n key: 'handleDragStart',\n value: function handleDragStart(event) {\n this.dragging = true;\n event.stopImmediatePropagation();\n this.setupDragging();\n }\n }, {\n key: 'handleDrag',\n value: function handleDrag(event) {\n if (this.prevPageX) {\n var clientX = event.clientX;\n\n var _trackHorizontal$getB = this.trackHorizontal.getBoundingClientRect(),\n trackLeft = _trackHorizontal$getB.left;\n\n var thumbWidth = this.getThumbHorizontalWidth();\n var clickPosition = thumbWidth - this.prevPageX;\n var offset = -trackLeft + clientX - clickPosition;\n this.view.scrollLeft = this.getScrollLeftForOffset(offset);\n }\n if (this.prevPageY) {\n var clientY = event.clientY;\n\n var _trackVertical$getBou = this.trackVertical.getBoundingClientRect(),\n trackTop = _trackVertical$getBou.top;\n\n var thumbHeight = this.getThumbVerticalHeight();\n var _clickPosition = thumbHeight - this.prevPageY;\n var _offset = -trackTop + clientY - _clickPosition;\n this.view.scrollTop = this.getScrollTopForOffset(_offset);\n }\n return false;\n }\n }, {\n key: 'handleDragEnd',\n value: function handleDragEnd() {\n this.dragging = false;\n this.prevPageX = this.prevPageY = 0;\n this.teardownDragging();\n this.handleDragEndAutoHide();\n }\n }, {\n key: 'handleDragEndAutoHide',\n value: function handleDragEndAutoHide() {\n var autoHide = this.props.autoHide;\n\n if (!autoHide) return;\n this.hideTracks();\n }\n }, {\n key: 'handleTrackMouseEnter',\n value: function handleTrackMouseEnter() {\n this.trackMouseOver = true;\n this.handleTrackMouseEnterAutoHide();\n }\n }, {\n key: 'handleTrackMouseEnterAutoHide',\n value: function handleTrackMouseEnterAutoHide() {\n var autoHide = this.props.autoHide;\n\n if (!autoHide) return;\n this.showTracks();\n }\n }, {\n key: 'handleTrackMouseLeave',\n value: function handleTrackMouseLeave() {\n this.trackMouseOver = false;\n this.handleTrackMouseLeaveAutoHide();\n }\n }, {\n key: 'handleTrackMouseLeaveAutoHide',\n value: function handleTrackMouseLeaveAutoHide() {\n var autoHide = this.props.autoHide;\n\n if (!autoHide) return;\n this.hideTracks();\n }\n }, {\n key: 'showTracks',\n value: function showTracks() {\n clearTimeout(this.hideTracksTimeout);\n (0, _domCss2[\"default\"])(this.trackHorizontal, { opacity: 1 });\n (0, _domCss2[\"default\"])(this.trackVertical, { opacity: 1 });\n }\n }, {\n key: 'hideTracks',\n value: function hideTracks() {\n var _this3 = this;\n\n if (this.dragging) return;\n if (this.scrolling) return;\n if (this.trackMouseOver) return;\n var autoHideTimeout = this.props.autoHideTimeout;\n\n clearTimeout(this.hideTracksTimeout);\n this.hideTracksTimeout = setTimeout(function () {\n (0, _domCss2[\"default\"])(_this3.trackHorizontal, { opacity: 0 });\n (0, _domCss2[\"default\"])(_this3.trackVertical, { opacity: 0 });\n }, autoHideTimeout);\n }\n }, {\n key: 'detectScrolling',\n value: function detectScrolling() {\n var _this4 = this;\n\n if (this.scrolling) return;\n this.scrolling = true;\n this.handleScrollStart();\n this.detectScrollingInterval = setInterval(function () {\n if (_this4.lastViewScrollLeft === _this4.viewScrollLeft && _this4.lastViewScrollTop === _this4.viewScrollTop) {\n clearInterval(_this4.detectScrollingInterval);\n _this4.scrolling = false;\n _this4.handleScrollStop();\n }\n _this4.lastViewScrollLeft = _this4.viewScrollLeft;\n _this4.lastViewScrollTop = _this4.viewScrollTop;\n }, 100);\n }\n }, {\n key: 'raf',\n value: function raf(callback) {\n var _this5 = this;\n\n if (this.requestFrame) _raf3[\"default\"].cancel(this.requestFrame);\n this.requestFrame = (0, _raf3[\"default\"])(function () {\n _this5.requestFrame = undefined;\n callback();\n });\n }\n }, {\n key: 'update',\n value: function update(callback) {\n var _this6 = this;\n\n this.raf(function () {\n return _this6._update(callback);\n });\n }\n }, {\n key: '_update',\n value: function _update(callback) {\n var _props4 = this.props,\n onUpdate = _props4.onUpdate,\n hideTracksWhenNotNeeded = _props4.hideTracksWhenNotNeeded;\n\n var values = this.getValues();\n if ((0, _getScrollbarWidth2[\"default\"])()) {\n var scrollLeft = values.scrollLeft,\n clientWidth = values.clientWidth,\n scrollWidth = values.scrollWidth;\n\n var trackHorizontalWidth = (0, _getInnerWidth2[\"default\"])(this.trackHorizontal);\n var thumbHorizontalWidth = this.getThumbHorizontalWidth();\n var thumbHorizontalX = scrollLeft / (scrollWidth - clientWidth) * (trackHorizontalWidth - thumbHorizontalWidth);\n var thumbHorizontalStyle = {\n width: thumbHorizontalWidth,\n transform: 'translateX(' + thumbHorizontalX + 'px)'\n };\n var scrollTop = values.scrollTop,\n clientHeight = values.clientHeight,\n scrollHeight = values.scrollHeight;\n\n var trackVerticalHeight = (0, _getInnerHeight2[\"default\"])(this.trackVertical);\n var thumbVerticalHeight = this.getThumbVerticalHeight();\n var thumbVerticalY = scrollTop / (scrollHeight - clientHeight) * (trackVerticalHeight - thumbVerticalHeight);\n var thumbVerticalStyle = {\n height: thumbVerticalHeight,\n transform: 'translateY(' + thumbVerticalY + 'px)'\n };\n if (hideTracksWhenNotNeeded) {\n var trackHorizontalStyle = {\n visibility: scrollWidth > clientWidth ? 'visible' : 'hidden'\n };\n var trackVerticalStyle = {\n visibility: scrollHeight > clientHeight ? 'visible' : 'hidden'\n };\n (0, _domCss2[\"default\"])(this.trackHorizontal, trackHorizontalStyle);\n (0, _domCss2[\"default\"])(this.trackVertical, trackVerticalStyle);\n }\n (0, _domCss2[\"default\"])(this.thumbHorizontal, thumbHorizontalStyle);\n (0, _domCss2[\"default\"])(this.thumbVertical, thumbVerticalStyle);\n }\n if (onUpdate) onUpdate(values);\n if (typeof callback !== 'function') return;\n callback(values);\n }\n }, {\n key: 'render',\n value: function render() {\n var _this7 = this;\n\n var scrollbarWidth = (0, _getScrollbarWidth2[\"default\"])();\n /* eslint-disable no-unused-vars */\n\n var _props5 = this.props,\n onScroll = _props5.onScroll,\n onScrollFrame = _props5.onScrollFrame,\n onScrollStart = _props5.onScrollStart,\n onScrollStop = _props5.onScrollStop,\n onUpdate = _props5.onUpdate,\n renderView = _props5.renderView,\n renderTrackHorizontal = _props5.renderTrackHorizontal,\n renderTrackVertical = _props5.renderTrackVertical,\n renderThumbHorizontal = _props5.renderThumbHorizontal,\n renderThumbVertical = _props5.renderThumbVertical,\n tagName = _props5.tagName,\n hideTracksWhenNotNeeded = _props5.hideTracksWhenNotNeeded,\n autoHide = _props5.autoHide,\n autoHideTimeout = _props5.autoHideTimeout,\n autoHideDuration = _props5.autoHideDuration,\n thumbSize = _props5.thumbSize,\n thumbMinSize = _props5.thumbMinSize,\n universal = _props5.universal,\n autoHeight = _props5.autoHeight,\n autoHeightMin = _props5.autoHeightMin,\n autoHeightMax = _props5.autoHeightMax,\n style = _props5.style,\n children = _props5.children,\n props = _objectWithoutProperties(_props5, ['onScroll', 'onScrollFrame', 'onScrollStart', 'onScrollStop', 'onUpdate', 'renderView', 'renderTrackHorizontal', 'renderTrackVertical', 'renderThumbHorizontal', 'renderThumbVertical', 'tagName', 'hideTracksWhenNotNeeded', 'autoHide', 'autoHideTimeout', 'autoHideDuration', 'thumbSize', 'thumbMinSize', 'universal', 'autoHeight', 'autoHeightMin', 'autoHeightMax', 'style', 'children']);\n /* eslint-enable no-unused-vars */\n\n var didMountUniversal = this.state.didMountUniversal;\n\n\n var containerStyle = _extends({}, _styles.containerStyleDefault, autoHeight && _extends({}, _styles.containerStyleAutoHeight, {\n minHeight: autoHeightMin,\n maxHeight: autoHeightMax\n }), style);\n\n var viewStyle = _extends({}, _styles.viewStyleDefault, {\n // Hide scrollbars by setting a negative margin\n marginRight: scrollbarWidth ? -scrollbarWidth : 0,\n marginBottom: scrollbarWidth ? -scrollbarWidth : 0\n }, autoHeight && _extends({}, _styles.viewStyleAutoHeight, {\n // Add scrollbarWidth to autoHeight in order to compensate negative margins\n minHeight: (0, _isString2[\"default\"])(autoHeightMin) ? 'calc(' + autoHeightMin + ' + ' + scrollbarWidth + 'px)' : autoHeightMin + scrollbarWidth,\n maxHeight: (0, _isString2[\"default\"])(autoHeightMax) ? 'calc(' + autoHeightMax + ' + ' + scrollbarWidth + 'px)' : autoHeightMax + scrollbarWidth\n }), autoHeight && universal && !didMountUniversal && {\n minHeight: autoHeightMin,\n maxHeight: autoHeightMax\n }, universal && !didMountUniversal && _styles.viewStyleUniversalInitial);\n\n var trackAutoHeightStyle = {\n transition: 'opacity ' + autoHideDuration + 'ms',\n opacity: 0\n };\n\n var trackHorizontalStyle = _extends({}, _styles.trackHorizontalStyleDefault, autoHide && trackAutoHeightStyle, (!scrollbarWidth || universal && !didMountUniversal) && {\n display: 'none'\n });\n\n var trackVerticalStyle = _extends({}, _styles.trackVerticalStyleDefault, autoHide && trackAutoHeightStyle, (!scrollbarWidth || universal && !didMountUniversal) && {\n display: 'none'\n });\n\n return (0, _react.createElement)(tagName, _extends({}, props, { style: containerStyle, ref: function ref(_ref3) {\n _this7.container = _ref3;\n } }), [(0, _react.cloneElement)(renderView({ style: viewStyle }), { key: 'view', ref: function ref(_ref4) {\n _this7.view = _ref4;\n } }, children), (0, _react.cloneElement)(renderTrackHorizontal({ style: trackHorizontalStyle }), { key: 'trackHorizontal', ref: function ref(_ref5) {\n _this7.trackHorizontal = _ref5;\n } }, (0, _react.cloneElement)(renderThumbHorizontal({ style: _styles.thumbHorizontalStyleDefault }), { ref: function ref(_ref6) {\n _this7.thumbHorizontal = _ref6;\n } })), (0, _react.cloneElement)(renderTrackVertical({ style: trackVerticalStyle }), { key: 'trackVertical', ref: function ref(_ref7) {\n _this7.trackVertical = _ref7;\n } }, (0, _react.cloneElement)(renderThumbVertical({ style: _styles.thumbVerticalStyleDefault }), { ref: function ref(_ref8) {\n _this7.thumbVertical = _ref8;\n } }))]);\n }\n }]);\n\n return Scrollbars;\n}(_react.Component);\n\nexports[\"default\"] = Scrollbars;\n\n\nScrollbars.propTypes = {\n onScroll: _propTypes2[\"default\"].func,\n onScrollFrame: _propTypes2[\"default\"].func,\n onScrollStart: _propTypes2[\"default\"].func,\n onScrollStop: _propTypes2[\"default\"].func,\n onUpdate: _propTypes2[\"default\"].func,\n renderView: _propTypes2[\"default\"].func,\n renderTrackHorizontal: _propTypes2[\"default\"].func,\n renderTrackVertical: _propTypes2[\"default\"].func,\n renderThumbHorizontal: _propTypes2[\"default\"].func,\n renderThumbVertical: _propTypes2[\"default\"].func,\n tagName: _propTypes2[\"default\"].string,\n thumbSize: _propTypes2[\"default\"].number,\n thumbMinSize: _propTypes2[\"default\"].number,\n hideTracksWhenNotNeeded: _propTypes2[\"default\"].bool,\n autoHide: _propTypes2[\"default\"].bool,\n autoHideTimeout: _propTypes2[\"default\"].number,\n autoHideDuration: _propTypes2[\"default\"].number,\n autoHeight: _propTypes2[\"default\"].bool,\n autoHeightMin: _propTypes2[\"default\"].oneOfType([_propTypes2[\"default\"].number, _propTypes2[\"default\"].string]),\n autoHeightMax: _propTypes2[\"default\"].oneOfType([_propTypes2[\"default\"].number, _propTypes2[\"default\"].string]),\n universal: _propTypes2[\"default\"].bool,\n style: _propTypes2[\"default\"].object,\n children: _propTypes2[\"default\"].node\n};\n\nScrollbars.defaultProps = {\n renderView: _defaultRenderElements.renderViewDefault,\n renderTrackHorizontal: _defaultRenderElements.renderTrackHorizontalDefault,\n renderTrackVertical: _defaultRenderElements.renderTrackVerticalDefault,\n renderThumbHorizontal: _defaultRenderElements.renderThumbHorizontalDefault,\n renderThumbVertical: _defaultRenderElements.renderThumbVerticalDefault,\n tagName: 'div',\n thumbMinSize: 30,\n hideTracksWhenNotNeeded: false,\n autoHide: false,\n autoHideTimeout: 1000,\n autoHideDuration: 200,\n autoHeight: false,\n autoHeightMin: 0,\n autoHeightMax: 200,\n universal: false\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar containerStyleDefault = exports.containerStyleDefault = {\n position: 'relative',\n overflow: 'hidden',\n width: '100%',\n height: '100%'\n};\n\n// Overrides containerStyleDefault properties\nvar containerStyleAutoHeight = exports.containerStyleAutoHeight = {\n height: 'auto'\n};\n\nvar viewStyleDefault = exports.viewStyleDefault = {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n overflow: 'scroll',\n WebkitOverflowScrolling: 'touch'\n};\n\n// Overrides viewStyleDefault properties\nvar viewStyleAutoHeight = exports.viewStyleAutoHeight = {\n position: 'relative',\n top: undefined,\n left: undefined,\n right: undefined,\n bottom: undefined\n};\n\nvar viewStyleUniversalInitial = exports.viewStyleUniversalInitial = {\n overflow: 'hidden',\n marginRight: 0,\n marginBottom: 0\n};\n\nvar trackHorizontalStyleDefault = exports.trackHorizontalStyleDefault = {\n position: 'absolute',\n height: 6\n};\n\nvar trackVerticalStyleDefault = exports.trackVerticalStyleDefault = {\n position: 'absolute',\n width: 6\n};\n\nvar thumbHorizontalStyleDefault = exports.thumbHorizontalStyleDefault = {\n position: 'relative',\n display: 'block',\n height: '100%'\n};\n\nvar thumbVerticalStyleDefault = exports.thumbVerticalStyleDefault = {\n position: 'relative',\n display: 'block',\n width: '100%'\n};\n\nvar disableSelectStyle = exports.disableSelectStyle = {\n userSelect: 'none'\n};\n\nvar disableSelectStyleReset = exports.disableSelectStyleReset = {\n userSelect: ''\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Scrollbars = undefined;\n\nvar _Scrollbars = require('./Scrollbars');\n\nvar _Scrollbars2 = _interopRequireDefault(_Scrollbars);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nexports[\"default\"] = _Scrollbars2[\"default\"];\nexports.Scrollbars = _Scrollbars2[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getInnerHeight;\nfunction getInnerHeight(el) {\n var clientHeight = el.clientHeight;\n\n var _getComputedStyle = getComputedStyle(el),\n paddingTop = _getComputedStyle.paddingTop,\n paddingBottom = _getComputedStyle.paddingBottom;\n\n return clientHeight - parseFloat(paddingTop) - parseFloat(paddingBottom);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getInnerWidth;\nfunction getInnerWidth(el) {\n var clientWidth = el.clientWidth;\n\n var _getComputedStyle = getComputedStyle(el),\n paddingLeft = _getComputedStyle.paddingLeft,\n paddingRight = _getComputedStyle.paddingRight;\n\n return clientWidth - parseFloat(paddingLeft) - parseFloat(paddingRight);\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getScrollbarWidth;\n\nvar _domCss = require('dom-css');\n\nvar _domCss2 = _interopRequireDefault(_domCss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar scrollbarWidth = false;\n\nfunction getScrollbarWidth() {\n if (scrollbarWidth !== false) return scrollbarWidth;\n /* istanbul ignore else */\n if (typeof document !== 'undefined') {\n var div = document.createElement('div');\n (0, _domCss2[\"default\"])(div, {\n width: 100,\n height: 100,\n position: 'absolute',\n top: -9999,\n overflow: 'scroll',\n MsOverflowStyle: 'scrollbar'\n });\n document.body.appendChild(div);\n scrollbarWidth = div.offsetWidth - div.clientWidth;\n document.body.removeChild(div);\n } else {\n scrollbarWidth = 0;\n }\n return scrollbarWidth || 0;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = isString;\nfunction isString(maybe) {\n return typeof maybe === 'string';\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = returnFalse;\nfunction returnFalse() {\n return false;\n}","\nvar space = require('to-space-case')\n\n/**\n * Export.\n */\n\nmodule.exports = toCamelCase\n\n/**\n * Convert a `string` to camel case.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction toCamelCase(string) {\n return space(string).replace(/\\s(\\w)/g, function (matches, letter) {\n return letter.toUpperCase()\n })\n}\n","\n/**\n * Export.\n */\n\nmodule.exports = toNoCase\n\n/**\n * Test whether a string is camel-case.\n */\n\nvar hasSpace = /\\s/\nvar hasSeparator = /(_|-|\\.|:)/\nvar hasCamel = /([a-z][A-Z]|[A-Z][a-z])/\n\n/**\n * Remove any starting case from a `string`, like camel or snake, but keep\n * spaces and punctuation that may be important otherwise.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction toNoCase(string) {\n if (hasSpace.test(string)) return string.toLowerCase()\n if (hasSeparator.test(string)) return (unseparate(string) || string).toLowerCase()\n if (hasCamel.test(string)) return uncamelize(string).toLowerCase()\n return string.toLowerCase()\n}\n\n/**\n * Separator splitter.\n */\n\nvar separatorSplitter = /[\\W_]+(.|$)/g\n\n/**\n * Un-separate a `string`.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction unseparate(string) {\n return string.replace(separatorSplitter, function (m, next) {\n return next ? ' ' + next : ''\n })\n}\n\n/**\n * Camelcase splitter.\n */\n\nvar camelSplitter = /(.)([A-Z]+)/g\n\n/**\n * Un-camelcase a `string`.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction uncamelize(string) {\n return string.replace(camelSplitter, function (m, previous, uppers) {\n return previous + ' ' + uppers.toLowerCase().split('').join(' ')\n })\n}\n","\nvar clean = require('to-no-case')\n\n/**\n * Export.\n */\n\nmodule.exports = toSpaceCase\n\n/**\n * Convert a `string` to space case.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction toSpaceCase(string) {\n return clean(string).replace(/[\\W_]+(.|$)/g, function (matches, match) {\n return match ? ' ' + match : ''\n }).trim()\n}\n","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nexport default function _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (!it) {\n if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = it.call(o);\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nexport default function _createSuper(Derived) {\n var hasNativeReflectConstruct = isNativeReflectConstruct();\n return function _createSuperInternal() {\n var Super = getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return possibleConstructorReturn(this, result);\n };\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","function isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\n\nfunction extend(target, src) {\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n Object.keys(src).filter(key => noExtend.indexOf(key) < 0).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n if (src[key].__swiper__) target[key] = src[key];else extend(target[key], src[key]);\n } else {\n target[key] = src[key];\n }\n });\n}\n\nfunction needsNavigation(params) {\n if (params === void 0) {\n params = {};\n }\n\n return params.navigation && typeof params.navigation.nextEl === 'undefined' && typeof params.navigation.prevEl === 'undefined';\n}\n\nfunction needsPagination(params) {\n if (params === void 0) {\n params = {};\n }\n\n return params.pagination && typeof params.pagination.el === 'undefined';\n}\n\nfunction needsScrollbar(params) {\n if (params === void 0) {\n params = {};\n }\n\n return params.scrollbar && typeof params.scrollbar.el === 'undefined';\n}\n\nfunction uniqueClasses(classNames) {\n if (classNames === void 0) {\n classNames = '';\n }\n\n const classes = classNames.split(' ').map(c => c.trim()).filter(c => !!c);\n const unique = [];\n classes.forEach(c => {\n if (unique.indexOf(c) < 0) unique.push(c);\n });\n return unique.join(' ');\n}\n\nexport { isObject, extend, needsNavigation, needsPagination, needsScrollbar, uniqueClasses };","/* underscore in name -> watch for changes */\nconst paramsList = ['modules', 'init', '_direction', 'touchEventsTarget', 'initialSlide', '_speed', 'cssMode', 'updateOnWindowResize', 'resizeObserver', 'nested', 'focusableElements', '_enabled', '_width', '_height', 'preventInteractionOnTransition', 'userAgent', 'url', '_edgeSwipeDetection', '_edgeSwipeThreshold', '_freeMode', '_autoHeight', 'setWrapperSize', 'virtualTranslate', '_effect', 'breakpoints', '_spaceBetween', '_slidesPerView', 'maxBackfaceHiddenSlides', '_grid', '_slidesPerGroup', '_slidesPerGroupSkip', '_slidesPerGroupAuto', '_centeredSlides', '_centeredSlidesBounds', '_slidesOffsetBefore', '_slidesOffsetAfter', 'normalizeSlideIndex', '_centerInsufficientSlides', '_watchOverflow', 'roundLengths', 'touchRatio', 'touchAngle', 'simulateTouch', '_shortSwipes', '_longSwipes', 'longSwipesRatio', 'longSwipesMs', '_followFinger', 'allowTouchMove', '_threshold', 'touchMoveStopPropagation', 'touchStartPreventDefault', 'touchStartForcePreventDefault', 'touchReleaseOnEdges', 'uniqueNavElements', '_resistance', '_resistanceRatio', '_watchSlidesProgress', '_grabCursor', 'preventClicks', 'preventClicksPropagation', '_slideToClickedSlide', '_preloadImages', 'updateOnImagesReady', '_loop', '_loopAdditionalSlides', '_loopedSlides', '_loopFillGroupWithBlank', 'loopPreventsSlide', '_rewind', '_allowSlidePrev', '_allowSlideNext', '_swipeHandler', '_noSwiping', 'noSwipingClass', 'noSwipingSelector', 'passiveListeners', 'containerModifierClass', 'slideClass', 'slideBlankClass', 'slideActiveClass', 'slideDuplicateActiveClass', 'slideVisibleClass', 'slideDuplicateClass', 'slideNextClass', 'slideDuplicateNextClass', 'slidePrevClass', 'slideDuplicatePrevClass', 'wrapperClass', 'runCallbacksOnInit', 'observer', 'observeParents', 'observeSlideChildren', // modules\n'a11y', '_autoplay', '_controller', 'coverflowEffect', 'cubeEffect', 'fadeEffect', 'flipEffect', 'creativeEffect', 'cardsEffect', 'hashNavigation', 'history', 'keyboard', 'lazy', 'mousewheel', '_navigation', '_pagination', 'parallax', '_scrollbar', '_thumbs', 'virtual', 'zoom'];\nexport { paramsList };","import React from 'react';\nimport Swiper from 'swiper';\n\nfunction calcLoopedSlides(slides, swiperParams) {\n let slidesPerViewParams = swiperParams.slidesPerView;\n\n if (swiperParams.breakpoints) {\n const breakpoint = Swiper.prototype.getBreakpoint(swiperParams.breakpoints);\n const breakpointOnlyParams = breakpoint in swiperParams.breakpoints ? swiperParams.breakpoints[breakpoint] : undefined;\n\n if (breakpointOnlyParams && breakpointOnlyParams.slidesPerView) {\n slidesPerViewParams = breakpointOnlyParams.slidesPerView;\n }\n }\n\n let loopedSlides = Math.ceil(parseFloat(swiperParams.loopedSlides || slidesPerViewParams, 10));\n loopedSlides += swiperParams.loopAdditionalSlides;\n\n if (loopedSlides > slides.length) {\n loopedSlides = slides.length;\n }\n\n return loopedSlides;\n}\n\nfunction renderLoop(swiper, slides, swiperParams) {\n const modifiedSlides = slides.map((child, index) => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper,\n 'data-swiper-slide-index': index\n });\n });\n\n function duplicateSlide(child, index, position) {\n return /*#__PURE__*/React.cloneElement(child, {\n key: `${child.key}-duplicate-${index}-${position}`,\n className: `${child.props.className || ''} ${swiperParams.slideDuplicateClass}`\n });\n }\n\n if (swiperParams.loopFillGroupWithBlank) {\n const blankSlidesNum = swiperParams.slidesPerGroup - modifiedSlides.length % swiperParams.slidesPerGroup;\n\n if (blankSlidesNum !== swiperParams.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankSlide = /*#__PURE__*/React.createElement(\"div\", {\n className: `${swiperParams.slideClass} ${swiperParams.slideBlankClass}`\n });\n modifiedSlides.push(blankSlide);\n }\n }\n }\n\n if (swiperParams.slidesPerView === 'auto' && !swiperParams.loopedSlides) {\n swiperParams.loopedSlides = modifiedSlides.length;\n }\n\n const loopedSlides = calcLoopedSlides(modifiedSlides, swiperParams);\n const prependSlides = [];\n const appendSlides = [];\n modifiedSlides.forEach((child, index) => {\n if (index < loopedSlides) {\n appendSlides.push(duplicateSlide(child, index, 'prepend'));\n }\n\n if (index < modifiedSlides.length && index >= modifiedSlides.length - loopedSlides) {\n prependSlides.push(duplicateSlide(child, index, 'append'));\n }\n });\n\n if (swiper) {\n swiper.loopedSlides = loopedSlides;\n }\n\n return [...prependSlides, ...modifiedSlides, ...appendSlides];\n}\n\nexport { calcLoopedSlides, renderLoop };","import React from 'react';\n\nfunction processChildren(c) {\n const slides = [];\n React.Children.toArray(c).forEach(child => {\n if (child.type && child.type.displayName === 'SwiperSlide') {\n slides.push(child);\n } else if (child.props && child.props.children) {\n processChildren(child.props.children).forEach(slide => slides.push(slide));\n }\n });\n return slides;\n}\n\nfunction getChildren(c) {\n const slides = [];\n const slots = {\n 'container-start': [],\n 'container-end': [],\n 'wrapper-start': [],\n 'wrapper-end': []\n };\n React.Children.toArray(c).forEach(child => {\n if (child.type && child.type.displayName === 'SwiperSlide') {\n slides.push(child);\n } else if (child.props && child.props.slot && slots[child.props.slot]) {\n slots[child.props.slot].push(child);\n } else if (child.props && child.props.children) {\n const foundSlides = processChildren(child.props.children);\n\n if (foundSlides.length > 0) {\n foundSlides.forEach(slide => slides.push(slide));\n } else {\n slots['container-end'].push(child);\n }\n } else {\n slots['container-end'].push(child);\n }\n });\n return {\n slides,\n slots\n };\n}\n\nexport { getChildren };","import { isObject, extend } from './utils.js';\n\nfunction updateSwiper(_ref) {\n let {\n swiper,\n slides,\n passedParams,\n changedParams,\n nextEl,\n prevEl,\n scrollbarEl,\n paginationEl\n } = _ref;\n const updateParams = changedParams.filter(key => key !== 'children' && key !== 'direction');\n const {\n params: currentParams,\n pagination,\n navigation,\n scrollbar,\n virtual,\n thumbs\n } = swiper;\n let needThumbsInit;\n let needControllerInit;\n let needPaginationInit;\n let needScrollbarInit;\n let needNavigationInit;\n\n if (changedParams.includes('thumbs') && passedParams.thumbs && passedParams.thumbs.swiper && currentParams.thumbs && !currentParams.thumbs.swiper) {\n needThumbsInit = true;\n }\n\n if (changedParams.includes('controller') && passedParams.controller && passedParams.controller.control && currentParams.controller && !currentParams.controller.control) {\n needControllerInit = true;\n }\n\n if (changedParams.includes('pagination') && passedParams.pagination && (passedParams.pagination.el || paginationEl) && (currentParams.pagination || currentParams.pagination === false) && pagination && !pagination.el) {\n needPaginationInit = true;\n }\n\n if (changedParams.includes('scrollbar') && passedParams.scrollbar && (passedParams.scrollbar.el || scrollbarEl) && (currentParams.scrollbar || currentParams.scrollbar === false) && scrollbar && !scrollbar.el) {\n needScrollbarInit = true;\n }\n\n if (changedParams.includes('navigation') && passedParams.navigation && (passedParams.navigation.prevEl || prevEl) && (passedParams.navigation.nextEl || nextEl) && (currentParams.navigation || currentParams.navigation === false) && navigation && !navigation.prevEl && !navigation.nextEl) {\n needNavigationInit = true;\n }\n\n const destroyModule = mod => {\n if (!swiper[mod]) return;\n swiper[mod].destroy();\n\n if (mod === 'navigation') {\n currentParams[mod].prevEl = undefined;\n currentParams[mod].nextEl = undefined;\n swiper[mod].prevEl = undefined;\n swiper[mod].nextEl = undefined;\n } else {\n currentParams[mod].el = undefined;\n swiper[mod].el = undefined;\n }\n };\n\n updateParams.forEach(key => {\n if (isObject(currentParams[key]) && isObject(passedParams[key])) {\n extend(currentParams[key], passedParams[key]);\n } else {\n const newValue = passedParams[key];\n\n if ((newValue === true || newValue === false) && (key === 'navigation' || key === 'pagination' || key === 'scrollbar')) {\n if (newValue === false) {\n destroyModule(key);\n }\n } else {\n currentParams[key] = passedParams[key];\n }\n }\n });\n\n if (updateParams.includes('controller') && !needControllerInit && swiper.controller && swiper.controller.control && currentParams.controller && currentParams.controller.control) {\n swiper.controller.control = currentParams.controller.control;\n }\n\n if (changedParams.includes('children') && virtual && currentParams.virtual.enabled) {\n virtual.slides = slides;\n virtual.update(true);\n } else if (changedParams.includes('children') && swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n\n if (needThumbsInit) {\n const initialized = thumbs.init();\n if (initialized) thumbs.update(true);\n }\n\n if (needControllerInit) {\n swiper.controller.control = currentParams.controller.control;\n }\n\n if (needPaginationInit) {\n if (paginationEl) currentParams.pagination.el = paginationEl;\n pagination.init();\n pagination.render();\n pagination.update();\n }\n\n if (needScrollbarInit) {\n if (scrollbarEl) currentParams.scrollbar.el = scrollbarEl;\n scrollbar.init();\n scrollbar.updateSize();\n scrollbar.setTranslate();\n }\n\n if (needNavigationInit) {\n if (nextEl) currentParams.navigation.nextEl = nextEl;\n if (prevEl) currentParams.navigation.prevEl = prevEl;\n navigation.init();\n navigation.update();\n }\n\n if (changedParams.includes('allowSlideNext')) {\n swiper.allowSlideNext = passedParams.allowSlideNext;\n }\n\n if (changedParams.includes('allowSlidePrev')) {\n swiper.allowSlidePrev = passedParams.allowSlidePrev;\n }\n\n if (changedParams.includes('direction')) {\n swiper.changeDirection(passedParams.direction, false);\n }\n\n swiper.update();\n}\n\nexport { updateSwiper };","import { useEffect, useLayoutEffect } from 'react';\n\nfunction useIsomorphicLayoutEffect(callback, deps) {\n // eslint-disable-next-line\n if (typeof window === 'undefined') return useEffect(callback, deps);\n return useLayoutEffect(callback, deps);\n}\n\nexport { useIsomorphicLayoutEffect };","import { createContext, useContext } from 'react';\nexport const SwiperSlideContext = /*#__PURE__*/createContext(null);\nexport const useSwiperSlide = () => {\n return useContext(SwiperSlideContext);\n};\nexport const SwiperContext = /*#__PURE__*/createContext(null);\nexport const useSwiper = () => {\n return useContext(SwiperContext);\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React, { useRef, useState, useEffect, forwardRef } from 'react';\nimport SwiperCore from 'swiper';\nimport { getParams } from './get-params.js';\nimport { mountSwiper } from './mount-swiper.js';\nimport { needsScrollbar, needsNavigation, needsPagination, uniqueClasses, extend } from './utils.js';\nimport { renderLoop, calcLoopedSlides } from './loop.js';\nimport { getChangedParams } from './get-changed-params.js';\nimport { getChildren } from './get-children.js';\nimport { updateSwiper } from './update-swiper.js';\nimport { renderVirtual, updateOnVirtualData } from './virtual.js';\nimport { useIsomorphicLayoutEffect } from './use-isomorphic-layout-effect.js';\nimport { SwiperContext } from './context.js';\nconst Swiper = /*#__PURE__*/forwardRef(function (_temp, externalElRef) {\n let {\n className,\n tag: Tag = 'div',\n wrapperTag: WrapperTag = 'div',\n children,\n onSwiper,\n ...rest\n } = _temp === void 0 ? {} : _temp;\n let eventsAssigned = false;\n const [containerClasses, setContainerClasses] = useState('swiper');\n const [virtualData, setVirtualData] = useState(null);\n const [breakpointChanged, setBreakpointChanged] = useState(false);\n const initializedRef = useRef(false);\n const swiperElRef = useRef(null);\n const swiperRef = useRef(null);\n const oldPassedParamsRef = useRef(null);\n const oldSlides = useRef(null);\n const nextElRef = useRef(null);\n const prevElRef = useRef(null);\n const paginationElRef = useRef(null);\n const scrollbarElRef = useRef(null);\n const {\n params: swiperParams,\n passedParams,\n rest: restProps,\n events\n } = getParams(rest);\n const {\n slides,\n slots\n } = getChildren(children);\n\n const onBeforeBreakpoint = () => {\n setBreakpointChanged(!breakpointChanged);\n };\n\n Object.assign(swiperParams.on, {\n _containerClasses(swiper, classes) {\n setContainerClasses(classes);\n }\n\n });\n\n const initSwiper = () => {\n // init swiper\n Object.assign(swiperParams.on, events);\n eventsAssigned = true;\n swiperRef.current = new SwiperCore(swiperParams);\n\n swiperRef.current.loopCreate = () => {};\n\n swiperRef.current.loopDestroy = () => {};\n\n if (swiperParams.loop) {\n swiperRef.current.loopedSlides = calcLoopedSlides(slides, swiperParams);\n }\n\n if (swiperRef.current.virtual && swiperRef.current.params.virtual.enabled) {\n swiperRef.current.virtual.slides = slides;\n const extendWith = {\n cache: false,\n slides,\n renderExternal: setVirtualData,\n renderExternalUpdate: false\n };\n extend(swiperRef.current.params.virtual, extendWith);\n extend(swiperRef.current.originalParams.virtual, extendWith);\n }\n };\n\n if (!swiperElRef.current) {\n initSwiper();\n } // Listen for breakpoints change\n\n\n if (swiperRef.current) {\n swiperRef.current.on('_beforeBreakpoint', onBeforeBreakpoint);\n }\n\n const attachEvents = () => {\n if (eventsAssigned || !events || !swiperRef.current) return;\n Object.keys(events).forEach(eventName => {\n swiperRef.current.on(eventName, events[eventName]);\n });\n };\n\n const detachEvents = () => {\n if (!events || !swiperRef.current) return;\n Object.keys(events).forEach(eventName => {\n swiperRef.current.off(eventName, events[eventName]);\n });\n };\n\n useEffect(() => {\n return () => {\n if (swiperRef.current) swiperRef.current.off('_beforeBreakpoint', onBeforeBreakpoint);\n };\n }); // set initialized flag\n\n useEffect(() => {\n if (!initializedRef.current && swiperRef.current) {\n swiperRef.current.emitSlidesClasses();\n initializedRef.current = true;\n }\n }); // mount swiper\n\n useIsomorphicLayoutEffect(() => {\n if (externalElRef) {\n externalElRef.current = swiperElRef.current;\n }\n\n if (!swiperElRef.current) return;\n\n if (swiperRef.current.destroyed) {\n initSwiper();\n }\n\n mountSwiper({\n el: swiperElRef.current,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n paginationEl: paginationElRef.current,\n scrollbarEl: scrollbarElRef.current,\n swiper: swiperRef.current\n }, swiperParams);\n if (onSwiper) onSwiper(swiperRef.current); // eslint-disable-next-line\n\n return () => {\n if (swiperRef.current && !swiperRef.current.destroyed) {\n swiperRef.current.destroy(true, false);\n }\n };\n }, []); // watch for params change\n\n useIsomorphicLayoutEffect(() => {\n attachEvents();\n const changedParams = getChangedParams(passedParams, oldPassedParamsRef.current, slides, oldSlides.current);\n oldPassedParamsRef.current = passedParams;\n oldSlides.current = slides;\n\n if (changedParams.length && swiperRef.current && !swiperRef.current.destroyed) {\n updateSwiper({\n swiper: swiperRef.current,\n slides,\n passedParams,\n changedParams,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n scrollbarEl: scrollbarElRef.current,\n paginationEl: paginationElRef.current\n });\n }\n\n return () => {\n detachEvents();\n };\n }); // update on virtual update\n\n useIsomorphicLayoutEffect(() => {\n updateOnVirtualData(swiperRef.current);\n }, [virtualData]); // bypass swiper instance to slides\n\n function renderSlides() {\n if (swiperParams.virtual) {\n return renderVirtual(swiperRef.current, slides, virtualData);\n }\n\n if (!swiperParams.loop || swiperRef.current && swiperRef.current.destroyed) {\n return slides.map(child => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper: swiperRef.current\n });\n });\n }\n\n return renderLoop(swiperRef.current, slides, swiperParams);\n }\n\n return /*#__PURE__*/React.createElement(Tag, _extends({\n ref: swiperElRef,\n className: uniqueClasses(`${containerClasses}${className ? ` ${className}` : ''}`)\n }, restProps), /*#__PURE__*/React.createElement(SwiperContext.Provider, {\n value: swiperRef.current\n }, slots['container-start'], needsNavigation(swiperParams) && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n ref: prevElRef,\n className: \"swiper-button-prev\"\n }), /*#__PURE__*/React.createElement(\"div\", {\n ref: nextElRef,\n className: \"swiper-button-next\"\n })), needsScrollbar(swiperParams) && /*#__PURE__*/React.createElement(\"div\", {\n ref: scrollbarElRef,\n className: \"swiper-scrollbar\"\n }), needsPagination(swiperParams) && /*#__PURE__*/React.createElement(\"div\", {\n ref: paginationElRef,\n className: \"swiper-pagination\"\n }), /*#__PURE__*/React.createElement(WrapperTag, {\n className: \"swiper-wrapper\"\n }, slots['wrapper-start'], renderSlides(), slots['wrapper-end']), slots['container-end']));\n});\nSwiper.displayName = 'Swiper';\nexport { Swiper };","import Swiper from 'swiper';\nimport { isObject, extend } from './utils.js';\nimport { paramsList } from './params-list.js';\n\nfunction getParams(obj) {\n if (obj === void 0) {\n obj = {};\n }\n\n const params = {\n on: {}\n };\n const events = {};\n const passedParams = {};\n extend(params, Swiper.defaults);\n extend(params, Swiper.extendedDefaults);\n params._emitClasses = true;\n params.init = false;\n const rest = {};\n const allowedParams = paramsList.map(key => key.replace(/_/, ''));\n Object.keys(obj).forEach(key => {\n if (allowedParams.indexOf(key) >= 0) {\n if (isObject(obj[key])) {\n params[key] = {};\n passedParams[key] = {};\n extend(params[key], obj[key]);\n extend(passedParams[key], obj[key]);\n } else {\n params[key] = obj[key];\n passedParams[key] = obj[key];\n }\n } else if (key.search(/on[A-Z]/) === 0 && typeof obj[key] === 'function') {\n events[`${key[2].toLowerCase()}${key.substr(3)}`] = obj[key];\n } else {\n rest[key] = obj[key];\n }\n });\n ['navigation', 'pagination', 'scrollbar'].forEach(key => {\n if (params[key] === true) params[key] = {};\n if (params[key] === false) delete params[key];\n });\n return {\n params,\n passedParams,\n rest,\n events\n };\n}\n\nexport { getParams };","import { needsNavigation, needsPagination, needsScrollbar } from './utils.js';\n\nfunction mountSwiper(_ref, swiperParams) {\n let {\n el,\n nextEl,\n prevEl,\n paginationEl,\n scrollbarEl,\n swiper\n } = _ref;\n\n if (needsNavigation(swiperParams) && nextEl && prevEl) {\n swiper.params.navigation.nextEl = nextEl;\n swiper.originalParams.navigation.nextEl = nextEl;\n swiper.params.navigation.prevEl = prevEl;\n swiper.originalParams.navigation.prevEl = prevEl;\n }\n\n if (needsPagination(swiperParams) && paginationEl) {\n swiper.params.pagination.el = paginationEl;\n swiper.originalParams.pagination.el = paginationEl;\n }\n\n if (needsScrollbar(swiperParams) && scrollbarEl) {\n swiper.params.scrollbar.el = scrollbarEl;\n swiper.originalParams.scrollbar.el = scrollbarEl;\n }\n\n swiper.init(el);\n}\n\nexport { mountSwiper };","import { paramsList } from './params-list.js';\nimport { isObject } from './utils.js';\n\nfunction getChangedParams(swiperParams, oldParams, children, oldChildren) {\n const keys = [];\n if (!oldParams) return keys;\n\n const addKey = key => {\n if (keys.indexOf(key) < 0) keys.push(key);\n };\n\n const oldChildrenKeys = oldChildren.map(child => child.key);\n const childrenKeys = children.map(child => child.key);\n if (oldChildrenKeys.join('') !== childrenKeys.join('')) addKey('children');\n if (oldChildren.length !== children.length) addKey('children');\n const watchParams = paramsList.filter(key => key[0] === '_').map(key => key.replace(/_/, ''));\n watchParams.forEach(key => {\n if (key in swiperParams && key in oldParams) {\n if (isObject(swiperParams[key]) && isObject(oldParams[key])) {\n const newKeys = Object.keys(swiperParams[key]);\n const oldKeys = Object.keys(oldParams[key]);\n\n if (newKeys.length !== oldKeys.length) {\n addKey(key);\n } else {\n newKeys.forEach(newKey => {\n if (swiperParams[key][newKey] !== oldParams[key][newKey]) {\n addKey(key);\n }\n });\n oldKeys.forEach(oldKey => {\n if (swiperParams[key][oldKey] !== oldParams[key][oldKey]) addKey(key);\n });\n }\n } else if (swiperParams[key] !== oldParams[key]) {\n addKey(key);\n }\n }\n });\n return keys;\n}\n\nexport { getChangedParams };","import React from 'react';\n\nfunction updateOnVirtualData(swiper) {\n if (!swiper || swiper.destroyed || !swiper.params.virtual || swiper.params.virtual && !swiper.params.virtual.enabled) return;\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n if (swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n\n if (swiper.parallax && swiper.params.parallax && swiper.params.parallax.enabled) {\n swiper.parallax.setTranslate();\n }\n}\n\nfunction renderVirtual(swiper, slides, virtualData) {\n if (!virtualData) return null;\n const style = swiper.isHorizontal() ? {\n [swiper.rtlTranslate ? 'right' : 'left']: `${virtualData.offset}px`\n } : {\n top: `${virtualData.offset}px`\n };\n return slides.filter((child, index) => index >= virtualData.from && index <= virtualData.to).map(child => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper,\n style\n });\n });\n}\n\nexport { renderVirtual, updateOnVirtualData };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React, { useRef, useState, forwardRef } from 'react';\nimport { uniqueClasses } from './utils.js';\nimport { useIsomorphicLayoutEffect } from './use-isomorphic-layout-effect.js';\nimport { SwiperSlideContext } from './context.js';\nconst SwiperSlide = /*#__PURE__*/forwardRef(function (_temp, externalRef) {\n let {\n tag: Tag = 'div',\n children,\n className = '',\n swiper,\n zoom,\n virtualIndex,\n ...rest\n } = _temp === void 0 ? {} : _temp;\n const slideElRef = useRef(null);\n const [slideClasses, setSlideClasses] = useState('swiper-slide');\n\n function updateClasses(_s, el, classNames) {\n if (el === slideElRef.current) {\n setSlideClasses(classNames);\n }\n }\n\n useIsomorphicLayoutEffect(() => {\n if (externalRef) {\n externalRef.current = slideElRef.current;\n }\n\n if (!slideElRef.current || !swiper) {\n return;\n }\n\n if (swiper.destroyed) {\n if (slideClasses !== 'swiper-slide') {\n setSlideClasses('swiper-slide');\n }\n\n return;\n }\n\n swiper.on('_slideClass', updateClasses); // eslint-disable-next-line\n\n return () => {\n if (!swiper) return;\n swiper.off('_slideClass', updateClasses);\n };\n });\n useIsomorphicLayoutEffect(() => {\n if (swiper && slideElRef.current && !swiper.destroyed) {\n setSlideClasses(swiper.getSlideClasses(slideElRef.current));\n }\n }, [swiper]);\n const slideData = {\n isActive: slideClasses.indexOf('swiper-slide-active') >= 0 || slideClasses.indexOf('swiper-slide-duplicate-active') >= 0,\n isVisible: slideClasses.indexOf('swiper-slide-visible') >= 0,\n isDuplicate: slideClasses.indexOf('swiper-slide-duplicate') >= 0,\n isPrev: slideClasses.indexOf('swiper-slide-prev') >= 0 || slideClasses.indexOf('swiper-slide-duplicate-prev') >= 0,\n isNext: slideClasses.indexOf('swiper-slide-next') >= 0 || slideClasses.indexOf('swiper-slide-duplicate-next') >= 0\n };\n\n const renderChildren = () => {\n return typeof children === 'function' ? children(slideData) : children;\n };\n\n return /*#__PURE__*/React.createElement(Tag, _extends({\n ref: slideElRef,\n className: uniqueClasses(`${slideClasses}${className ? ` ${className}` : ''}`),\n \"data-swiper-slide-index\": virtualIndex\n }, rest), /*#__PURE__*/React.createElement(SwiperSlideContext.Provider, {\n value: slideData\n }, zoom ? /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-zoom-container\",\n \"data-swiper-zoom\": typeof zoom === 'number' ? zoom : undefined\n }, renderChildren()) : renderChildren()));\n});\nSwiperSlide.displayName = 'SwiperSlide';\nexport { SwiperSlide };","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 4.0.4\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2022, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: January 11, 2022\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n}\n\nclass Dom7 extends Array {\n constructor(items) {\n if (typeof items === 'number') {\n super(items);\n } else {\n super(...(items || []));\n makeReactive(this);\n }\n }\n\n}\n\nfunction arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf(' c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n}\n\nfunction removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n}\n\nfunction toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n let el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n const attr = el.attributes[i];\n\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n const el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n const values = [];\n\n for (let i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n}\n\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n}\n\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n const window = getWindow();\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n const before = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n const after = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add(...els) {\n const dom = this;\n let i;\n let j;\n\n for (i = 0; i < els.length; i += 1) {\n const toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n const window = getWindow();\n let [left, top, duration, easing, callback] = args;\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n\n let scrollLeft; // eslint-disable-line\n\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n let done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n const window = getWindow();\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n\n stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n\n done(complete) {\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n const elements = []; // Define & Cache Initials & Units\n\n a.elements.each((el, index) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(prop => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue\n };\n });\n });\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(element => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(prop => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const {\n initialValue,\n finalValue,\n unit\n } = el[prop];\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n const currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler(...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on(name, ...args);\n }\n\n return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, transform, transition, on, off, trigger, transitionEnd, outerWidth, outerHeight, styles, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove } from 'dom7';\nconst Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove\n};\nObject.keys(Methods).forEach(methodName => {\n Object.defineProperty($.fn, methodName, {\n value: Methods[methodName],\n writable: true\n });\n});\nexport default $;","import { getWindow, getDocument } from 'ssr-window';\nlet support;\n\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n passiveListener: function checkPassiveListener() {\n let supportsPassive = false;\n\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n }\n\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {// No support\n }\n\n return supportsPassive;\n }(),\n gestures: function checkGestures() {\n return 'ongesturestart' in window;\n }()\n };\n}\n\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n\n return support;\n}\n\nexport { getSupport };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\n\nfunction calcDevice(_temp) {\n let {\n userAgent\n } = _temp === void 0 ? {} : _temp;\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n } // Android\n\n\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n } // Export object\n\n\n return device;\n}\n\nfunction getDevice(overrides) {\n if (overrides === void 0) {\n overrides = {};\n }\n\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n\n return deviceCached;\n}\n\nexport { getDevice };","import { getWindow } from 'ssr-window';\nlet browser;\n\nfunction calcBrowser() {\n const window = getWindow();\n\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n\n return {\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\n\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n\n return browser;\n}\n\nexport { getBrowser };","import { getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {// no getter for object\n }\n\n try {\n delete object[key];\n } catch (e) {// something got wrong\n }\n });\n}\n\nfunction nextTick(callback, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n\n return setTimeout(callback, delay);\n}\n\nfunction now() {\n return Date.now();\n}\n\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n\n if (!style) {\n style = el.style;\n }\n\n return style;\n}\n\nfunction getTranslate(el, axis) {\n if (axis === void 0) {\n axis = 'x';\n }\n\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n } // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n\n\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n\n return curTransform || 0;\n}\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\n\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\n\nfunction extend() {\n const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n for (let i = 1; i < arguments.length; i += 1) {\n const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n\n return to;\n}\n\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\n\nfunction animateCSSModeScroll(_ref) {\n let {\n swiper,\n targetPosition,\n side\n } = _ref;\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n\n const animate = () => {\n time = new Date().getTime();\n\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n\n animate();\n}\n\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty };","/* eslint-disable no-underscore-dangle */\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n\n function onceHandler() {\n self.off(events, onceHandler);\n\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n handler.apply(self, args);\n }\n\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n\n return self;\n },\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n\n emit() {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n\n};","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};","export default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n } // Subtract paddings\n\n\n width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}","import { setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n const swiper = this;\n\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n } // prettier-ignore\n\n\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n const {\n $wrapperEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n\n if (typeof swiperSize === 'undefined') {\n return;\n }\n\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween; // reset margins\n\n if (rtl) slides.css({\n marginLeft: '',\n marginBottom: '',\n marginTop: ''\n });else slides.css({\n marginRight: '',\n marginBottom: '',\n marginTop: ''\n }); // reset cssMode offsets\n\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n } // Calc slides\n\n\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide[0];\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n\n slidesSizesGrid.push(slideSize);\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({\n width: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n } // Remove last grid elements depending on width\n\n\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n\n snapGrid = newSlidesGrid;\n\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n\n if (slideIndex === slides.length - 1) {\n return false;\n }\n\n return true;\n }).css({\n [key]: `${spaceBetween}px`\n });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.$el.hasClass(backFaceHiddenClass);\n\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.$el.addClass(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.$el.removeClass(backFaceHiddenClass);\n }\n }\n}","export default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n }\n\n return swiper.slides.eq(index)[0];\n }; // Find slides currently in view\n\n\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n swiper.visibleSlides.each(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n } // Find new height from highest slide in view\n\n\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n } // Update Height\n\n\n if (newHeight || newHeight === 0) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateSlidesProgress(translate) {\n if (translate === void 0) {\n translate = this && this.translate || 0;\n }\n\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate; // Visible Slides\n\n slides.removeClass(params.slideVisibleClass);\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n\n swiper.visibleSlides = $(swiper.visibleSlides);\n}","export default function updateProgress(translate) {\n const swiper = this;\n\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n\n Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}","export default function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n $wrapperEl,\n activeIndex,\n realIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n let activeSlide;\n\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else {\n activeSlide = slides.eq(activeIndex);\n } // Active classes\n\n\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n }\n } // Next Slide\n\n\n let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n } // Prev Slide\n\n\n let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n }\n\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n }\n }\n\n swiper.emitSlidesClasses();\n}","export default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n\n if (typeof activeIndex === 'undefined') {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n } // Normalize slideIndex\n\n\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n\n return;\n } // Get real index\n\n\n const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n let slideIndex;\n\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};","import { getTranslate } from '../../shared/utils.js';\nexport default function getSwiperTranslate(axis) {\n if (axis === void 0) {\n axis = this.isHorizontal() ? 'x' : 'y';\n }\n\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n $wrapperEl\n } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","export default function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n $wrapperEl,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n if (translate === void 0) {\n translate = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (translateBounds === void 0) {\n translateBounds = true;\n }\n\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\n}","export default function transitionEmit(_ref) {\n let {\n swiper,\n runCallbacks,\n direction,\n step\n } = _ref;\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n\n swiper.emit(`slideChangeTransition${step}`);\n\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function slideTo(index, speed, runCallbacks, internal, initial) {\n if (index === void 0) {\n index = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n const translate = -snapGrid[snapIndex]; // Update progress\n\n swiper.updateProgress(translate); // Normalize slideIndex\n\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n } // Directions locks\n\n\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex); // Update Height\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n swiper.updateSlidesClasses();\n\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n\n return false;\n }\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._swiperImmediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n\n return true;\n}","export default function slideToLoop(index, speed, runCallbacks, internal) {\n if (index === void 0) {\n index = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n let newIndex = index;\n\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n animating,\n enabled,\n params\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n params,\n animating,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n\n let prevIndex = 0;\n\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed, runCallbacks, internal, threshold) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (threshold === void 0) {\n threshold = 0.5;\n }\n\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}","import $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n $wrapperEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\nexport default {\n loopCreate,\n loopFix,\n loopDestroy\n};","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n $wrapperEl\n } = swiper; // Remove duplicated slides\n\n const $selector = $wrapperEl.children().length > 0 ? $($wrapperEl.children()[0].parentNode) : $wrapperEl;\n $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n let slides = $selector.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n $selector.append(blankNode);\n }\n\n slides = $selector.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((el, index) => {\n const slide = $(el);\n\n if (index < swiper.loopedSlides) {\n appendSlides.push(el);\n }\n\n if (index < slides.length && index >= slides.length - swiper.loopedSlides) {\n prependSlides.push(el);\n }\n\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (let i = 0; i < appendSlides.length; i += 1) {\n $selector.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $selector.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}","export default function loopFix() {\n const swiper = this;\n swiper.emit('beforeLoopFix');\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n}","export default function loopDestroy() {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n slides\n } = swiper;\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n slides.removeAttr('data-swiper-slide-index');\n}","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js'; // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\n\nfunction closestElement(selector, base) {\n if (base === void 0) {\n base = this;\n }\n\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n return found || __closestFrom(el.getRootNode().host);\n }\n\n return __closestFrom(base);\n}\n\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return; // change target el for shadow root component\n\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n\n if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {\n $targetEl = $(event.path[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, e.target) : $targetEl.closest(noSwipingSelector)[0])) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n\n if ($targetEl.is(data.focusableElements)) {\n preventDefault = false;\n\n if ($targetEl[0].nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n\n if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n e.preventDefault();\n }\n }\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n\n swiper.emit('touchStart', e);\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js';\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n return;\n }\n\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n\n if (!swiper.allowTouchMove) {\n if (!$(e.target).is(data.focusableElements)) {\n swiper.allowClick = false;\n }\n\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n\n return;\n }\n\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n\n if (!data.startMoving) {\n return;\n }\n\n swiper.allowClick = false;\n\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n\n data.allowMomentumBounce = false; // Grab Cursor\n\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n\n swiper.emit('sliderFirstMove', e);\n }\n\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n } // Directions locks\n\n\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n } // Threshold\n\n\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n } // Update progress\n\n\n swiper.updateProgress(data.currentTranslate); // Update translate\n\n swiper.setTranslate(data.currentTranslate);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n\n data.allowTouchCallbacks = false;\n\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n\n data.isMoved = false;\n data.startMoving = false;\n return;\n } // Return Grab Cursor\n\n\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n } // Time diff\n\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n } // Find current slide\n\n\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n } // Find current slide size\n\n\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}","export default function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n } // Save locks\n\n\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper; // Disable locks on resize\n\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n } // Return locks after resize\n\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}","export default function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n } // eslint-disable-next-line\n\n\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n}","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\nlet dummyEventAttached = false;\n\nfunction dummyEventListener() {}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n touchEvents,\n el,\n wrapperEl,\n device,\n support\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method; // Touch Events\n\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n passive: false,\n capture\n } : capture);\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n } // Prevent Links Clicks\n\n\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n } // Resize handler\n\n\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n};\n\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n support\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n}\n\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\n\nexport default {\n attachEvents,\n detachEvents\n};","import { extend } from '../../shared/utils.js';\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\n\nexport default function setBreakpoint() {\n const swiper = this;\n const {\n activeIndex,\n initialized,\n loopedSlides = 0,\n params,\n $el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n\n swiper.emitContainerClasses();\n }\n\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n setBreakpoint,\n getBreakpoint\n};","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base, containerEl) {\n if (base === void 0) {\n base = 'window';\n }\n\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n\n return breakpoint || 'max';\n}","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n addClasses,\n removeClasses\n};","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\n\nexport default function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n $el,\n device,\n support\n } = swiper; // prettier-ignore\n\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'pointer-events': !support.touch\n }, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n $el.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n}","export default function removeClasses() {\n const swiper = this;\n const {\n $el,\n classNames\n } = swiper;\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n}","function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\n\nexport default {\n checkOverflow\n};","export default {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};","import { extend } from '../shared/utils.js';\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj) {\n if (obj === void 0) {\n obj = {};\n }\n\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport $ from '../shared/dom.js';\nimport { extend, now, deleteProps } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\nimport eventsEmitter from './events-emitter.js';\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport images from './images/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes,\n images\n};\nconst extendedDefaults = {};\n\nclass Swiper {\n constructor() {\n let el;\n let params;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n } // Swiper Instance\n\n\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n }); // Extend defaults with modules params\n\n const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params); // add event listeners\n\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n } // Save Dom lib\n\n\n swiper.$ = $; // Extend Swiper\n\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEvents: function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3]\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }(),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper'); // Init\n\n if (swiper.params.init) {\n swiper.init();\n } // Return app instance\n\n\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n\n swiper.emit('disable');\n }\n\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n\n slidesPerViewDynamic(view, exact) {\n if (view === void 0) {\n view = 'current';\n }\n\n if (exact === void 0) {\n exact = false;\n }\n\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n let translated;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (!translated) {\n setTranslate();\n }\n }\n\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate) {\n if (needUpdate === void 0) {\n needUpdate = true;\n }\n\n const swiper = this;\n const currentDirection = swiper.params.direction;\n\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.each(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true; // Find el\n\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n res.children = options => $el.children(options);\n\n return res;\n }\n\n return $el.children(getWrapperSelector());\n }; // Find Wrapper\n\n\n let $wrapperEl = getWrapper();\n\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each(slideEl => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n });\n return true;\n }\n\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit'); // Set breakpoint\n\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n } // Add Classes\n\n\n swiper.addClasses(); // Create loop\n\n if (swiper.params.loop) {\n swiper.loopCreate();\n } // Update size\n\n\n swiper.updateSize(); // Update slides\n\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n } // Set Grab Cursor\n\n\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n } // Slide To Initial Slide\n\n\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n } // Attach events\n\n\n swiper.attachEvents(); // Init Flag\n\n swiper.initialized = true; // Emit\n\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n\n destroy(deleteInstance, cleanStyles) {\n if (deleteInstance === void 0) {\n deleteInstance = true;\n }\n\n if (cleanStyles === void 0) {\n cleanStyles = true;\n }\n\n const swiper = this;\n const {\n params,\n $el,\n $wrapperEl,\n slides\n } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy'); // Init Flag\n\n swiper.initialized = false; // Detach events\n\n swiper.detachEvents(); // Destroy loop\n\n if (params.loop) {\n swiper.loopDestroy();\n } // Cleanup styles\n\n\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n\n if (slides && slides.length) {\n slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy'); // Detach emitter events\n\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n\n swiper.destroyed = true;\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n\n Swiper.installModule(module);\n return Swiper;\n }\n\n}\n\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\nexport default Swiper;","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n setTransition,\n transitionStart,\n transitionEnd\n};","export default function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionStart(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionEnd(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n setGrabCursor,\n unsetGrabCursor\n};","export default function setGrabCursor(moving) {\n const swiper = this;\n if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}","export default function unsetGrabCursor() {\n const swiper = this;\n\n if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n}","import loadImage from './loadImage.js';\nimport preloadImages from './preloadImages.js';\nexport default {\n loadImage,\n preloadImages\n};","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n\n function onReady() {\n if (callback) callback();\n }\n\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n\n if (sizes) {\n image.sizes = sizes;\n }\n\n if (srcset) {\n image.srcset = srcset;\n }\n\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}","export default function preloadImages() {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n }\n}","import { getWindow } from 'ssr-window';\nexport default function Resize(_ref) {\n let {\n swiper,\n on,\n emit\n } = _ref;\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(_ref2 => {\n let {\n contentBoxSize,\n contentRect,\n target\n } = _ref2;\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}","import { getWindow } from 'ssr-window';\nexport default function Observer(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const observers = [];\n const window = getWindow();\n\n const attach = function (target, options) {\n if (options === void 0) {\n options = {};\n }\n\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n\n const init = () => {\n if (!swiper.params.observer) return;\n\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n } // Observe container\n\n\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren\n }); // Observe wrapper\n\n attach(swiper.$wrapperEl[0], {\n attributes: false\n });\n };\n\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport $ from '../../shared/dom.js';\nexport default function Navigation(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock'\n }\n });\n swiper.navigation = {\n nextEl: null,\n $nextEl: null,\n prevEl: null,\n $prevEl: null\n };\n\n function getEl(el) {\n let $el;\n\n if (el) {\n $el = $(el);\n\n if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) {\n $el = swiper.$el.find(el);\n }\n }\n\n return $el;\n }\n\n function toggleEl($el, disabled) {\n const params = swiper.params.navigation;\n\n if ($el && $el.length > 0) {\n $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n }\n\n function update() {\n // Update Navigation Buttons\n if (swiper.params.loop) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n toggleEl($prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl($nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n }\n\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n }\n\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n const $nextEl = getEl(params.nextEl);\n const $prevEl = getEl(params.prevEl);\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', onNextClick);\n }\n\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', onPrevClick);\n }\n\n Object.assign(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0]\n });\n\n if (!swiper.enabled) {\n if ($nextEl) $nextEl.addClass(params.lockClass);\n if ($prevEl) $prevEl.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\n\n on('init', () => {\n init();\n update();\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl) {\n $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n\n if ($prevEl) {\n $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n });\n on('click', (_s, e) => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n const targetEl = e.target;\n\n if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n });\n Object.assign(swiper.navigation, {\n update,\n init,\n destroy\n });\n}","import { getDocument } from 'ssr-window';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n\n return params;\n}"],"names":["condition","format","a","b","c","d","e","f","error","undefined","Error","args","argIndex","replace","name","framesToPop","MapContext","createContext","applyUpdaterToNextProps","updaterMap","prevProps","nextProps","instance","obj","fn","map","key","nextValue","Object","keys","forEach","registerEvents","props","eventMap","acc","registeredList","googleEventName","onEventName","push","google","maps","event","addListener","reduce","newAcc","unregisterEvent","registered","removeListener","unregisterEvents","events","applyUpdatersToPropsAndRegisterEvents","registeredEvents","onDblClick","onDragEnd","onDragStart","onMapTypeIdChanged","onMouseMove","onMouseOut","onMouseOver","onMouseDown","onMouseUp","onRightClick","onTilesLoaded","onBoundsChanged","onCenterChanged","onClick","onDrag","onHeadingChanged","onIdle","onProjectionChanged","onResize","onTiltChanged","onZoomChanged","extraMapTypes","extra","it","i","mapTypes","set","String","center","setCenter","clickableIcons","clickable","setClickableIcons","heading","setHeading","mapTypeId","setMapTypeId","options","setOptions","streetView","setStreetView","tilt","setTilt","zoom","setZoom","GoogleMap","state","mapRef","getInstance","Map","panTo","latLng","setMapCallback","onLoad","getRef","ref","this","setState","onUnmount","id","style","mapContainerStyle","className","mapContainerClassName","Provider","value","children","__rest","s","t","p","prototype","hasOwnProperty","call","indexOf","getOwnPropertySymbols","length","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","isBrowser","document","injectScript","url","nonce","existingScript","getElementById","windowWithGoogleMap","window","dataStateAttribute","getAttribute","src","originalInitMap","initMap","originalErrorCallback","onerror","err","remove","script","createElement","type","async","setAttribute","head","appendChild","catch","console","isRobotoStyle","element","href","tagName","toLowerCase","styleSheet","cssText","innerHTML","preventGoogleFonts","getElementsByTagName","trueInsertBefore","insertBefore","bind","newElement","referenceElement","Reflect","trueAppend","textNode","makeLoadScriptUrl","googleMapsApiKey","googleMapsClientId","version","language","region","libraries","channel","mapIds","params","invariant","sort","join","cleaningUp","DefaultLoadingElement","previouslyLoadedUrl","defaultLoadScriptProps","LoadScript","check","loaded","cleanupCallback","isCleaningUp","promiseCallback","timer","setInterval","clearInterval","cleanup","parentNode","removeChild","Array","slice","filter","includes","link","innerText","preventGoogleFontsLoading","injectScriptOptions","onError","warn","setTimeout","current","loadingElement","defaultProps","defaultLoadingElement","isMounted","isLoaded","setLoaded","loadError","setLoadError","setLoadedIfMounted","prevLibraries","useLoadScript","TrafficLayer","trafficLayer","setTrafficLayerCallback","context","setMap","PureComponent","contextType","BicyclingLayer","bicyclingLayer","setBicyclingLayerCallback","TransitLayer","transitLayer","setTransitLayerCallback","onCircleComplete","onMarkerComplete","onOverlayComplete","onPolygonComplete","onPolylineComplete","onRectangleComplete","drawingMode","setDrawingMode","drawingManager","setDrawingManagerCallback","drawing","DrawingManager","onAnimationChanged","onClickableChanged","onCursorChanged","onDraggableChanged","onFlatChanged","onIconChanged","onPositionChanged","onShapeChanged","onTitleChanged","onVisibleChanged","onZindexChanged","animation","setAnimation","setClickable","cursor","setCursor","draggable","setDraggable","icon","setIcon","label","setLabel","opacity","setOpacity","position","setPosition","shape","setShape","title","setTitle","visible","setVisible","zIndex","setZIndex","Marker","markerOptions","clusterer","marker","addMarker","noClustererRedraw","removeMarker","child","elementChild","anchor","ClusterIcon","cluster","styles","getClusterer","extend","OverlayView","clusterClassName","getClusterClass","div","sums","boundsChangedListener","height","width","anchorText","anchorIcon","textColor","textSize","textDecoration","fontWeight","fontStyle","fontFamily","backgroundPosition","getMap","onAdd","cMouseDownInCluster","cDraggingMapByCluster","_this","show","getPanes","overlayMouseTarget","addDomListener","markerClusterer_1","trigger","getZoomOnClick","maxZoom_1","getMaxZoom","bounds_1","getBounds","fitBounds","getZoom","cancelBubble","stopPropagation","onRemove","hide","clearInstanceListeners","draw","_a","getPosFromLatLng","x","y","top","left","display","img","divTitle","bp","split","spriteH","parseInt","spriteV","pos","getTitle","createCss","enableRetinaIcons","text","useStyle","getStyles","Math","min","max","index","latlng","getProjection","fromLatLngToDivPixel","Cluster","markerClusterer","gridSize","getGridSize","minClusterSize","getMinimumClusterSize","averageCenter","getAverageCenter","markers","bounds","clusterIcon","getSize","getMarkers","getCenter","LatLngBounds","getPosition","isMarkerAlreadyAdded","length_1","LatLng","lat","lng","calculateBounds","isAdded","mCount","maxZoom","isMarkerInClusterBounds","contains","getExtendedBounds","updateIcon","getCalculator","CALCULATOR","numStyles","count","numberOfDigits","toString","IMAGE_SIZES","Clusterer","optMarkers","optOptions","clusters","listeners","activeMap","ready","minimumClusterSize","zoomOnClick","ignoreHidden","imagePath","imageExtension","imageSizes","calculator","batchSize","batchSizeIE","clusterClass","navigator","userAgent","timerRefStatic","setupStyles","addMarkers","repaint","resetViewport","get","redraw","fitMapToMarkers","setGridSize","setMinimumClusterSize","setMaxZoom","setStyles","setZoomOnClick","setAverageCenter","getIgnoreHidden","setIgnoreHidden","getEnableRetinaIcons","setEnableRetinaIcons","getImageExtension","setImageExtension","getImagePath","setImagePath","getImageSizes","setImageSizes","setCalculator","getBatchSizeIE","setBatchSizeIE","setClusterClass","getTotalMarkers","getClusters","getTotalClusters","optNoDraw","pushMarkerTo","getDraggable","removeMarker_","splice","removed","removeMarkers","clearMarkers","oldClusters","projection","trPix","getNorthEast","blPix","getSouthWest","fromDivPixelToLatLng","createClusters","optHide","distanceBetweenPoints","p1","p2","dLat","PI","dLon","sin","cos","atan2","sqrt","isMarkerInBounds","addToClosestCluster","distance","clusterToAddTo","iFirst","clearTimeout","mapBounds","iLast","getVisible","obj1","obj2","object","property","onClusteringBegin","onClusteringEnd","ClustererComponent","setClustererCallback","InfoBox","content","disableAutoPan","maxWidth","pixelOffset","Size","boxClass","boxStyle","closeBoxMargin","closeBoxURL","infoBoxClearance","isHidden","alignBottom","pane","enableEventPropagation","closeListener","moveListener","mapListener","contextListener","eventListeners","fixedWidthSet","createInfoBoxDiv","cancelHandler","setBoxStyle","getCloseBoxImg","addClickHandler","offsetWidth","bw","getBoxWidths","right","panBox","returnValue","preventDefault","firstChild","closeBox","getCloseClickHandler","close","disablePan","xOffset","yOffset","mapDiv","getDiv","mapWidth","mapHeight","offsetHeight","iwOffsetX","iwOffsetY","iwWidth","iwHeight","padX","padY","pixPosition","fromLatLngToContainerPixel","panBy","webkitTransform","parseFloat","msFilter","visibility","overflow","bottom","defaultView","getComputedStyle","ownerDocument","computedStyle","borderTopWidth","borderBottomWidth","borderLeftWidth","borderRightWidth","documentElement","currentStyle","setContent","isVisible","getContent","getZIndex","open","onCloseClick","onContentChanged","onDomReady","InfoBoxComponent","containerElement","infoBox","setInfoBoxCallback","positionLatLng","infoBoxOptions","GoogleMapsInfoBox","DBSCAN","dataset","epsilon","minPts","distanceFunction","_euclideanDistance","noise","_visited","_assigned","_datasetLength","_init","run","pointId","neighbors","_regionQuery","clusterId","_addToCluster","_expandCluster","pointId2","neighbors2","_mergeArrays","len","q","sum","module","exports","KMEANS","k","assignments","centroids","init","randomCentroid","change","assign","centroidId","mean","maxDim","dim","j","centroid","maxId","round","random","closestCentroid","argmin","point","Number","MAX_VALUE","arg","diff","PriorityQueue","elements","priorities","sorting","_queue","_priorities","_sorting","insert","ele","priority","indexToInsert","priority2","_insertAt","func","getElements","getElementPriority","getPriorities","getElementsWithPriorities","l","require$$0","OPTICS","_reachability","_processed","_coreDistance","_orderedList","priorityQueue","_distanceToCore","_updateQueue","getReachabilityPlot","reachabilityPlot","queue","self","dist","newReachableDistance","queueElements","coreDistCand","require$$1","require$$2","require$$3","sortKD","ids","coords","nodeSize","depth","m","select","inc","n","z","log","exp","sd","floor","swapItem","swap","arr","tmp","range","minX","minY","maxX","maxY","stack","axis","pop","nextAxis","within","qx","qy","r","r2","sqDist","ax","ay","bx","by","dx","dy","defaultGetX","defaultGetY","KDBush","points","getX","getY","ArrayType","Float64Array","IndexArrayType","Uint16Array","Uint32Array","defaultOptions","minZoom","minPoints","radius","extent","generateId","fround","Float32Array","Supercluster","create","trees","createCluster","numPoints","properties","Infinity","parentId","createPointCluster","geometry","coordinates","lngX","latY","getClusterJSON","getClusterProperties","xLng","yLat","abbrev","cluster_id","point_count","point_count_abbreviated","y2","atan","dest","load","time","timerId","timeEnd","now","Date","_cluster","bbox","minLng","minLat","maxLng","maxLat","easternHem","westernHem","concat","tree","_limitZoom","list","getChildren","originId","_getOriginId","originZoom","_getOriginZoom","errorMsg","origin","pow","getLeaves","limit","offset","leaves","_appendLeaves","getTile","z2","tile","features","_addTileFeatures","getClusterExpansionZoom","expansionZoom","skipped","i$1","isCluster","tags","px","py","neighborIds","numPointsOrigin","neighborId","wx","wy","clusterProperties","_map","i$2","list$1","neighborId$1","b$1","numPoints2","i$3","list$2","neighborId$2","b$2","clone","original","factory","MarkerClustererEvents","InfoWindow","infoWindow","setInfoWindowCallback","editable","setEditable","path","setPath","Polyline","polyline","setPolylineCallback","paths","setPaths","Polygon","polygon","setPolygonCallback","setBounds","Rectangle","rectangle","setRectangleCallback","onRadiusChanged","setRadius","Circle","circle","setCircleCallback","onAddFeature","onRemoveFeature","onRemoveProperty","onSetGeometry","onSetProperty","add","addgeojson","geojson","addGeoJson","feature","foreach","callback","loadgeojson","loadGeoJson","overridestyle","overrideStyle","revertstyle","revertStyle","controlposition","controlPosition","setControlPosition","controls","setControls","drawingmode","mode","setStyle","togeojson","toGeoJson","Data","data","setDataCallback","onDefaultViewportChanged","onStatusChanged","setUrl","KmlLayer","kmlLayer","setKmlLayerCallback","createLatLng","inst","Type","createLatLngBounds","ne","sw","ensureOfType","convertToLatLngString","latLngLike","convertToLatLngBoundsString","latLngBoundsLike","south","east","north","west","paneEl","containerStyle","updatePane","mapPaneName","mapPanes","overlayView","onPositionElement","getPixelPositionOffset","currentPosition","previousPosition","layoutStyles","mapCanvasProjection","getLayoutStylesByBounds","getLayoutStylesByPosition","getLayoutStyles","containerRef","prevPositionString","positionString","prevBoundsString","boundsString","FLOAT_PANE","MAP_PANE","MARKER_LAYER","OVERLAY_LAYER","OVERLAY_MOUSE_TARGET","GroundOverlay","groundOverlay","setGroundOverlayCallback","setData","HeatmapLayer","heatmapLayer","setHeatmapLayerCallback","visualization","onPanoChanged","onPovChanged","register","provider","registerPanoProvider","links","setLinks","motionTracking","setMotionTracking","pano","setPano","pov","setPov","StreetViewPanorama","streetViewPanorama","setStreetViewPanoramaCallback","getStreetView","StreetViewService","streetViewService","setStreetViewServiceCallback","onDirectionsChanged","directions","setDirections","panel","setPanel","routeIndex","setRouteIndex","DirectionsRenderer","directionsRenderer","setDirectionsRendererCallback","onPlacesChanged","StandaloneSearchBox","searchBox","setSearchBoxCallback","places","input","querySelector","SearchBox","onPlaceChanged","restrictions","setComponentRestrictions","fields","setFields","types","setTypes","Autocomplete","autocomplete","setAutocompleteCallback","IS_UNITLESS","animationIterationCount","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridColumn","lineClamp","lineHeight","order","orphans","tabSize","widows","fillOpacity","stopOpacity","strokeDashoffset","strokeOpacity","strokeWidth","prefix","require","toCamelCase","cache","addPxToStyle","camel","cssProp","detect","each","arguments","isArray","prop","useLottie","animationData","loop","autoplay","initialSegment","onComplete","onLoopComplete","onEnterFrame","onSegmentStart","onConfigReady","onDataReady","onDataFailed","onLoadedImages","onDOMLoaded","onDestroy","rest","useState","animationLoaded","setAnimationLoaded","animationInstanceRef","useRef","animationContainer","play","stop","pause","setSpeed","speed","goToAndPlay","isFrame","goToAndStop","setDirection","direction","playSegments","segments","forceFlag","setSubframe","useSubFrames","getDuration","inFrames","destroy","loadAnimation","forcedConfigs","config","container","lottie","useEffect","handler","listener","deregisterList","deregister","View","animationContainerRef","animationItem","cursorX","cursorY","useInitInteractivity","wrapperRef","actions","wrapper","scrollModeHandler","assignedSegment","scrollHandler","currentPercent","getContainerVisibility","action","frameToGo","cursorModeHandler","handleCursor","_x","_y","getContainerCursorPosition","xPercent","yPercent","mouseMoveHandler","ev","mouseOutHandler","useLottieInteractivity","lottieObj","Lottie","interactivity","lottieProps","Animator","useAnimator","svgNS","locationHref","_useWebWorker","initialDefaultFrame","setWebWorker","flag","getWebWorker","setLocationHref","getLocationHref","createTag","extendPrototype","sources","destination","sourcePrototype","attr","getDescriptor","getOwnPropertyDescriptor","createProxyFunction","ProxyFunction","audioControllerFactory","AudioController","audioFactory","audios","_volume","_isMuted","addAudio","audio","resume","setRate","rateValue","createAudio","assetPath","Howl","isPlaying","seek","playing","rate","setVolume","setAudioFactory","_updateVolume","mute","unmute","getVolume","volume","createTypedArray","createRegularArray","Uint8ClampedArray","Int16Array","createSizedArray","_typeof$6","Symbol","iterator","constructor","subframeEnabled","expressionsPlugin","idPrefix","isSafari","test","_shouldRoundValues","bmPow","bmSqrt","bmFloor","bmMax","bmMin","BMMath","ProjectInterface$1","propertyNames","abs","val","absArr","defaultCurveSegments","degToRads","roundCorner","roundValues","bmRnd","styleDiv","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","currentTime","totalTime","frameMultiplier","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","target","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","BMAnimationConfigErrorEvent","createElementID","_count","HSVtoRGB","h","v","g","RGBtoHSV","addSaturationToRGB","color","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","hex","colorMap","setSubframeEnabled","getSubframeEnabled","setExpressionsPlugin","getExpressionsPlugin","setDefaultCurveSegments","getDefaultCurveSegments","setIdPrefix","getIdPrefix","createNS","createElementNS","_typeof$5","dataManager","workerFn","workerInstance","_counterId","processes","workerProxy","onmessage","postMessage","_workerSelf","setupWorker","Worker","Blob","blob","URL","createObjectURL","createWorker","completeLayers","layers","comps","layerData","jLen","kLen","completed","tt","td","hasMask","maskProps","masksProperties","pt","convertPathsToAbsoluteValues","ty","findCompLayers","refId","completeShapes","shapes","completeText","comp","findComp","__used","JSON","parse","stringify","ks","o","checkVersion","minimum","animVersionString","animVersion","checkText","minimumVersion","updateTextLayer","textLayer","documentData","iterateLayers","assets","checkChars","chars","charData","ip","op","st","sr","sk","sa","checkPathProperties","pathData","checkColors","iterateShapes","checkShapes","completeClosingShapes","closed","cl","moduleOb","__complete","completeChars","dataFunctionManager","assetLoader","formatResponse","xhr","contentTypeHeader","getResponseHeader","responseType","response","responseText","fullPath","errorCallback","XMLHttpRequest","onreadystatechange","readyState","status","send","completeData","payload","process","createProcess","processId","location","pathname","loadData","completeAnimation","anim","ImagePreloader","proxyImage","canvas","ctx","getContext","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","loadedFootagesCount","totalFootages","imagesLoadedCb","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","u","testImageLoaded","intervalId","getBBox","_imageLoaded","createFootageData","ob","footageData","_footageLoaded","ImagePreloaderFactory","images","loadAssets","cb","_createImageData","setAssetsPath","loadedImages","loadedFootages","getAsset","createImgData","crossOrigin","addEventListener","createImageData","setAttributeNS","_elementHelper","append","setCacheType","elementHelper","BaseEvent","triggerEvent","eventName","_cbs","callbacks","removeEventListener","markerParser","parsePayloadLines","line","lines","keysCount","trim","_markers","_marker","markerData","tm","duration","dr","cm","_","__","ProjectInterface","registerComposition","compositions","_thisProjectFunction","nm","prepareFrame","xt","currentFrame","compInterface","renderers","registerRenderer","getRenderer","_typeof$4","AnimationItem","currentRawFrame","frameRate","frameMult","playSpeed","playDirection","playCount","isPaused","renderer","animationID","timeCompleted","segmentPos","isSubframeEnabled","_idle","_completedLoop","projectInterface","imagePreloader","audioController","configAnimation","onSetupError","onSegmentComplete","drawnFrameEvent","setParams","animType","RendererClass","rendererSettings","globalData","defs","setProjectInterface","autoloadSegments","setupAnimation","lastIndexOf","substr","fileName","wrapperAttributes","attributes","getNamedItem","prerender","includeLayers","newLayers","fonts","fontManager","addChars","addFonts","initExpressions","loadNextSegment","segment","shift","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","animData","fr","searchExtraCompositions","updaFrameModifier","waitForFontsLoaded","triggerConfigError","rendererType","initItems","gotoFrame","resize","updateContainerSize","renderFrame","triggerRenderFrameError","togglePause","setCurrentRawFrameValue","getMarkerData","markerName","numValue","isNaN","frameModifier","advanceTime","_isComplete","checkSegments","adjustSegment","setSegment","end","pendingFrame","resetSegments","getPath","getAssetData","updateDocumentData","getElementByPath","animationManager","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","animItem","subtractPlayingCount","registerAnimation","elem","addPlayingCount","activate","nowTime","elapsedTime","requestAnimationFrame","first","searchAnimations","standalone","animElements","getElementsByClassName","lenAnims","body","freeze","unfreeze","getRegisteredAnimations","animations","BezierFactory","str","beziers","bezEasing","BezierEasing","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","_p","_mSampleValues","_precomputed","mX1","mY1","mX2","mY2","_precompute","_getTForX","_calcSampleValues","aX","mSampleValues","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","pooling","poolFactory","initialLength","_create","_release","_length","_maxLength","pool","release","bezierLengthPool","addedLength","percents","lengths","segmentsLengthPool","totalLength","bezFunction","math","pointOnLine2D","x1","y1","x2","x3","y3","det1","getBezierLength","pt1","pt2","pt3","pt4","ptCoord","perc","ptDistance","curveSegments","lastPoint","lengthData","BezierData","segmentLength","PointData","partial","partialLength","buildBezierData","storedData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","bezierSegmentPoints","getSegmentsLength","shapeData","segmentsLength","pathV","pathO","pathI","getNewSegment","startPerc","endPerc","t0","t1","u0","u1","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","getPointInSegment","percent","pointOnLine3D","z1","z3","diffDist","dist1","dist2","dist3","bez","PropertyFactory","initFrame","mathAbs","interpolateValue","frameNum","caching","newValue","offsetTime","propType","pv","keyData","nextKeyData","keyframeMetadata","fnc","iterationIndex","lastIndex","keyframes","keyframesMetadata","endValue","nextKeyTime","keyTime","to","ti","ind","__fnct","getBezierEasing","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","out","quat","qz","qw","attitude","asin","bank","quaternionToEuler","omega","cosom","sinom","scale0","scale1","az","aw","bz","acos","slerp","createQuaternion","values","c1","c2","c3","s1","s2","s3","getValueAtCurrentTime","renderedFrame","endTime","_caching","renderResult","setVValue","multipliedValue","mult","_mdf","processEffectsSequence","frameId","effectsSequence","lock","_isFirstFrame","finalValue","kf","addEffect","effectFunction","addDynamicProperty","ValueProperty","vel","getValue","MultiDimensionalProperty","KeyframedValueProperty","KeyframedMultidimensionalProperty","arrLen","getProp","DynamicPropertyContainer","dynamicProperties","_isAnimated","iterateDynamicProperties","initDynamicPropertyContainer","pointPool","ShapePath","setPathData","setLength","doubleArrayLength","setXYAt","setTripleAt","vX","vY","oX","oY","iX","iY","reverse","newPath","vertices","outPoints","inPoints","cnt","shapePool","shapePath","cloned","ShapeCollection","addShape","releaseShapes","shapeCollectionPool","newShapeCollection","shapeCollection","ShapePropertyFactory","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","localShapeCollection","shape1","shape2","shapesEqual","ShapeProperty","reset","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","convertEllToPath","p0","s0","_cw","_v","StarShapeProperty","StarShapePropertyFactory","sy","ir","is","convertToPath","convertStarToPath","convertPolygonToPath","or","os","rad","roundness","perimSegment","numPts","angle","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","convertRectToPath","v0","v1","Matrix","_cos","_sin","_tan","tan","_rnd","rotate","mCos","mSin","_t","rotateX","rotateY","rotateZ","shear","sx","skew","skewFromAxis","scale","sz","setTransform","translate","tx","tz","transform","a2","b2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","_identityCalculated","a1","b1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","isIdentity","_identity","equals","matr","cloneFromProps","applyToPoint","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","_typeof$3","setLocation","setSubframeRendering","setPrefix","setQuality","inBrowser","installPlugin","plugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","useWebWorker","setIDPrefix","__getFactory","scripts","myScript","define","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","TrimModifier","PuckerAndBloatModifier","initModifierProperties","addShapeToModifier","setAsAnimated","processKeys","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","segmentOb","shapeSegments","shapeS","shapeE","releasePathsData","processShapes","shapePaths","_s","totalShapeLength","edges","newShapesData","addShapes","lastShape","addPaths","newPaths","addSegment","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","amount","processPath","centerPoint","pathLength","clonedPath","TransformPropertyFactory","defaultVector","TransformProperty","pre","appliedTransformations","pz","rx","ry","rz","_isDirty","applyToMatrix","mat","forceRender","precalculateMatrix","autoOriented","v2","getValueAtTime","autoOrient","_addDynamicProperty","getTransformProperty","RepeaterModifier","RoundCornersModifier","getFontProperties","fontData","fStyle","fWeight","weight","tr","so","eo","pMatrix","rMatrix","sMatrix","tMatrix","matrix","applyTransforms","inv","scaleX","scaleY","elemsData","_currentCopies","_elements","_groups","unshift","resetElements","cloneElements","newElements","changeGroupRender","renderFlag","_render","items","itemsTransform","cont","hasReloaded","copies","ceil","group","ix","reloadShapes","elems","transformData","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","mProps","rd","currentV","currentI","currentO","closerV","newPosPerc","FontManager","emptyChar","w","size","combinedCharacters","surrogateModifiers","zeroWidthJoiner","setUpNode","font","family","node","fontSize","fontVariant","letterSpacing","familyArray","enabledFamilies","trimFontOptions","parent","createHelper","def","helper","engine","fontProps","tHelper","fFamily","textContent","fClass","tCanvasHelper","OffscreenCanvas","measureText","getComputedTextLength","Font","typekitLoaded","_warned","setIsLoadedBinded","setIsLoaded","checkLoadedFontsBinded","checkLoadedFonts","isModifier","firstCharCode","secondCharCode","isZeroWidthJoiner","isCombinedCharacter","_char3","fontPrototype","found","ch","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","monoCase","sansCase","fPath","fOrigin","querySelectorAll","rel","sc","getCharData","_char","charCodeAt","getFontByName","fName","_char2","fontName","doubleSize","singleSize","loadedCount","RenderableElement","initRenderable","isInRange","hidden","isTransparent","renderableComponents","addRenderableComponent","component","removeRenderableComponent","prepareRenderableFrame","num","checkLayerLimits","checkTransparency","finalTransform","mProp","renderConfig","hideOnTransparent","renderRenderable","sourceRectAtTime","getLayerSize","textData","MaskManagerInterface","MaskInterface","mask","_mask","_data","defineProperty","maskManager","_masksInterfaces","viewData","ExpressionPropertyInterface","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","getVelocityAtTime","numKeys","valueProp","valueAtTime","speedAtTime","getSpeedAtTime","velocityAtTime","propertyGroup","defaultGetter","UnidimensionalPropertyInterface","arrValue","MultidimensionalPropertyInterface","TransformExpressionInterface","_thisFunction","rotation","xRotation","yRotation","xPosition","yPosition","zPosition","anchorPoint","_px","_py","_pz","_transformFactory","LayerExpressionInterface","getMatrix","toWorldMat","_elem","toWorldVec","applyPoint","toWorld","fromWorldVec","invertPoint","fromWorld","hierarchy","fromComp","sampleImage","transformInterface","_thisLayerFunction","shapeInterface","effect","textInterface","toComp","anchorPointDescriptor","defineProperties","hasParent","layerInterface","anchor_point","active","startTime","source","inPoint","outPoint","_name","registerMaskInterface","registerEffectsInterface","effects","propertyGroupFactory","interfaceFunction","parentPropertyGroup","PropertyInterface","propertyName","EffectsExpressionInterface","createGroupInterface","groupInterface","ef","mn","effectElements","_propertyGroup","createValueInterface","numProperties","np","enabled","en","expressionProperty","setGroupProperty","createEffectsInterface","effectsManager","effectsData","CompExpressionInterface","layer","pixelAspect","compSize","frameDuration","displayStartTime","numLayers","ShapePathInterface","view","propertyIndex","ShapeExpressionInterface","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","interfaces","transformInterfaceFactory","cix","contentsInterfaceFactory","startPoint","endPoint","_dashPropertyGroup","dashOb","addPropertyToDashOb","dataProps","dash","start","skewAxis","outerRadius","outerRoundness","innerRoundness","innerRadius","_interfaceFunction","TextExpressionInterface","_prevValue","_sourceText","sourceText","textProperty","stringValue","currentData","getBlendMode","blendModeEnums","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","EffectsManager","effectItem","GroupEffect","BaseElement","FrameElement","_typeof$2","eff","checkMasks","effectsInterface","shapesData","itemsData","setBlendMode","blendModeValue","bm","baseElement","layerElement","initBaseData","layerId","getType","prepareProperties","_isParent","FootageInterface","dataInterfaceFactory","outlineInterface","currentPropertyName","currentProperty","getFootageData","searchProperty","propertyNameIndex","outlineInterfaceFactory","dataInterface","FootageElement","imageLoader","AudioElement","_isPlaying","_canPlay","_currentTime","_volumeMultiplier","_previousVolume","_placeholder","lv","au","BaseRenderer","TransformElement","MaskElement","maskElement","solidPath","rect","expansor","feMorph","currentMasks","maskType","maskRef","getShapeProp","lastPath","filterID","expan","lastOperator","filterId","lastRadius","createLayerSolidPath","invRect","drawPath","maskedElement","getBaseElement","timeRemapped","totalVolume","volumeValue","checkLayers","buildItem","checkPendingElements","createItem","createImage","createComp","createSolid","createNull","createShape","createText","createCamera","createFootage","buildAllItems","pInterface","progressiveLoad","buildElementParenting","parentName","setAsParent","setHierarchy","addPendingElement","pendingElements","pathValue","setupGlobalData","fontsContainer","initTransform","_matMdf","_opMdf","ao","renderTransform","finalMat","globalToLocal","transforms","ptNew","mHelper","getMaskProperty","isFirstFrame","getMaskelement","pathNodes","pathString","pathShapeValue","filtersFactory","filId","skipCoordinates","fil","feColorMatrix","featureSupport","SVGTintFilter","filterManager","matrixFilter","feMergeNode","feMerge","SVGFillFilter","SVGStrokeEffect","initialized","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","SVGDropShadowEffect","filterSize","feGaussianBlur","feOffset","feFlood","feComposite","originalNodeAdded","colorBlack","colorWhite","initialize","groupPath","elemChildren","childNodes","masker","removeAttribute","pathMasker","dasharrayValue","getTotalLength","lineLength","units","color1","color2","color3","tableR","tableG","tableB","feFunc","getTableValue","inputBlack","inputWhite","gamma","outputBlack","outputWhite","colorValue","table","outputDelta","inputDelta","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","matteElement","transformedElement","SVGGaussianBlurEffect","findSymbol","replaceInParent","symbolId","nextChild","useElem","setElementAsMask","symbol","hd","setMatte","sigma","dimensions","sigmaX","sigmaY","edgeMode","registeredEffects","SVGEffects","createFilter","filters","Effect","countsAsEffect","registerEffect","SVGBaseElement","HierarchyElement","RenderableDOMElement","IImageElement","initElement","sourceRect","ProcessedElement","IShapeElement","initRendererElement","createContainerElements","_sizeChanged","gg","layerElementParent","createAlphaToLuminanceFilter","maskGroup","maskGrouper","feCTr","alphaRect","ln","cp","clipId","cpGroup","renderElement","destroyBaseElement","createRenderableComponents","renderableEffectsManager","initHierarchy","checkParenting","createContent","renderInnerContent","innerElem","pr","imagePreserveAspectRatio","addShapeToModifiers","shapeModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","searchProcessedElement","processedElements","addProcessedElement","lineCapEnum","lineJoinEnum","SVGShapeData","transformers","level","caches","lStr","lvl","SVGStyleData","pElem","msElem","DashProperty","dashStr","dashArray","dashoffset","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGNoStyleData","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","SVGGradientFillStyleData","initGradientData","SVGGradientStrokeStyleData","ShapeGroupData","prevViewData","gr","SVGTransformData","comparePoints","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","gf","cst","opacityId","maskId","opFill","lc","lj","ml","of","ms","ost","buildShapeString","_o","_i","shapeString","SVGElementsRenderer","_identityMatrix","_matrixHelper","renderContentTransform","styleData","itemData","renderNoop","renderPath","pathStringTransformed","iterations","lLen","renderFill","styleElem","renderGradientStroke","renderGradient","renderStroke","hasOpacity","attr1","attr2","cValues","oValues","ang","createRenderFunction","SVGShapeElement","stylesList","animatedContents","LetterProps","fc","TextProperty","_frameId","keysIndex","canResize","minimumFontSize","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","finalSize","finalText","finalLineHeight","copyData","completeTextData","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","setElementStyles","render","currentTransform","modifier","processedPos","ownStyles","ownModifiers","renderShape","animatedContent","update","updated","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentValue","currentIndex","textKeys","buildFinalText","charCode","charactersArray","shouldCombine","charAt","newLineFlag","letters","anchorGrouping","currentSize","currentPos","currentLine","lineWidth","maxLineWidth","trackingOffset","currentHeight","boxHeight","lastSpaceIndex","currentChar","uncollapsedSpaces","an","anIndexes","animatorJustifyOffset","animatorData","letterData","based","animators","indexes","fh","fs","fb","rn","totalChars","newInd","currentInd","newData","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","TextSelectorProp","TextSelectorPropFactory","_currentTextLength","finalS","finalE","xe","sm","getMult","easer","tot","smoothness","threshold","newCharsFlag","divisor","getTextSelectorProp","TextAnimatorDataProperty","animatorProps","defaultData","textAnimatorAnimatables","TextAnimatorProperty","renderType","_hasMaskedPath","_textData","_renderType","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","ITextElement","searchProperties","getMeasures","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","prevPoint","tanAngle","matrixHelper","renderedLettersCount","tLength","pi","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","letterM","letterP","defaultPropsArray","animatorFirstCharOffset","justifyOffsetMult","isNewLine","animatorOffset","rot","textAnimator","buildNewText","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","emptyShapeData","SVGTextLottieElement","textSpans","ISolidElement","NullElement","SVGRendererBase","ICompElement","SVGCompElement","supports3d","SVGRenderer","svgElement","ariaLabel","titleElement","titleId","description","descElement","descId","preserveAspectRatio","contentVisibility","viewBoxOnly","viewBoxSize","focusable","destroyed","CVContextData","saved","cArrPos","cTr","cO","savedOp","ShapeTransformManager","sequences","sequenceList","transform_key_count","CVEffects","CVMaskElement","hasMasks","CVBaseElement","CVShapeData","transformsManager","styledShapes","styledShape","addTransformSequence","trNodes","CVShapeElement","CVTextElement","stroke","fill","currentRender","sWidth","fValue","CVImageElement","CVSolidElement","CanvasRendererBase","clearCanvas","dpr","devicePixelRatio","currentGlobalAlpha","contextData","transformMat","CVCompElement","CanvasRenderer","HBaseElement","HSolidElement","HShapeElement","shapesContainer","currentBBox","HTextElement","textPaths","isMasked","HCameraElement","pe","_prevMat","HImageElement","HybridRendererBase","threeDElements","camera","HCompElement","HybridRenderer","singleShape","textContainer","buildTextContents","textArray","textContents","currentTextContent","fromCharCode","tSpan","usesGlyphs","cachedSpansLength","span","childSpan","glyph","glyphElement","_debug","tElement","justify","textBox","renderedLetter","textSpan","appendElementInPos","nextElement","setElements","destroyElements","duplicate","newLength","currentSavedOp","sequence","processSequence","processSequences","getNewKey","canvasContext","beginPath","moveTo","lineTo","bezierCurveTo","save","clip","createElements","blendMode","globalCompositeOperation","hideElement","showElement","forceRealStack","ctxTransform","ctxOpacity","restore","transformHelper","dashResetter","preTransforms","co","wi","da","addTransformToStyleList","removeTransformFromStyleList","closeStyles","shouldRender","ownTransforms","_shouldRender","renderShapeTransform","parentTransform","groupTransform","drawLayer","nodes","coOp","strokeStyle","grd","lineCap","lineJoin","miterLimit","setLineDash","lineDashOffset","closePath","isMain","renderGradientFill","renderStyledShape","shapeNodes","groupTransformMat","createLinearGradient","createRadialGradient","addColorStop","hasFill","hasStroke","commands","pathArr","commandsCounter","lastFill","lastStroke","lastStrokeW","widthCrop","heightCrop","imgW","imgH","imgRel","canvasRel","par","drawImage","cProps","trProps","globalAlpha","actionFlag","popped","mozTransformOrigin","transformCanvas","isDashed","elementWidth","elementHeight","elementRel","animationRel","fillType","clearRect","checkBlendMode","tg","transformedElementStyle","matrixValue","addEffects","backgroundColor","_renderShapeFrame","shapeCont","getTransformedPoint","calculateShapeBoundingBox","item","boundingBox","vPoint","oPoint","nextIPoint","nextVPoint","checkBounds","getBoundsOfCurve","shapeBoundingBox","xMax","yMax","tempBoundingBox","p3","b2ac","t2","calculateF","calculateBoundingBox","currentBoxContains","box","changed","shapeStyle","shapeTransform","compW","compH","innerElemStyle","tParent","tCont","tContStyle","tContTranslation","tStyle","tSpanTranslation","svgStyle","translation","textPath","margin","svgTransform","setup","perspectiveStyle","perspectiveElem","perspective","webkitPerspective","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","mRotationX","mRotationY","hasMatrixChanged","matValue","Image","imageElem","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","getThreeDContainerByPos","startPos","endPos","createThreeDContainer","threeDContainerData","build3dContainers","lastThreeDContainerData","currentContainer","resizerElem","svg","cWidth","cHeight","floatingContainer","_createBaseContainerElements","Expressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","_typeof$1","seedRandom","global","startdenom","significance","ARC4","keylen","me","S","copy","flatten","typ","mixkey","seed","smear","stringseed","tostring","shortseed","entropy","Uint8Array","crypto","msCrypto","getRandomValues","browser","plugins","screen","autoseed","arc4","prng","int32","quick","pass","is_math_call","initialize$2","propTypes","SHAPE","_typeof","ExpressionManager","fetch","frames","$bm_isInstanceOfArray","isNumerable","tOfV","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","tOfB","lenB","sub","mul","mod","$bm_sum","$bm_sub","$bm_mul","$bm_div","$bm_mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","arr2","normalize","vec","rgbToHsl","hue2rgb","hslToRgb","linear","tMin","tMax","value1","value2","_tMin","rnd","createPath","inTangents","outTangents","inVertexPoint","outVertexPoint","arrPlaceholder","initiateExpression","needsVelocity","_needsRandom","elemType","$bm_transform","thisProperty","loopIn","loop_in","loopOut","loop_out","smooth","fromCompToSurface","thisLayer","thisComp","scoped_bm_rt","expression_function","eval","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","loopInDuration","loopOutDuration","velocity","textIndex","textTotal","selectorValue","lookAt","elem1","elem2","fVec","pitch","easeOut","val1","val2","applyEase","easeIn","ease","iKey","lenKey","nearestKey","obKey","framesToTime","fps","timeToFrames","seedrandom","randSeed","substring","posterizeTime","framesPerSecond","executeExpression","_value","frameExpressionId","__preventDeadCodeRemoval","expressionHelpers","searchExpressions","delta","_cachingAtTime","getStaticValueAtTime","addPropertyDecorator","durationFlag","cycleDuration","firstKeyFrame","ret","lastKeyFrame","initV","endV","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","sampleValue","sampleFrequency","getTransformValueAtTime","_transformCachingAtTime","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","ShapePropertyConstructorFunction","getConstructorFunction","KeyframedShapePropertyConstructorFunction","getKeyframedConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","tangentOnPath","normalOnPath","shapeValue","lastTime","propertyGetShapeProp","trims","initialize$1","addDecorator","getExpressionValue","calculateExpression","isKeyframed","hasExpressions","hookCallback","some","hooks","setHookCallback","isObject","hasOwnProp","isObjectEmpty","getOwnPropertyNames","isUndefined","isNumber","isDate","res","valueOf","createUTC","locale","strict","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","isValid","_isValid","flags","parsedParts","isNowValid","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","momentProperties","updateInProgress","copyConfig","from","momentPropertiesLen","_isAMomentObject","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","updateOffset","isMoment","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","argLen","deprecations","deprecateSimple","isFunction","Function","_config","_dayOfMonthOrdinalParseLenient","RegExp","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","mom","output","_calendar","zeroFill","number","targetLength","forceSign","absNumber","zerosToFill","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","localeData","removeFormattingTokens","match","makeFormatFunction","array","formatMoment","expandFormat","invalidDate","replaceLongDateFormatTokens","longDateFormat","defaultLongDateFormat","LTS","LT","L","LL","LLL","LLLL","_longDateFormat","formatUpper","toUpperCase","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","future","past","ss","hh","dd","ww","M","MM","yy","relativeTime","withoutSuffix","string","isFuture","_relativeTime","pastFuture","aliases","addUnitAlias","unit","shorthand","lowerCase","normalizeUnits","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","addUnitPriority","getPrioritizedUnits","unitsObj","isLeapYear","year","absFloor","toInt","argumentForCoercion","coercedNumber","isFinite","makeGetSet","keepTime","set$1","month","date","daysInMonth","stringGet","stringSet","prioritized","prioritizedLen","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","isFormat","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","parseTwoDigitYear","getSetYear","getIsLeapYear","createDate","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","shiftWeekdays","ws","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","day","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","hours","kFormat","lowercase","minutes","matchMeridiem","_meridiemParse","localeIsPM","seconds","kInput","_isPm","isPM","_meridiem","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","globalLocale","baseConfig","dayOfMonthOrdinalParse","meridiemParse","locales","localeFamilies","commonPrefix","minl","normalizeLocale","chooseLocale","names","loadLocale","isLocaleNameSane","oldLocale","_abbr","aliasedRequire","getSetGlobalLocale","getLocale","defineLocale","abbr","parentLocale","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","exec","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","setUTCMinutes","getUTCMinutes","configFromString","createFromInputFallback","defaults","currentDateArray","nowValue","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","temp","weekdayOverflow","curWeek","GG","W","E","createLocal","ISO_8601","RFC_2822","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","hour","isPm","meridiemHour","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromObject","dayOrDate","minute","second","millisecond","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","prototypeMin","other","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","orderLen","isValid$1","createInvalid$1","createDuration","Duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","_milliseconds","_days","_bubble","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","matches","cloneWithOffset","model","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","toArray","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","base","isAfter","isBefore","createAdder","period","isAdding","invalid","isString","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","propertyLen","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","formats","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","toISOString","keepOffset","toDate","inspect","datetime","suffix","zone","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","localStartOfDate","utcStartOfDate","startOfDate","isoWeekday","unix","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","until","localeErasParse","eraName","narrow","localeErasConvertYear","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","isoWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","eraYearOrdinalParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","proto","createUnix","createInZone","parseZone","preParsePostFormat","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","dates","isDSTShifted","proto$1","get$1","field","setter","listMonthsImpl","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","argWithSuffix","argThresholds","withSuffix","th","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","performance","getNanoSeconds","hrtime","moduleLoadTime","hr","upTime","nodeLoadTime","loadTime","prefixes","titleCase","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","propFullName","secret","getShim","isRequired","ReactPropTypes","bigint","bool","any","arrayOf","elementType","instanceOf","objectOf","oneOf","oneOfType","exact","checkPropTypes","PropTypes","root","vendors","raf","caf","last","_now","cancelled","handle","cancel","polyfill","cancelAnimationFrame","_extends","renderViewDefault","_react2","renderTrackHorizontalDefault","_ref","_objectWithoutProperties","finalStyle","borderRadius","renderTrackVerticalDefault","_ref2","renderThumbHorizontalDefault","_ref3","renderThumbVerticalDefault","_ref4","_react","__esModule","_createClass","descriptor","enumerable","configurable","writable","Constructor","protoProps","staticProps","_raf2","_raf3","_interopRequireDefault","_domCss2","_propTypes2","_isString2","_getScrollbarWidth2","_returnFalse2","_getInnerWidth2","_getInnerHeight2","_styles","_defaultRenderElements","_classCallCheck","TypeError","_possibleConstructorReturn","ReferenceError","Scrollbars","_Component","_len","_key","__proto__","getPrototypeOf","getScrollLeft","getScrollTop","getScrollWidth","getScrollHeight","getClientWidth","getClientHeight","getValues","getThumbHorizontalWidth","getThumbVerticalHeight","getScrollLeftForOffset","getScrollTopForOffset","scrollLeft","scrollTop","scrollToLeft","scrollToTop","scrollToRight","scrollToBottom","handleTrackMouseEnter","handleTrackMouseLeave","handleHorizontalTrackMouseDown","handleVerticalTrackMouseDown","handleHorizontalThumbMouseDown","handleVerticalThumbMouseDown","handleWindowResize","handleScroll","handleDrag","handleDragEnd","didMountUniversal","subClass","superClass","setPrototypeOf","_inherits","addListeners","componentDidMountUniversal","universal","removeListeners","requestFrame","hideTracksTimeout","detectScrollingInterval","scrollWidth","scrollHeight","clientWidth","clientHeight","_ref2$scrollLeft","_ref2$scrollTop","_ref2$scrollWidth","_ref2$scrollHeight","_ref2$clientWidth","_ref2$clientHeight","_props","thumbSize","thumbMinSize","_view","trackWidth","trackHorizontal","_props2","_view2","trackHeight","trackVertical","_view3","_view4","thumbHorizontal","thumbVertical","teardownDragging","_this2","_props3","onScroll","onScrollFrame","viewScrollLeft","viewScrollTop","detectScrolling","onScrollStart","handleScrollStartAutoHide","autoHide","showTracks","onScrollStop","handleScrollStopAutoHide","hideTracks","clientX","targetLeft","getBoundingClientRect","thumbWidth","clientY","targetTop","thumbHeight","handleDragStart","prevPageX","prevPageY","disableSelectStyle","onselectstart","disableSelectStyleReset","dragging","stopImmediatePropagation","setupDragging","handleDragEndAutoHide","trackMouseOver","handleTrackMouseEnterAutoHide","handleTrackMouseLeaveAutoHide","_this3","scrolling","autoHideTimeout","_this4","handleScrollStart","lastViewScrollLeft","lastViewScrollTop","handleScrollStop","_this5","_this6","_update","_props4","onUpdate","hideTracksWhenNotNeeded","trackHorizontalWidth","thumbHorizontalWidth","thumbHorizontalStyle","trackVerticalHeight","thumbVerticalHeight","thumbVerticalStyle","trackHorizontalStyle","trackVerticalStyle","_this7","scrollbarWidth","_props5","renderView","renderTrackHorizontal","renderTrackVertical","renderThumbHorizontal","renderThumbVertical","autoHideDuration","autoHeight","autoHeightMin","autoHeightMax","containerStyleDefault","containerStyleAutoHeight","minHeight","maxHeight","viewStyle","viewStyleDefault","marginRight","marginBottom","viewStyleAutoHeight","viewStyleUniversalInitial","trackAutoHeightStyle","transition","trackHorizontalStyleDefault","trackVerticalStyleDefault","cloneElement","_ref5","thumbHorizontalStyleDefault","_ref6","_ref7","thumbVerticalStyleDefault","_ref8","Component","WebkitOverflowScrolling","userSelect","_Scrollbars","_Scrollbars2","el","_getComputedStyle","paddingTop","paddingBottom","paddingLeft","paddingRight","MsOverflowStyle","_domCss","maybe","space","letter","hasSpace","hasSeparator","separatorSplitter","unseparate","hasCamel","camelSplitter","previous","uppers","uncamelize","clean","_assertThisInitialized","_createForOfIteratorHelper","allowArrayLike","F","_e","normalCompletion","didErr","_e2","_createSuper","Derived","hasNativeReflectConstruct","Super","NewTarget","construct","_getPrototypeOf","_isNativeReflectConstruct","sham","Proxy","Boolean","excluded","sourceSymbolKeys","assertThisInitialized","_setPrototypeOf","_toConsumableArray","arrayLikeToArray","iter","unsupportedIterableToArray","_construct","Parent","Class","isNativeReflectConstruct","_wrapNativeSuper","_cache","has","Wrapper","noExtend","__swiper__","needsNavigation","navigation","nextEl","prevEl","needsPagination","pagination","needsScrollbar","scrollbar","uniqueClasses","classNames","classes","unique","paramsList","calcLoopedSlides","slides","swiperParams","slidesPerViewParams","slidesPerView","breakpoints","breakpoint","Swiper","breakpointOnlyParams","loopedSlides","loopAdditionalSlides","processChildren","React","displayName","slide","slots","slot","foundSlides","updateSwiper","needThumbsInit","needControllerInit","needPaginationInit","needScrollbarInit","needNavigationInit","swiper","passedParams","changedParams","scrollbarEl","paginationEl","updateParams","currentParams","virtual","thumbs","controller","control","lazy","updateSize","setTranslate","allowSlideNext","allowSlidePrev","changeDirection","useIsomorphicLayoutEffect","deps","useLayoutEffect","SwiperSlideContext","SwiperContext","forwardRef","_temp","externalElRef","tag","Tag","wrapperTag","WrapperTag","onSwiper","eventsAssigned","containerClasses","setContainerClasses","virtualData","setVirtualData","breakpointChanged","setBreakpointChanged","initializedRef","swiperElRef","swiperRef","oldPassedParamsRef","oldSlides","nextElRef","prevElRef","paginationElRef","scrollbarElRef","on","_emitClasses","allowedParams","search","getParams","restProps","onBeforeBreakpoint","_containerClasses","initSwiper","SwiperCore","loopCreate","loopDestroy","extendWith","renderExternal","renderExternalUpdate","originalParams","off","emitSlidesClasses","mountSwiper","oldParams","oldChildren","addKey","oldChildrenKeys","childrenKeys","newKeys","oldKeys","newKey","oldKey","getChangedParams","updateSlides","updateProgress","updateSlidesClasses","parallax","isHorizontal","rtlTranslate","renderVirtual","modifiedSlides","duplicateSlide","slideDuplicateClass","loopFillGroupWithBlank","blankSlidesNum","slidesPerGroup","blankSlide","slideClass","slideBlankClass","prependSlides","appendSlides","renderLoop","SwiperSlide","externalRef","virtualIndex","slideElRef","slideClasses","setSlideClasses","updateClasses","getSlideClasses","slideData","isActive","isDuplicate","isPrev","isNext","renderChildren","ssrDocument","activeElement","blur","nodeName","createEvent","initEvent","importNode","hash","host","hostname","protocol","getDocument","doc","ssrWindow","history","replaceState","pushState","go","back","CustomEvent","getPropertyValue","matchMedia","getWindow","win","Dom7","makeReactive","arrayFlat","arrayFilter","$","selector","html","toCreate","tempParent","qsa","nodeType","uniqueArray","arrayUnique","noTrigger","shortcut","Methods","addClass","classList","removeClass","hasClass","toggleClass","toggle","attrs","attrName","removeAttr","transitionDuration","eventType","targetSelector","capture","handleLiveEvent","eventData","dom7EventData","parents","handleEvent","dom7LiveListeners","proxyListener","dom7Listeners","handlers","dom7proxy","evt","detail","bubbles","cancelable","dataIndex","dispatchEvent","transitionEnd","dom","fireCallBack","outerWidth","includeMargins","outerHeight","clientTop","clientLeft","scrollY","scrollX","css","compareWith","webkitMatchesSelector","msMatchesSelector","previousSibling","eq","returnIndex","newChild","tempDiv","prepend","nextElementSibling","nextAll","nextEls","prev","previousElementSibling","prevAll","prevEls","closest","find","foundElements","methodName","support","deviceCached","nextTick","delay","getTranslate","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","MozTransform","OTransform","MsTransform","msTransform","m41","m42","isNode","HTMLElement","nextSource","keysArray","nextIndex","nextKey","desc","setCSSProperty","varName","varValue","setProperty","animateCSSModeScroll","targetPosition","side","startPosition","wrapperEl","scrollSnapType","cssModeFrameID","isOutOfBound","animate","progress","easeProgress","scrollTo","getSupport","smoothScroll","touch","DocumentTouch","passiveListener","supportsPassive","opts","gestures","calcSupport","getDevice","overrides","platform","ua","device","ios","android","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","calcDevice","getBrowser","isWebView","calcBrowser","eventsListeners","method","once","onceHandler","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","emit","_len2","_key2","eventsArray","$el","isVertical","getDirectionLabel","getDirectionPropertyValue","$wrapperEl","swiperSize","rtl","wrongRTL","isVirtual","previousSlidesLength","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginLeft","marginTop","centeredSlides","cssMode","slideSize","gridEnabled","grid","rows","initSlides","shouldResetSlideSize","updateSlide","slideStyles","currentWebKitTransform","roundLengths","boxSizing","swiperSlideSize","slidesPerGroupSkip","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","watchOverflow","watchSlidesProgress","updateSlidesOffset","backFaceHiddenClass","containerModifierClass","hasClassBackfaceClassAdded","maxBackfaceHiddenSlides","updateAutoHeight","activeSlides","newHeight","setTransition","getSlideByIndex","visibleSlides","activeIndex","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","originalProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","activeSlide","realIndex","slideActiveClass","slideNextClass","slidePrevClass","slideDuplicateActiveClass","slideDuplicateNextClass","slideDuplicatePrevClass","nextSlide","prevSlide","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","skip","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","virtualTranslate","currentTranslate","byController","previousTranslate","translateTo","runCallbacks","translateBounds","internal","animating","preventInteractionOnTransition","newTranslate","isH","onTranslateToWrapperTransitionEnd","transitionEmit","slideTo","initial","indexAsNumber","initialSlide","normalizedTranslate","normalizedGrid","normalizedGridNext","transitionStart","_immediateVirtual","_swiperImmediateVirtual","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","slideNext","perGroup","slidesPerGroupAuto","slidesPerViewDynamic","increment","loopPreventsSlide","loopFix","_clientLeft","rewind","slidePrev","prevSnapIndex","normalizedSnapGrid","prevSnap","prevIndex","slideReset","slideToClosest","currentSnap","slideToIndex","$selector","blankNode","cloneNode","onTouchStart","touchEventsData","touches","originalEvent","$targetEl","touchEventsTarget","isTouchEvent","which","button","isTouched","isMoved","noSwipingClass","shadowRoot","noSwipingSelector","isTargetShadow","noSwiping","__closestFrom","assignedSlot","getRootNode","closestElement","allowClick","swipeHandler","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","innerWidth","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","freeMode","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","touchAngle","touchMoveStopPropagation","nested","startTranslate","allowMomentumBounce","grabCursor","setGrabCursor","touchRatio","disableParentSwiper","resistanceRatio","resistance","followFinger","onTouchEnd","touchEndTime","timeDiff","pathTree","composedPath","lastClickTime","stopIndex","groupSize","rewindFirstIndex","rewindLastIndex","ratio","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","setBreakpoint","running","paused","preventClicks","preventClicksPropagation","dummyEventAttached","dummyEventListener","touchEvents","domMethod","swiperMethod","passiveListeners","passive","move","updateOnWindowResize","attachEvents","detachEvents","isGridEnabled","getBreakpoint","breakpointsBase","currentBreakpoint","breakpointParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","directionChanged","needsReLoop","isEnabled","disable","enable","containerEl","innerHeight","minRatio","addClasses","suffixes","entries","resultClasses","prepareClasses","removeClasses","resizeObserver","simulateTouch","uniqueNavElements","updateOnImagesReady","wrapperClass","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","eventsEmitter","moving","isLocked","unsetGrabCursor","wasLocked","lastSlideIndex","lastSlideRightEdge","loadImage","imageEl","srcset","sizes","checkForComplete","image","onReady","complete","onload","imagesToLoad","currentSrc","extendedDefaults","swipers","newParams","modules","__modules__","extendParams","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","cls","slideEl","updates","spv","breakLoop","translateValue","newDirection","needUpdate","currentDirection","mounted","getWrapperSelector","getWrapper","mount","deleteInstance","cleanStyles","deleteProps","newDefaults","installModule","prototypeGroup","protoMethod","use","observer","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","attach","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","Navigation","getEl","toggleEl","disabled","disabledClass","lockClass","$nextEl","$prevEl","onPrevClick","onNextClick","checkProps","createElementIfNotDefined","hideOnClick","hiddenClass","targetEl"],"sourceRoot":""}