{"version":3,"file":"js/529-1513f4f90ff8d395c44d.js","mappings":"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AU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,OAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SA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","sources":["webpack://ratsanet/./node_modules/lodash-es/_Symbol.js","webpack://ratsanet/./node_modules/sortablejs/modular/sortable.esm.js","webpack://ratsanet/./node_modules/dayjs/plugin/customParseFormat.js","webpack://ratsanet/./node_modules/lodash-es/_root.js","webpack://ratsanet/./node_modules/lodash-es/isArray.js","webpack://ratsanet/./node_modules/lodash-es/_freeGlobal.js","webpack://ratsanet/./node_modules/lodash-es/_getRawTag.js","webpack://ratsanet/./node_modules/lodash-es/_objectToString.js","webpack://ratsanet/./node_modules/lodash-es/_baseGetTag.js","webpack://ratsanet/./node_modules/@hotwired/stimulus/dist/stimulus.js","webpack://ratsanet/./node_modules/@hotwired/stimulus-webpack-helpers/dist/stimulus-webpack-helpers.js","webpack://ratsanet/./node_modules/lodash-es/isObjectLike.js","webpack://ratsanet/./node_modules/@rails/activestorage/app/assets/javascripts/activestorage.esm.js","webpack://ratsanet/./node_modules/bootstrap-datepicker/dist/locales/bootstrap-datepicker.et.min.js","webpack://ratsanet/./node_modules/lodash-es/_listCacheClear.js","webpack://ratsanet/./node_modules/lodash-es/eq.js","webpack://ratsanet/./node_modules/lodash-es/_assocIndexOf.js","webpack://ratsanet/./node_modules/lodash-es/_listCacheDelete.js","webpack://ratsanet/./node_modules/lodash-es/_listCacheGet.js","webpack://ratsanet/./node_modules/lodash-es/_listCacheHas.js","webpack://ratsanet/./node_modules/lodash-es/_listCacheSet.js","webpack://ratsanet/./node_modules/lodash-es/_ListCache.js","webpack://ratsanet/./node_modules/lodash-es/_stackClear.js","webpack://ratsanet/./node_modules/lodash-es/_stackDelete.js","webpack://ratsanet/./node_modules/lodash-es/_stackGet.js","webpack://ratsanet/./node_modules/lodash-es/_stackHas.js","webpack://ratsanet/./node_modules/lodash-es/isObject.js","webpack://ratsanet/./node_modules/lodash-es/isFunction.js","webpack://ratsanet/./node_modules/lodash-es/_isMasked.js","webpack://ratsanet/./node_modules/lodash-es/_coreJsData.js","webpack://ratsanet/./node_modules/lodash-es/_toSource.js","webpack://ratsanet/./node_modules/lodash-es/_baseIsNative.js","webpack://ratsanet/./node_modules/lodash-es/_getValue.js","webpack://ratsanet/./node_modules/lodash-es/_getNative.js","webpack://ratsanet/./node_modules/lodash-es/_Map.js","webpack://ratsanet/./node_modules/lodash-es/_nativeCreate.js","webpack://ratsanet/./node_modules/lodash-es/_hashClear.js","webpack://ratsanet/./node_modules/lodash-es/_hashDelete.js","webpack://ratsanet/./node_modules/lodash-es/_hashGet.js","webpack://ratsanet/./node_modules/lodash-es/_hashHas.js","webpack://ratsanet/./node_modules/lodash-es/_hashSet.js","webpack://ratsanet/./node_modules/lodash-es/_Hash.js","webpack://ratsanet/./node_modules/lodash-es/_mapCacheClear.js","webpack://ratsanet/./node_modules/lodash-es/_isKeyable.js","webpack://ratsanet/./node_modules/lodash-es/_getMapData.js","webpack://ratsanet/./node_modules/lodash-es/_mapCacheDelete.js","webpack://ratsanet/./node_modules/lodash-es/_mapCacheGet.js","webpack://ratsanet/./node_modules/lodash-es/_mapCacheHas.js","webpack://ratsanet/./node_modules/lodash-es/_mapCacheSet.js","webpack://ratsanet/./node_modules/lodash-es/_MapCache.js","webpack://ratsanet/./node_modules/lodash-es/_stackSet.js","webpack://ratsanet/./node_modules/lodash-es/_Stack.js","webpack://ratsanet/./node_modules/lodash-es/_defineProperty.js","webpack://ratsanet/./node_modules/lodash-es/_baseAssignValue.js","webpack://ratsanet/./node_modules/lodash-es/_assignMergeValue.js","webpack://ratsanet/./node_modules/lodash-es/_createBaseFor.js","webpack://ratsanet/./node_modules/lodash-es/_baseFor.js","webpack://ratsanet/./node_modules/lodash-es/_cloneBuffer.js","webpack://ratsanet/./node_modules/lodash-es/_Uint8Array.js","webpack://ratsanet/./node_modules/lodash-es/_cloneArrayBuffer.js","webpack://ratsanet/./node_modules/lodash-es/_cloneTypedArray.js","webpack://ratsanet/./node_modules/lodash-es/_copyArray.js","webpack://ratsanet/./node_modules/lodash-es/_baseCreate.js","webpack://ratsanet/./node_modules/lodash-es/_overArg.js","webpack://ratsanet/./node_modules/lodash-es/_getPrototype.js","webpack://ratsanet/./node_modules/lodash-es/_isPrototype.js","webpack://ratsanet/./node_modules/lodash-es/_initCloneObject.js","webpack://ratsanet/./node_modules/lodash-es/_baseIsArguments.js","webpack://ratsanet/./node_modules/lodash-es/isArguments.js","webpack://ratsanet/./node_modules/lodash-es/isLength.js","webpack://ratsanet/./node_modules/lodash-es/isArrayLike.js","webpack://ratsanet/./node_modules/lodash-es/isArrayLikeObject.js","webpack://ratsanet/./node_modules/lodash-es/stubFalse.js","webpack://ratsanet/./node_modules/lodash-es/isBuffer.js","webpack://ratsanet/./node_modules/lodash-es/isPlainObject.js","webpack://ratsanet/./node_modules/lodash-es/_baseIsTypedArray.js","webpack://ratsanet/./node_modules/lodash-es/_baseUnary.js","webpack://ratsanet/./node_modules/lodash-es/_nodeUtil.js","webpack://ratsanet/./node_modules/lodash-es/isTypedArray.js","webpack://ratsanet/./node_modules/lodash-es/_safeGet.js","webpack://ratsanet/./node_modules/lodash-es/_assignValue.js","webpack://ratsanet/./node_modules/lodash-es/_copyObject.js","webpack://ratsanet/./node_modules/lodash-es/_baseTimes.js","webpack://ratsanet/./node_modules/lodash-es/_isIndex.js","webpack://ratsanet/./node_modules/lodash-es/_arrayLikeKeys.js","webpack://ratsanet/./node_modules/lodash-es/_nativeKeysIn.js","webpack://ratsanet/./node_modules/lodash-es/_baseKeysIn.js","webpack://ratsanet/./node_modules/lodash-es/keysIn.js","webpack://ratsanet/./node_modules/lodash-es/toPlainObject.js","webpack://ratsanet/./node_modules/lodash-es/_baseMergeDeep.js","webpack://ratsanet/./node_modules/lodash-es/_baseMerge.js","webpack://ratsanet/./node_modules/lodash-es/identity.js","webpack://ratsanet/./node_modules/lodash-es/_apply.js","webpack://ratsanet/./node_modules/lodash-es/_overRest.js","webpack://ratsanet/./node_modules/lodash-es/constant.js","webpack://ratsanet/./node_modules/lodash-es/_baseSetToString.js","webpack://ratsanet/./node_modules/lodash-es/_shortOut.js","webpack://ratsanet/./node_modules/lodash-es/_setToString.js","webpack://ratsanet/./node_modules/lodash-es/_baseRest.js","webpack://ratsanet/./node_modules/lodash-es/_isIterateeCall.js","webpack://ratsanet/./node_modules/lodash-es/_createAssigner.js","webpack://ratsanet/./node_modules/lodash-es/merge.js","webpack://ratsanet/./node_modules/sortablejs/modular/sortable.core.esm.js","webpack://ratsanet/./node_modules/dayjs/locale/et.js","webpack://ratsanet/./node_modules/dayjs/dayjs.min.js","webpack://ratsanet/./node_modules/jquery/dist/jquery.js","webpack://ratsanet/./node_modules/select2/dist/js/select2.js","webpack://ratsanet/./node_modules/@rails/actioncable/app/assets/javascripts/actioncable.esm.js","webpack://ratsanet/./node_modules/lodash-es/_arrayMap.js","webpack://ratsanet/./node_modules/lodash-es/isSymbol.js","webpack://ratsanet/./node_modules/lodash-es/_baseToString.js","webpack://ratsanet/./node_modules/lodash-es/toString.js","webpack://ratsanet/./node_modules/lodash-es/_baseSlice.js","webpack://ratsanet/./node_modules/lodash-es/_castSlice.js","webpack://ratsanet/./node_modules/lodash-es/_hasUnicode.js","webpack://ratsanet/./node_modules/lodash-es/_asciiToArray.js","webpack://ratsanet/./node_modules/lodash-es/_unicodeToArray.js","webpack://ratsanet/./node_modules/lodash-es/_stringToArray.js","webpack://ratsanet/./node_modules/lodash-es/_createCaseFirst.js","webpack://ratsanet/./node_modules/lodash-es/upperFirst.js","webpack://ratsanet/./node_modules/lodash-es/capitalize.js","webpack://ratsanet/./node_modules/lodash-es/_arrayReduce.js","webpack://ratsanet/./node_modules/lodash-es/_basePropertyOf.js","webpack://ratsanet/./node_modules/lodash-es/_deburrLetter.js","webpack://ratsanet/./node_modules/lodash-es/deburr.js","webpack://ratsanet/./node_modules/lodash-es/_asciiWords.js","webpack://ratsanet/./node_modules/lodash-es/_hasUnicodeWord.js","webpack://ratsanet/./node_modules/lodash-es/_unicodeWords.js","webpack://ratsanet/./node_modules/lodash-es/words.js","webpack://ratsanet/./node_modules/lodash-es/_createCompounder.js","webpack://ratsanet/./node_modules/lodash-es/camelCase.js","webpack://ratsanet/./node_modules/events/events.js","webpack://ratsanet/./node_modules/chart.js/auto/auto.js","webpack://ratsanet/./node_modules/@kurkle/color/dist/color.esm.js","webpack://ratsanet/../../src/helpers/helpers.core.ts","webpack://ratsanet/../../src/helpers/helpers.math.ts","webpack://ratsanet/../../src/helpers/helpers.collection.ts","webpack://ratsanet/../../src/helpers/helpers.extras.ts","webpack://ratsanet/../../src/helpers/helpers.easing.ts","webpack://ratsanet/../../src/helpers/helpers.color.ts","webpack://ratsanet/../../src/core/core.animations.defaults.js","webpack://ratsanet/../../src/helpers/helpers.intl.ts","webpack://ratsanet/../../src/core/core.ticks.js","webpack://ratsanet/../../src/core/core.defaults.js","webpack://ratsanet/../../src/core/core.layouts.defaults.js","webpack://ratsanet/../../src/core/core.scale.defaults.js","webpack://ratsanet/../../src/helpers/helpers.canvas.ts","webpack://ratsanet/../../src/helpers/helpers.options.ts","webpack://ratsanet/../../src/helpers/helpers.config.ts","webpack://ratsanet/../../src/helpers/helpers.curve.ts","webpack://ratsanet/../../src/helpers/helpers.dom.ts","webpack://ratsanet/../../src/helpers/helpers.interpolation.ts","webpack://ratsanet/../../src/helpers/helpers.rtl.ts","webpack://ratsanet/../../src/helpers/helpers.segment.js","webpack://ratsanet/../src/core/core.animator.js","webpack://ratsanet/../src/core/core.animation.js","webpack://ratsanet/../src/core/core.animations.js","webpack://ratsanet/../src/core/core.datasetController.js","webpack://ratsanet/../src/controllers/controller.bar.js","webpack://ratsanet/../src/controllers/controller.bubble.js","webpack://ratsanet/../src/controllers/controller.doughnut.js","webpack://ratsanet/../src/controllers/controller.line.js","webpack://ratsanet/../src/controllers/controller.polarArea.js","webpack://ratsanet/../src/controllers/controller.pie.js","webpack://ratsanet/../src/controllers/controller.radar.js","webpack://ratsanet/../src/controllers/controller.scatter.js","webpack://ratsanet/../src/core/core.adapters.ts","webpack://ratsanet/../src/core/core.interaction.js","webpack://ratsanet/../src/core/core.layouts.js","webpack://ratsanet/../src/platform/platform.base.js","webpack://ratsanet/../src/platform/platform.basic.js","webpack://ratsanet/../src/platform/platform.dom.js","webpack://ratsanet/../src/core/core.element.ts","webpack://ratsanet/../src/core/core.scale.autoskip.js","webpack://ratsanet/../src/core/core.scale.js","webpack://ratsanet/../src/core/core.typedRegistry.js","webpack://ratsanet/../src/core/core.registry.js","webpack://ratsanet/../src/core/core.plugins.js","webpack://ratsanet/../src/core/core.config.js","webpack://ratsanet/../src/core/core.controller.js","webpack://ratsanet/../src/platform/index.js","webpack://ratsanet/../src/elements/element.arc.ts","webpack://ratsanet/../src/elements/element.line.js","webpack://ratsanet/../src/elements/element.point.ts","webpack://ratsanet/../src/elements/element.bar.js","webpack://ratsanet/../src/plugins/plugin.colors.ts","webpack://ratsanet/../src/plugins/plugin.decimation.js","webpack://ratsanet/../src/plugins/plugin.filler/filler.segment.js","webpack://ratsanet/../src/plugins/plugin.filler/filler.helper.js","webpack://ratsanet/../src/plugins/plugin.filler/filler.options.js","webpack://ratsanet/../src/plugins/plugin.filler/filler.target.stack.js","webpack://ratsanet/../src/plugins/plugin.filler/simpleArc.js","webpack://ratsanet/../src/plugins/plugin.filler/filler.target.js","webpack://ratsanet/../src/plugins/plugin.filler/filler.drawing.js","webpack://ratsanet/../src/plugins/plugin.filler/index.js","webpack://ratsanet/../src/plugins/plugin.legend.js","webpack://ratsanet/../src/plugins/plugin.title.js","webpack://ratsanet/../src/plugins/plugin.subtitle.js","webpack://ratsanet/../src/plugins/plugin.tooltip.js","webpack://ratsanet/../src/scales/scale.category.js","webpack://ratsanet/../src/scales/scale.linearbase.js","webpack://ratsanet/../src/scales/scale.linear.js","webpack://ratsanet/../src/scales/scale.logarithmic.js","webpack://ratsanet/../src/scales/scale.radialLinear.js","webpack://ratsanet/../src/scales/scale.time.js","webpack://ratsanet/../src/scales/scale.timeseries.js","webpack://ratsanet/../src/index.ts","webpack://ratsanet/./node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js","webpack://ratsanet/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js","webpack://ratsanet/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js","webpack://ratsanet/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js","webpack://ratsanet/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js","webpack://ratsanet/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js","webpack://ratsanet/./node_modules/select2/dist/js/i18n/et.js","webpack://ratsanet/./node_modules/@nathanvda/cocoon/cocoon.js","webpack://ratsanet/./node_modules/bootstrap-datepicker/dist/js/bootstrap-datepicker.js"],"sourcesContent":["import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","/**!\n * Sortable 1.15.6\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\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 return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _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}\n\nvar version = \"1.15.6\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n var rect = {};\n Array.from(container.children).forEach(function (child) {\n var _rect$left, _rect$top, _rect$right, _rect$bottom;\n if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n var childRect = getRect(child);\n rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n });\n rect.width = rect.right - rect.left;\n rect.height = rect.bottom - rect.top;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n // Disabled on Safari: #1571; Enabled on Safari IOS: #2244\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && (!Safari || IOS),\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n if (options.supportPointer) {\n on(ownerDocument, 'pointerup', _this._onDrop);\n // Native D&D triggers pointercancel\n !this.nativeDraggable && on(ownerDocument, 'pointercancel', _this._onDrop);\n } else {\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n }\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n if (options.supportPointer) {\n on(ownerDocument, 'pointerup', _this._disableDelayedDrag);\n on(ownerDocument, 'pointercancel', _this._disableDelayedDrag);\n } else {\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n }\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'pointerup', this._disableDelayedDrag);\n off(ownerDocument, 'pointercancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = getParentOrHost(parent));\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n window.getSelection().removeAllRanges();\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'pointercancel', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild,\n expando: expando\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n (function () {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n var filter = options.filter;\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n // Check if element is draggable\n if (!closest(children[i], options.draggable, parentEl, false)) continue;\n // Check if element is filtered\n var filtered = filter && (typeof filter === 'function' ? filter.call(sortable, evt, children[i], sortable) : filter.split(',').some(function (criteria) {\n return closest(children[i], criteria.trim(), parentEl, false);\n }));\n if (filtered) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n })();\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d/,r=/\\d\\d/,i=/\\d\\d?/,o=/\\d*[^-_:/,()\\s\\d]+/,s={},a=function(e){return(e=+e)+(e>68?1900:2e3)};var f=function(e){return function(t){this[e]=+t}},h=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],u=function(e){var t=s[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var n,r=s.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},c={A:[o,function(e){this.afternoon=d(e,!1)}],a:[o,function(e){this.afternoon=d(e,!0)}],Q:[n,function(e){this.month=3*(e-1)+1}],S:[n,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[i,f(\"seconds\")],ss:[i,f(\"seconds\")],m:[i,f(\"minutes\")],mm:[i,f(\"minutes\")],H:[i,f(\"hours\")],h:[i,f(\"hours\")],HH:[i,f(\"hours\")],hh:[i,f(\"hours\")],D:[i,f(\"day\")],DD:[r,f(\"day\")],Do:[o,function(e){var t=s.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],w:[i,f(\"week\")],ww:[r,f(\"week\")],M:[i,f(\"month\")],MM:[r,f(\"month\")],MMM:[o,function(e){var t=u(\"months\"),n=(u(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[o,function(e){var t=u(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,f(\"year\")],YY:[r,function(e){this.year=a(e)}],YYYY:[/\\d{4}/,f(\"year\")],Z:h,ZZ:h};function l(n){var r,i;r=n,i=s&&s.formats;for(var o=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=o.length,f=0;f<a;f+=1){var h=o[f],u=c[h],d=u&&u[0],l=u&&u[1];o[f]=l?{regex:d,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=o[n];if(\"string\"==typeof i)r+=i.length;else{var s=i.regex,f=i.parser,h=e.slice(r),u=s.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(a=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,o=e.args;this.$u=r;var a=o[1];if(\"string\"==typeof a){var f=!0===o[2],h=!0===o[3],u=f||h,d=o[2];h&&(d=o[2]),s=this.$locale(),!f&&d&&(s=n.Ls[d]),this.$d=function(e,t,n,r){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var i=l(t)(e),o=i.year,s=i.month,a=i.day,f=i.hours,h=i.minutes,u=i.seconds,d=i.milliseconds,c=i.zone,m=i.week,M=new Date,Y=a||(o||s?1:M.getDate()),p=o||M.getFullYear(),v=0;o&&!s||(v=s>0?s-1:M.getMonth());var D,w=f||0,g=h||0,y=u||0,L=d||0;return c?new Date(Date.UTC(p,v,Y,w,g,y,L+60*c.offset*1e3)):n?new Date(Date.UTC(p,v,Y,w,g,y,L)):(D=new Date(p,v,Y,w,g,y,L),m&&(D=r(D).week(m).toDate()),D)}catch(e){return new Date(\"\")}}(t,a,r,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),s={}}else if(a instanceof Array)for(var c=a.length,m=1;m<=c;m+=1){o[1]=a[m-1];var M=n.apply(this,o);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===c&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/*\nStimulus 3.2.1\nCopyright © 2023 Basecamp, LLC\n */\nclass EventListener {\n constructor(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n }\n else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n hasBindings() {\n return this.unorderedBindings.size > 0;\n }\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index, rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n}\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n }\n else {\n const { stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n },\n });\n }\n}\n\nclass Dispatcher {\n constructor(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach((eventListener) => eventListener.connect());\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n }\n }\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding, clearEventListeners = false) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n if (clearEventListeners)\n this.clearEventListenersForBinding(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n clearEventListenersForBinding(binding) {\n const eventListener = this.fetchEventListenerForBinding(binding);\n if (!eventListener.hasBindings()) {\n eventListener.disconnect();\n this.removeMappedEventListenerFor(binding);\n }\n }\n removeMappedEventListenerFor(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n eventListenerMap.delete(cacheKey);\n if (eventListenerMap.size == 0)\n this.eventListenerMaps.delete(eventTarget);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\n fetchEventListener(eventTarget, eventName, eventOptions) {\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n let eventListener = eventListenerMap.get(cacheKey);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n return eventListener;\n }\n createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n }\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n }\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions)\n .sort()\n .forEach((key) => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst defaultActionDescriptorFilters = {\n stop({ event, value }) {\n if (value)\n event.stopPropagation();\n return true;\n },\n prevent({ event, value }) {\n if (value)\n event.preventDefault();\n return true;\n },\n self({ event, value, element }) {\n if (value) {\n return element === event.target;\n }\n else {\n return true;\n }\n },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n let eventName = matches[2];\n let keyFilter = matches[3];\n if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n eventName += `.${keyFilter}`;\n keyFilter = \"\";\n }\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName,\n eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n identifier: matches[5],\n methodName: matches[6],\n keyFilter: matches[1] || keyFilter,\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n }\n else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions\n .split(\":\")\n .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n }\n else if (eventTarget == document) {\n return \"document\";\n }\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n constructor(element, index, descriptor, schema) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n this.keyFilter = descriptor.keyFilter || \"\";\n this.schema = schema;\n }\n static forToken(token, schema) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n }\n toString() {\n const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n }\n shouldIgnoreKeyboardEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = this.keyFilter.split(\"+\");\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n if (!standardFilter) {\n return false;\n }\n if (!hasProperty(this.keyMappings, standardFilter)) {\n error(`contains unknown key filter: ${this.keyFilter}`);\n }\n return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n }\n shouldIgnoreMouseEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = [this.keyFilter];\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n return false;\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n for (const { name, value } of Array.from(this.element.attributes)) {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n params[camelize(key)] = typecast(value);\n }\n }\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n get keyMappings() {\n return this.schema.keyMappings;\n }\n keyFilterDissatisfied(event, filters) {\n const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n }\n}\nconst defaultEventNames = {\n a: () => \"click\",\n button: () => \"click\",\n form: () => \"submit\",\n details: () => \"toggle\",\n input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n select: () => \"change\",\n textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}\nfunction typecast(value) {\n try {\n return JSON.parse(value);\n }\n catch (o_O) {\n return value;\n }\n}\n\nclass Binding {\n constructor(context, action) {\n this.context = context;\n this.action = action;\n }\n get index() {\n return this.action.index;\n }\n get eventTarget() {\n return this.action.eventTarget;\n }\n get eventOptions() {\n return this.action.eventOptions;\n }\n get identifier() {\n return this.context.identifier;\n }\n handleEvent(event) {\n const actionEvent = this.prepareActionEvent(event);\n if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n this.invokeWithEvent(actionEvent);\n }\n }\n get eventName() {\n return this.action.eventName;\n }\n get method() {\n const method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n }\n applyEventModifiers(event) {\n const { element } = this.action;\n const { actionDescriptorFilters } = this.context.application;\n const { controller } = this.context;\n let passes = true;\n for (const [name, value] of Object.entries(this.eventOptions)) {\n if (name in actionDescriptorFilters) {\n const filter = actionDescriptorFilters[name];\n passes = passes && filter({ name, value, event, element, controller });\n }\n else {\n continue;\n }\n }\n return passes;\n }\n prepareActionEvent(event) {\n return Object.assign(event, { params: this.action.params });\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n this.method.call(this.controller, event);\n this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n }\n catch (error) {\n const { identifier, controller, element, index } = this;\n const detail = { identifier, controller, element, index, event };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n return false;\n }\n if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n return false;\n }\n if (this.element === eventTarget) {\n return true;\n }\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n }\n else {\n return this.scope.containsElement(this.action.element);\n }\n }\n get controller() {\n return this.context.controller;\n }\n get methodName() {\n return this.action.methodName;\n }\n get element() {\n return this.scope.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n callback();\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n }\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(element, attributeName) {\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n }\n else {\n this.removeElement(element);\n }\n }\n else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n matchElementsInTree(tree = this.element) {\n return this.delegate.matchElementsInTree(tree);\n }\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n }\n else {\n return this.element.contains(element);\n }\n }\n addElement(element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n }\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n }\n}\n\nclass AttributeObserver {\n constructor(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n get element() {\n return this.elementObserver.element;\n }\n get selector() {\n return `[${this.attributeName}]`;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get started() {\n return this.elementObserver.started;\n }\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nfunction fetch(map, key) {\n let values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nfunction prune(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}\n\nclass Multimap {\n constructor() {\n this.valuesByKey = new Map();\n }\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\n get values() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n }\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some((set) => set.has(value));\n }\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n getKeysForValue(value) {\n return Array.from(this.valuesByKey)\n .filter(([_key, values]) => values.has(value))\n .map(([key, _values]) => key);\n }\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map();\n }\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\n}\n\nclass SelectorObserver {\n constructor(element, selector, delegate, details) {\n this._selector = selector;\n this.details = details;\n this.elementObserver = new ElementObserver(element, this);\n this.delegate = delegate;\n this.matchesByElement = new Multimap();\n }\n get started() {\n return this.elementObserver.started;\n }\n get selector() {\n return this._selector;\n }\n set selector(selector) {\n this._selector = selector;\n this.refresh();\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get element() {\n return this.elementObserver.element;\n }\n matchElement(element) {\n const { selector } = this;\n if (selector) {\n const matches = element.matches(selector);\n if (this.delegate.selectorMatchElement) {\n return matches && this.delegate.selectorMatchElement(element, this.details);\n }\n return matches;\n }\n else {\n return false;\n }\n }\n matchElementsInTree(tree) {\n const { selector } = this;\n if (selector) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n return match.concat(matches);\n }\n else {\n return [];\n }\n }\n elementMatched(element) {\n const { selector } = this;\n if (selector) {\n this.selectorMatched(element, selector);\n }\n }\n elementUnmatched(element) {\n const selectors = this.matchesByElement.getKeysForValue(element);\n for (const selector of selectors) {\n this.selectorUnmatched(element, selector);\n }\n }\n elementAttributeChanged(element, _attributeName) {\n const { selector } = this;\n if (selector) {\n const matches = this.matchElement(element);\n const matchedBefore = this.matchesByElement.has(selector, element);\n if (matches && !matchedBefore) {\n this.selectorMatched(element, selector);\n }\n else if (!matches && matchedBefore) {\n this.selectorUnmatched(element, selector);\n }\n }\n }\n selectorMatched(element, selector) {\n this.delegate.selectorMatched(element, selector, this.details);\n this.matchesByElement.add(selector, element);\n }\n selectorUnmatched(element, selector) {\n this.delegate.selectorUnmatched(element, selector, this.details);\n this.matchesByElement.delete(selector, element);\n }\n}\n\nclass StringMapObserver {\n constructor(element, delegate) {\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n this.refresh();\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue)\n this.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map((attribute) => attribute.name);\n }\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n}\n\nclass TokenListObserver {\n constructor(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n get started() {\n return this.attributeObserver.started;\n }\n start() {\n this.attributeObserver.start();\n }\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n stop() {\n this.attributeObserver.stop();\n }\n refresh() {\n this.attributeObserver.refresh();\n }\n get element() {\n return this.attributeObserver.element;\n }\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n elementAttributeValueChanged(element) {\n const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n tokensMatched(tokens) {\n tokens.forEach((token) => this.tokenMatched(token));\n }\n tokensUnmatched(tokens) {\n tokens.forEach((token) => this.tokenUnmatched(token));\n }\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) {\n return [[], []];\n }\n else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString\n .trim()\n .split(/\\s+/)\n .filter((content) => content.length)\n .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n constructor(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n get started() {\n return this.tokenListObserver.started;\n }\n start() {\n this.tokenListObserver.start();\n }\n stop() {\n this.tokenListObserver.stop();\n }\n refresh() {\n this.tokenListObserver.refresh();\n }\n get element() {\n return this.tokenListObserver.element;\n }\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n tokenMatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n tokenUnmatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n fetchParseResultForToken(token) {\n let parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n }\n fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n }\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return { value };\n }\n catch (error) {\n return { error };\n }\n }\n}\n\nclass BindingObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n get element() {\n return this.context.element;\n }\n get identifier() {\n return this.context.identifier;\n }\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n get schema() {\n return this.context.schema;\n }\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\n connectAction(action) {\n const binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n }\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n disconnectAllActions() {\n this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token, this.schema);\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\n\nclass ValueObserver {\n constructor(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n }\n start() {\n this.stringMapObserver.start();\n this.invokeChangedCallbacksForDefaultValues();\n }\n stop() {\n this.stringMapObserver.stop();\n }\n get element() {\n return this.context.element;\n }\n get controller() {\n return this.context.controller;\n }\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null)\n return;\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n }\n else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = `${name}Changed`;\n const changedMethod = this.receiver[changedMethodName];\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n try {\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n changedMethod.call(this.receiver, value, oldValue);\n }\n catch (error) {\n if (error instanceof TypeError) {\n error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n }\n throw error;\n }\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap } = this;\n return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n }\n get valueDescriptorNameMap() {\n const descriptors = {};\n Object.keys(this.valueDescriptorMap).forEach((key) => {\n const descriptor = this.valueDescriptorMap[key];\n descriptors[descriptor.name] = descriptor;\n });\n return descriptors;\n }\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = `has${capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap();\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n tokenMatched({ element, content: name }) {\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n tokenUnmatched({ element, content: name }) {\n this.disconnectTarget(element, name);\n }\n connectTarget(element, name) {\n var _a;\n if (!this.targetsByName.has(name, element)) {\n this.targetsByName.add(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n }\n }\n disconnectTarget(element, name) {\n var _a;\n if (this.targetsByName.has(name, element)) {\n this.targetsByName.delete(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys) {\n for (const element of this.targetsByName.getValuesForKey(name)) {\n this.disconnectTarget(element, name);\n }\n }\n }\n get attributeName() {\n return `data-${this.context.identifier}-target`;\n }\n get element() {\n return this.context.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce((values, constructor) => {\n getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n return values;\n }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor) => {\n pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n const ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n constructor(context, delegate) {\n this.started = false;\n this.context = context;\n this.delegate = delegate;\n this.outletsByName = new Multimap();\n this.outletElementsByName = new Multimap();\n this.selectorObserverMap = new Map();\n this.attributeObserverMap = new Map();\n }\n start() {\n if (!this.started) {\n this.outletDefinitions.forEach((outletName) => {\n this.setupSelectorObserverForOutlet(outletName);\n this.setupAttributeObserverForOutlet(outletName);\n });\n this.started = true;\n this.dependentContexts.forEach((context) => context.refresh());\n }\n }\n refresh() {\n this.selectorObserverMap.forEach((observer) => observer.refresh());\n this.attributeObserverMap.forEach((observer) => observer.refresh());\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.disconnectAllOutlets();\n this.stopSelectorObservers();\n this.stopAttributeObservers();\n }\n }\n stopSelectorObservers() {\n if (this.selectorObserverMap.size > 0) {\n this.selectorObserverMap.forEach((observer) => observer.stop());\n this.selectorObserverMap.clear();\n }\n }\n stopAttributeObservers() {\n if (this.attributeObserverMap.size > 0) {\n this.attributeObserverMap.forEach((observer) => observer.stop());\n this.attributeObserverMap.clear();\n }\n }\n selectorMatched(element, _selector, { outletName }) {\n const outlet = this.getOutlet(element, outletName);\n if (outlet) {\n this.connectOutlet(outlet, element, outletName);\n }\n }\n selectorUnmatched(element, _selector, { outletName }) {\n const outlet = this.getOutletFromMap(element, outletName);\n if (outlet) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n selectorMatchElement(element, { outletName }) {\n const selector = this.selector(outletName);\n const hasOutlet = this.hasOutlet(element, outletName);\n const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n if (selector) {\n return hasOutlet && hasOutletController && element.matches(selector);\n }\n else {\n return false;\n }\n }\n elementMatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementAttributeValueChanged(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementUnmatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n connectOutlet(outlet, element, outletName) {\n var _a;\n if (!this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.add(outletName, outlet);\n this.outletElementsByName.add(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n }\n }\n disconnectOutlet(outlet, element, outletName) {\n var _a;\n if (this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.delete(outletName, outlet);\n this.outletElementsByName.delete(outletName, element);\n (_a = this.selectorObserverMap\n .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n }\n }\n disconnectAllOutlets() {\n for (const outletName of this.outletElementsByName.keys) {\n for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n }\n }\n updateSelectorObserverForOutlet(outletName) {\n const observer = this.selectorObserverMap.get(outletName);\n if (observer) {\n observer.selector = this.selector(outletName);\n }\n }\n setupSelectorObserverForOutlet(outletName) {\n const selector = this.selector(outletName);\n const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n this.selectorObserverMap.set(outletName, selectorObserver);\n selectorObserver.start();\n }\n setupAttributeObserverForOutlet(outletName) {\n const attributeName = this.attributeNameForOutletName(outletName);\n const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n this.attributeObserverMap.set(outletName, attributeObserver);\n attributeObserver.start();\n }\n selector(outletName) {\n return this.scope.outlets.getSelectorForOutletName(outletName);\n }\n attributeNameForOutletName(outletName) {\n return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n }\n getOutletNameFromOutletAttributeName(attributeName) {\n return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n }\n get outletDependencies() {\n const dependencies = new Multimap();\n this.router.modules.forEach((module) => {\n const constructor = module.definition.controllerConstructor;\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n });\n return dependencies;\n }\n get outletDefinitions() {\n return this.outletDependencies.getKeysForValue(this.identifier);\n }\n get dependentControllerIdentifiers() {\n return this.outletDependencies.getValuesForKey(this.identifier);\n }\n get dependentContexts() {\n const identifiers = this.dependentControllerIdentifiers;\n return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n }\n hasOutlet(element, outletName) {\n return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n }\n getOutlet(element, outletName) {\n return this.application.getControllerForElementAndIdentifier(element, outletName);\n }\n getOutletFromMap(element, outletName) {\n return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n }\n get scope() {\n return this.context.scope;\n }\n get schema() {\n return this.context.schema;\n }\n get identifier() {\n return this.context.identifier;\n }\n get application() {\n return this.context.application;\n }\n get router() {\n return this.application.router;\n }\n}\n\nclass Context {\n constructor(module, scope) {\n this.logDebugActivity = (functionName, detail = {}) => {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.logDebugActivity(this.identifier, functionName, detail);\n };\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n this.targetObserver = new TargetObserver(this, this);\n this.outletObserver = new OutletObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n }\n catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n this.outletObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n refresh() {\n this.outletObserver.refresh();\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n }\n catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.outletObserver.stop();\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n get application() {\n return this.module.application;\n }\n get identifier() {\n return this.module.identifier;\n }\n get schema() {\n return this.application.schema;\n }\n get dispatcher() {\n return this.application.dispatcher;\n }\n get element() {\n return this.scope.element;\n }\n get parentElement() {\n return this.element.parentElement;\n }\n handleError(error, message, detail = {}) {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.handleError(error, `Error ${message}`, detail);\n }\n targetConnected(element, name) {\n this.invokeControllerMethod(`${name}TargetConnected`, element);\n }\n targetDisconnected(element, name) {\n this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n }\n outletConnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n }\n outletDisconnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\n }\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n const shadowConstructor = extend(constructor);\n const shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n for (const key in properties) {\n const descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n return blessedProperties;\n }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, { [key]: descriptor });\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n return descriptor;\n }\n}\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n }\n else {\n return Object.getOwnPropertyNames;\n }\n})();\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: { value: extended },\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function () {\n this.a.call(this);\n };\n const b = extendWithReflect(a);\n b.prototype.a = function () { };\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n }\n catch (error) {\n return (constructor) => class extended extends constructor {\n };\n }\n})();\n\nfunction blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor),\n };\n}\n\nclass Module {\n constructor(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n get identifier() {\n return this.definition.identifier;\n }\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n fetchContextForScope(scope) {\n let context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n }\n}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n get(name) {\n return this.getAll(name)[0];\n }\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n getDataKey(name) {\n return `${name}-class`;\n }\n get data() {\n return this.scope.data;\n }\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n }\n else {\n return false;\n }\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${dasherize(key)}`;\n }\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n warn(object, key, message) {\n let warnedKeys = this.warnedKeysByObject.get(object);\n if (!warnedKeys) {\n warnedKeys = new Set();\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(targetName) {\n return this.find(targetName) != null;\n }\n find(...targetNames) {\n return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n }\n findAll(...targetNames) {\n return targetNames.reduce((targets, targetName) => [\n ...targets,\n ...this.findAllTargets(targetName),\n ...this.findAllLegacyTargets(targetName),\n ], []);\n }\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n }\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = `${this.identifier}.${targetName}`;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier } = this;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n }\n return element;\n }\n get guide() {\n return this.scope.guide;\n }\n}\n\nclass OutletSet {\n constructor(scope, controllerElement) {\n this.scope = scope;\n this.controllerElement = controllerElement;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(outletName) {\n return this.find(outletName) != null;\n }\n find(...outletNames) {\n return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n }\n findAll(...outletNames) {\n return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n }\n getSelectorForOutletName(outletName) {\n const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n return this.controllerElement.getAttribute(attributeName);\n }\n findOutlet(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n if (selector)\n return this.findElement(selector, outletName);\n }\n findAllOutlets(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n return selector ? this.findAllElements(selector, outletName) : [];\n }\n findElement(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n }\n findAllElements(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName));\n }\n matchesElement(element, selector, outletName) {\n const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n }\n}\n\nclass Scope {\n constructor(schema, element, identifier, logger) {\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = (element) => {\n return element.closest(this.controllerSelector) === this.element;\n };\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n this.outlets = new OutletSet(this.documentScope, element);\n }\n findElement(selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...(this.element.matches(selector) ? [this.element] : []),\n ...this.queryElements(selector).filter(this.containsElement),\n ];\n }\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n get isDocumentScope() {\n return this.element === document.documentElement;\n }\n get documentScope() {\n return this.isDocumentScope\n ? this\n : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n }\n}\n\nclass ScopeObserver {\n constructor(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n start() {\n this.valueListObserver.start();\n }\n stop() {\n this.valueListObserver.stop();\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n parseValueForToken(token) {\n const { element, content: identifier } = token;\n return this.parseValueForElementAndIdentifier(element, identifier);\n }\n parseValueForElementAndIdentifier(element, identifier) {\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let scope = scopesByIdentifier.get(identifier);\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n }\n elementMatchedValue(element, value) {\n const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n }\n elementUnmatchedValue(element, value) {\n const referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n }\n fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n }\n}\n\nclass Router {\n constructor(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n get element() {\n return this.application.element;\n }\n get schema() {\n return this.application.schema;\n }\n get logger() {\n return this.application.logger;\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n start() {\n this.scopeObserver.start();\n }\n stop() {\n this.scopeObserver.stop();\n }\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n const afterLoad = definition.controllerConstructor.afterLoad;\n if (afterLoad) {\n afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n }\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find((context) => context.element == element);\n }\n }\n proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n if (scope) {\n this.scopeObserver.elementMatchedValue(scope.element, scope);\n }\n else {\n console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n }\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }\n connectModule(module) {\n this.modulesByIdentifier.set(module.identifier, module);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.connectContextForScope(scope));\n }\n disconnectModule(module) {\n this.modulesByIdentifier.delete(module.identifier);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.disconnectContextForScope(scope));\n }\n}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n constructor(element = document.documentElement, schema = defaultSchema) {\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {}) => {\n if (this.debug) {\n this.logFormattedMessage(identifier, functionName, detail);\n }\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n }\n static start(element, schema) {\n const application = new this(element, schema);\n application.start();\n return application;\n }\n async start() {\n await domReady();\n this.logDebugActivity(\"application\", \"starting\");\n this.dispatcher.start();\n this.router.start();\n this.logDebugActivity(\"application\", \"start\");\n }\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n register(identifier, controllerConstructor) {\n this.load({ identifier, controllerConstructor });\n }\n registerActionOption(name, filter) {\n this.actionDescriptorFilters[name] = filter;\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach((definition) => {\n if (definition.controllerConstructor.shouldLoad) {\n this.router.loadDefinition(definition);\n }\n });\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n }\n get controllers() {\n return this.router.contexts.map((context) => context.controller);\n }\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n handleError(error, message, detail) {\n var _a;\n this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({ application: this }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction domReady() {\n return new Promise((resolve) => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\n }\n else {\n resolve();\n }\n });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition) => {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get() {\n const { classes } = this;\n if (classes.has(key)) {\n return classes.get(key);\n }\n else {\n const attribute = classes.getAttributeName(key);\n throw new Error(`Missing attribute \"${attribute}\"`);\n }\n },\n },\n [`${key}Classes`]: {\n get() {\n return this.classes.getAll(key);\n },\n },\n [`has${capitalize(key)}Class`]: {\n get() {\n return this.classes.has(key);\n },\n },\n };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n return outlets.reduce((properties, outletDefinition) => {\n return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n let outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n const camelizedName = namespaceCamelize(name);\n return {\n [`${camelizedName}Outlet`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n }\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n },\n },\n [`${camelizedName}Outlets`]: {\n get() {\n const outlets = this.outlets.findAll(name);\n if (outlets.length > 0) {\n return outlets\n .map((outletElement) => {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n })\n .filter((controller) => controller);\n }\n return [];\n },\n },\n [`${camelizedName}OutletElement`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n return outletElement;\n }\n else {\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n }\n },\n },\n [`${camelizedName}OutletElements`]: {\n get() {\n return this.outlets.findAll(name);\n },\n },\n [`has${capitalize(camelizedName)}Outlet`]: {\n get() {\n return this.outlets.has(name);\n },\n },\n };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition) => {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get() {\n const target = this.targets.find(name);\n if (target) {\n return target;\n }\n else {\n throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n },\n [`${name}Targets`]: {\n get() {\n return this.targets.findAll(name);\n },\n },\n [`has${capitalize(name)}Target`]: {\n get() {\n return this.targets.has(name);\n },\n },\n };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get() {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, { [attributeName]: valueDescriptor });\n }, {});\n },\n },\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n const { key, name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n if (value !== null) {\n return read(value);\n }\n else {\n return definition.defaultValue;\n }\n },\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n }\n else {\n this.data.set(key, write(value));\n }\n },\n },\n [`has${capitalize(name)}`]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n },\n },\n };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n return valueDescriptorForTokenAndTypeDefinition({\n controller,\n token,\n typeDefinition,\n });\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array:\n return \"array\";\n case Boolean:\n return \"boolean\";\n case Number:\n return \"number\";\n case Object:\n return \"object\";\n case String:\n return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n return \"string\";\n }\n if (Array.isArray(defaultValue))\n return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n const { controller, token, typeObject } = payload;\n const hasType = isSomething(typeObject.type);\n const hasDefault = isSomething(typeObject.default);\n const fullObject = hasType && hasDefault;\n const onlyType = hasType && !hasDefault;\n const onlyDefault = !hasType && hasDefault;\n const typeFromObject = parseValueTypeConstant(typeObject.type);\n const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n if (onlyType)\n return typeFromObject;\n if (onlyDefault)\n return typeFromDefaultValue;\n if (typeFromObject !== typeFromDefaultValue) {\n const propertyPath = controller ? `${controller}.${token}` : token;\n throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n }\n if (fullObject)\n return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n const { controller, token, typeDefinition } = payload;\n const typeObject = { controller, token, typeObject: typeDefinition };\n const typeFromObject = parseValueTypeObject(typeObject);\n const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n const typeFromConstant = parseValueTypeConstant(typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const hasDefault = hasProperty(typeDefinition, \"default\");\n const hasType = hasProperty(typeDefinition, \"type\");\n const typeObject = typeDefinition;\n if (hasDefault)\n return typeObject.default;\n if (hasType) {\n const { type } = typeObject;\n const constantFromType = parseValueTypeConstant(type);\n if (constantFromType)\n return defaultValuesByType[constantFromType];\n }\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const { token, typeDefinition } = payload;\n const key = `${dasherize(token)}-value`;\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() {\n return defaultValueForDefinition(typeDefinition);\n },\n get hasCustomDefaultValue() {\n return parseValueTypeDefault(typeDefinition) !== undefined;\n },\n reader: readers[type],\n writer: writers[type] || writers.default,\n };\n}\nconst defaultValuesByType = {\n get array() {\n return [];\n },\n boolean: false,\n number: 0,\n get object() {\n return {};\n },\n string: \"\",\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n number(value) {\n return Number(value.replace(/_/g, \"\"));\n },\n object(value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n }\n return object;\n },\n string(value) {\n return value;\n },\n};\nconst writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON,\n};\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction writeString(value) {\n return `${value}`;\n}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n static afterLoad(_identifier, _application) {\n return;\n }\n get application() {\n return this.context.application;\n }\n get scope() {\n return this.context.scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get targets() {\n return this.scope.targets;\n }\n get outlets() {\n return this.scope.outlets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {\n }\n connect() {\n }\n disconnect() {\n }\n dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, { detail, bubbles, cancelable });\n target.dispatchEvent(event);\n return event;\n }\n}\nController.blessings = [\n ClassPropertiesBlessing,\n TargetPropertiesBlessing,\n ValuePropertiesBlessing,\n OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n","/*\nStimulus Webpack Helpers 1.0.0\nCopyright © 2021 Basecamp, LLC\n */\nfunction definitionsFromContext(context) {\n return context.keys()\n .map((key) => definitionForModuleWithContextAndKey(context, key))\n .filter((value) => value);\n}\nfunction definitionForModuleWithContextAndKey(context, key) {\n const identifier = identifierForContextKey(key);\n if (identifier) {\n return definitionForModuleAndIdentifier(context(key), identifier);\n }\n}\nfunction definitionForModuleAndIdentifier(module, identifier) {\n const controllerConstructor = module.default;\n if (typeof controllerConstructor == \"function\") {\n return { identifier, controllerConstructor };\n }\n}\nfunction identifierForContextKey(key) {\n const logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n if (logicalName) {\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n }\n}\n\nexport { definitionForModuleAndIdentifier, definitionForModuleWithContextAndKey, definitionsFromContext, identifierForContextKey };\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","var sparkMd5 = {\n exports: {}\n};\n\n(function(module, exports) {\n (function(factory) {\n {\n module.exports = factory();\n }\n })((function(undefined$1) {\n var hex_chr = [ \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\" ];\n function md5cycle(x, k) {\n var a = x[0], b = x[1], c = x[2], d = x[3];\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n function md5blk(s) {\n var md5blks = [], i;\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n }\n function md5blk_array(a) {\n var md5blks = [], i;\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n return md5blks;\n }\n function md51(s) {\n var n = s.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n length = s.length;\n tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n }\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function md51_array(a) {\n var n = a.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n length = a.length;\n tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << (i % 4 << 3);\n }\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function rhex(n) {\n var s = \"\", j;\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n }\n return s;\n }\n function hex(x) {\n var i;\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n return x.join(\"\");\n }\n if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n (function() {\n function clamp(val, length) {\n val = val | 0 || 0;\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n return Math.min(val, length);\n }\n ArrayBuffer.prototype.slice = function(from, to) {\n var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n if (to !== undefined$1) {\n end = clamp(to, length);\n }\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n return target;\n };\n })();\n }\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n return str;\n }\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n return returnUInt8Array ? arr : buff;\n }\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n return returnUInt8Array ? result : result.buffer;\n }\n function hexToBinaryString(hex) {\n var bytes = [], length = hex.length, x;\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n return String.fromCharCode.apply(String, bytes);\n }\n function SparkMD5() {\n this.reset();\n }\n SparkMD5.prototype.append = function(str) {\n this.appendBinary(toUtf8(str));\n return this;\n };\n SparkMD5.prototype.appendBinary = function(contents) {\n this._buff += contents;\n this._length += contents.length;\n var length = this._buff.length, i;\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n this._buff = this._buff.substring(i - 64);\n return this;\n };\n SparkMD5.prototype.end = function(raw) {\n var buff = this._buff, length = buff.length, i, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], ret;\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n SparkMD5.prototype.reset = function() {\n this._buff = \"\";\n this._length = 0;\n this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n return this;\n };\n SparkMD5.prototype.getState = function() {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash.slice()\n };\n };\n SparkMD5.prototype.setState = function(state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n return this;\n };\n SparkMD5.prototype.destroy = function() {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n SparkMD5.prototype._finish = function(tail, length) {\n var i = length, tmp, lo, hi;\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(this._hash, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n SparkMD5.hash = function(str, raw) {\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n SparkMD5.hashBinary = function(content, raw) {\n var hash = md51(content), ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n SparkMD5.ArrayBuffer = function() {\n this.reset();\n };\n SparkMD5.ArrayBuffer.prototype.append = function(arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n this._length += arr.byteLength;\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n return this;\n };\n SparkMD5.ArrayBuffer.prototype.end = function(raw) {\n var buff = this._buff, length = buff.length, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i, ret;\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n SparkMD5.ArrayBuffer.prototype.reset = function() {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n return this;\n };\n SparkMD5.ArrayBuffer.prototype.getState = function() {\n var state = SparkMD5.prototype.getState.call(this);\n state.buff = arrayBuffer2Utf8Str(state.buff);\n return state;\n };\n SparkMD5.ArrayBuffer.prototype.setState = function(state) {\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n return SparkMD5.prototype.setState.call(this, state);\n };\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n SparkMD5.ArrayBuffer.hash = function(arr, raw) {\n var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n return SparkMD5;\n }));\n})(sparkMd5);\n\nvar SparkMD5 = sparkMd5.exports;\n\nconst fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n\nclass FileChecksum {\n static create(file, callback) {\n const instance = new FileChecksum(file);\n instance.create(callback);\n }\n constructor(file) {\n this.file = file;\n this.chunkSize = 2097152;\n this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n this.chunkIndex = 0;\n }\n create(callback) {\n this.callback = callback;\n this.md5Buffer = new SparkMD5.ArrayBuffer;\n this.fileReader = new FileReader;\n this.fileReader.addEventListener(\"load\", (event => this.fileReaderDidLoad(event)));\n this.fileReader.addEventListener(\"error\", (event => this.fileReaderDidError(event)));\n this.readNextChunk();\n }\n fileReaderDidLoad(event) {\n this.md5Buffer.append(event.target.result);\n if (!this.readNextChunk()) {\n const binaryDigest = this.md5Buffer.end(true);\n const base64digest = btoa(binaryDigest);\n this.callback(null, base64digest);\n }\n }\n fileReaderDidError(event) {\n this.callback(`Error reading ${this.file.name}`);\n }\n readNextChunk() {\n if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n const start = this.chunkIndex * this.chunkSize;\n const end = Math.min(start + this.chunkSize, this.file.size);\n const bytes = fileSlice.call(this.file, start, end);\n this.fileReader.readAsArrayBuffer(bytes);\n this.chunkIndex++;\n return true;\n } else {\n return false;\n }\n }\n}\n\nfunction getMetaValue(name) {\n const element = findElement(document.head, `meta[name=\"${name}\"]`);\n if (element) {\n return element.getAttribute(\"content\");\n }\n}\n\nfunction findElements(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n const elements = root.querySelectorAll(selector);\n return toArray(elements);\n}\n\nfunction findElement(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n return root.querySelector(selector);\n}\n\nfunction dispatchEvent(element, type, eventInit = {}) {\n const {disabled: disabled} = element;\n const {bubbles: bubbles, cancelable: cancelable, detail: detail} = eventInit;\n const event = document.createEvent(\"Event\");\n event.initEvent(type, bubbles || true, cancelable || true);\n event.detail = detail || {};\n try {\n element.disabled = false;\n element.dispatchEvent(event);\n } finally {\n element.disabled = disabled;\n }\n return event;\n}\n\nfunction toArray(value) {\n if (Array.isArray(value)) {\n return value;\n } else if (Array.from) {\n return Array.from(value);\n } else {\n return [].slice.call(value);\n }\n}\n\nclass BlobRecord {\n constructor(file, checksum, url, customHeaders = {}) {\n this.file = file;\n this.attributes = {\n filename: file.name,\n content_type: file.type || \"application/octet-stream\",\n byte_size: file.size,\n checksum: checksum\n };\n this.xhr = new XMLHttpRequest;\n this.xhr.open(\"POST\", url, true);\n this.xhr.responseType = \"json\";\n this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n Object.keys(customHeaders).forEach((headerKey => {\n this.xhr.setRequestHeader(headerKey, customHeaders[headerKey]);\n }));\n const csrfToken = getMetaValue(\"csrf-token\");\n if (csrfToken != undefined) {\n this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n }\n this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n }\n get status() {\n return this.xhr.status;\n }\n get response() {\n const {responseType: responseType, response: response} = this.xhr;\n if (responseType == \"json\") {\n return response;\n } else {\n return JSON.parse(response);\n }\n }\n create(callback) {\n this.callback = callback;\n this.xhr.send(JSON.stringify({\n blob: this.attributes\n }));\n }\n requestDidLoad(event) {\n if (this.status >= 200 && this.status < 300) {\n const {response: response} = this;\n const {direct_upload: direct_upload} = response;\n delete response.direct_upload;\n this.attributes = response;\n this.directUploadData = direct_upload;\n this.callback(null, this.toJSON());\n } else {\n this.requestDidError(event);\n }\n }\n requestDidError(event) {\n this.callback(`Error creating Blob for \"${this.file.name}\". Status: ${this.status}`);\n }\n toJSON() {\n const result = {};\n for (const key in this.attributes) {\n result[key] = this.attributes[key];\n }\n return result;\n }\n}\n\nclass BlobUpload {\n constructor(blob) {\n this.blob = blob;\n this.file = blob.file;\n const {url: url, headers: headers} = blob.directUploadData;\n this.xhr = new XMLHttpRequest;\n this.xhr.open(\"PUT\", url, true);\n this.xhr.responseType = \"text\";\n for (const key in headers) {\n this.xhr.setRequestHeader(key, headers[key]);\n }\n this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n }\n create(callback) {\n this.callback = callback;\n this.xhr.send(this.file.slice());\n }\n requestDidLoad(event) {\n const {status: status, response: response} = this.xhr;\n if (status >= 200 && status < 300) {\n this.callback(null, response);\n } else {\n this.requestDidError(event);\n }\n }\n requestDidError(event) {\n this.callback(`Error storing \"${this.file.name}\". Status: ${this.xhr.status}`);\n }\n}\n\nlet id = 0;\n\nclass DirectUpload {\n constructor(file, url, delegate, customHeaders = {}) {\n this.id = ++id;\n this.file = file;\n this.url = url;\n this.delegate = delegate;\n this.customHeaders = customHeaders;\n }\n create(callback) {\n FileChecksum.create(this.file, ((error, checksum) => {\n if (error) {\n callback(error);\n return;\n }\n const blob = new BlobRecord(this.file, checksum, this.url, this.customHeaders);\n notify(this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n blob.create((error => {\n if (error) {\n callback(error);\n } else {\n const upload = new BlobUpload(blob);\n notify(this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n upload.create((error => {\n if (error) {\n callback(error);\n } else {\n callback(null, blob.toJSON());\n }\n }));\n }\n }));\n }));\n }\n}\n\nfunction notify(object, methodName, ...messages) {\n if (object && typeof object[methodName] == \"function\") {\n return object[methodName](...messages);\n }\n}\n\nclass DirectUploadController {\n constructor(input, file) {\n this.input = input;\n this.file = file;\n this.directUpload = new DirectUpload(this.file, this.url, this);\n this.dispatch(\"initialize\");\n }\n start(callback) {\n const hiddenInput = document.createElement(\"input\");\n hiddenInput.type = \"hidden\";\n hiddenInput.name = this.input.name;\n this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n this.dispatch(\"start\");\n this.directUpload.create(((error, attributes) => {\n if (error) {\n hiddenInput.parentNode.removeChild(hiddenInput);\n this.dispatchError(error);\n } else {\n hiddenInput.value = attributes.signed_id;\n }\n this.dispatch(\"end\");\n callback(error);\n }));\n }\n uploadRequestDidProgress(event) {\n const progress = event.loaded / event.total * 100;\n if (progress) {\n this.dispatch(\"progress\", {\n progress: progress\n });\n }\n }\n get url() {\n return this.input.getAttribute(\"data-direct-upload-url\");\n }\n dispatch(name, detail = {}) {\n detail.file = this.file;\n detail.id = this.directUpload.id;\n return dispatchEvent(this.input, `direct-upload:${name}`, {\n detail: detail\n });\n }\n dispatchError(error) {\n const event = this.dispatch(\"error\", {\n error: error\n });\n if (!event.defaultPrevented) {\n alert(error);\n }\n }\n directUploadWillCreateBlobWithXHR(xhr) {\n this.dispatch(\"before-blob-request\", {\n xhr: xhr\n });\n }\n directUploadWillStoreFileWithXHR(xhr) {\n this.dispatch(\"before-storage-request\", {\n xhr: xhr\n });\n xhr.upload.addEventListener(\"progress\", (event => this.uploadRequestDidProgress(event)));\n }\n}\n\nconst inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n\nclass DirectUploadsController {\n constructor(form) {\n this.form = form;\n this.inputs = findElements(form, inputSelector).filter((input => input.files.length));\n }\n start(callback) {\n const controllers = this.createDirectUploadControllers();\n const startNextController = () => {\n const controller = controllers.shift();\n if (controller) {\n controller.start((error => {\n if (error) {\n callback(error);\n this.dispatch(\"end\");\n } else {\n startNextController();\n }\n }));\n } else {\n callback();\n this.dispatch(\"end\");\n }\n };\n this.dispatch(\"start\");\n startNextController();\n }\n createDirectUploadControllers() {\n const controllers = [];\n this.inputs.forEach((input => {\n toArray(input.files).forEach((file => {\n const controller = new DirectUploadController(input, file);\n controllers.push(controller);\n }));\n }));\n return controllers;\n }\n dispatch(name, detail = {}) {\n return dispatchEvent(this.form, `direct-uploads:${name}`, {\n detail: detail\n });\n }\n}\n\nconst processingAttribute = \"data-direct-uploads-processing\";\n\nconst submitButtonsByForm = new WeakMap;\n\nlet started = false;\n\nfunction start() {\n if (!started) {\n started = true;\n document.addEventListener(\"click\", didClick, true);\n document.addEventListener(\"submit\", didSubmitForm, true);\n document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n }\n}\n\nfunction didClick(event) {\n const button = event.target.closest(\"button, input\");\n if (button && button.type === \"submit\" && button.form) {\n submitButtonsByForm.set(button.form, button);\n }\n}\n\nfunction didSubmitForm(event) {\n handleFormSubmissionEvent(event);\n}\n\nfunction didSubmitRemoteElement(event) {\n if (event.target.tagName == \"FORM\") {\n handleFormSubmissionEvent(event);\n }\n}\n\nfunction handleFormSubmissionEvent(event) {\n const form = event.target;\n if (form.hasAttribute(processingAttribute)) {\n event.preventDefault();\n return;\n }\n const controller = new DirectUploadsController(form);\n const {inputs: inputs} = controller;\n if (inputs.length) {\n event.preventDefault();\n form.setAttribute(processingAttribute, \"\");\n inputs.forEach(disable);\n controller.start((error => {\n form.removeAttribute(processingAttribute);\n if (error) {\n inputs.forEach(enable);\n } else {\n submitForm(form);\n }\n }));\n }\n}\n\nfunction submitForm(form) {\n let button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n if (button) {\n const {disabled: disabled} = button;\n button.disabled = false;\n button.focus();\n button.click();\n button.disabled = disabled;\n } else {\n button = document.createElement(\"input\");\n button.type = \"submit\";\n button.style.display = \"none\";\n form.appendChild(button);\n button.click();\n form.removeChild(button);\n }\n submitButtonsByForm.delete(form);\n}\n\nfunction disable(input) {\n input.disabled = true;\n}\n\nfunction enable(input) {\n input.disabled = false;\n}\n\nfunction autostart() {\n if (window.ActiveStorage) {\n start();\n }\n}\n\nsetTimeout(autostart, 1);\n\nexport { DirectUpload, DirectUploadController, DirectUploadsController, dispatchEvent, start };\n","!function(a){a.fn.datepicker.dates.et={days:[\"Pühapäev\",\"Esmaspäev\",\"Teisipäev\",\"Kolmapäev\",\"Neljapäev\",\"Reede\",\"Laupäev\"],daysShort:[\"Pühap\",\"Esmasp\",\"Teisip\",\"Kolmap\",\"Neljap\",\"Reede\",\"Laup\"],daysMin:[\"P\",\"E\",\"T\",\"K\",\"N\",\"R\",\"L\"],months:[\"Jaanuar\",\"Veebruar\",\"Märts\",\"Aprill\",\"Mai\",\"Juuni\",\"Juuli\",\"August\",\"September\",\"Oktoober\",\"November\",\"Detsember\"],monthsShort:[\"Jaan\",\"Veebr\",\"Märts\",\"Apr\",\"Mai\",\"Juuni\",\"Juuli\",\"Aug\",\"Sept\",\"Okt\",\"Nov\",\"Dets\"],today:\"Täna\",clear:\"Tühjenda\",weekStart:1,format:\"dd.mm.yyyy\"}}(jQuery);","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignMergeValue;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nexport default copyArray;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nexport default safeGet;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nexport default baseMerge;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nexport default createAssigner;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","/**!\n * Sortable 1.15.6\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\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 return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _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}\n\nvar version = \"1.15.6\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n var rect = {};\n Array.from(container.children).forEach(function (child) {\n var _rect$left, _rect$top, _rect$right, _rect$bottom;\n if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n var childRect = getRect(child);\n rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n });\n rect.width = rect.right - rect.left;\n rect.height = rect.bottom - rect.top;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n // Disabled on Safari: #1571; Enabled on Safari IOS: #2244\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && (!Safari || IOS),\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n if (options.supportPointer) {\n on(ownerDocument, 'pointerup', _this._onDrop);\n // Native D&D triggers pointercancel\n !this.nativeDraggable && on(ownerDocument, 'pointercancel', _this._onDrop);\n } else {\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n }\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n if (options.supportPointer) {\n on(ownerDocument, 'pointerup', _this._disableDelayedDrag);\n on(ownerDocument, 'pointercancel', _this._disableDelayedDrag);\n } else {\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n }\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'pointerup', this._disableDelayedDrag);\n off(ownerDocument, 'pointercancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = getParentOrHost(parent));\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n window.getSelection().removeAllRanges();\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'pointercancel', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild,\n expando: expando\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\nvar OnSpill = [Remove, Revert];\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n (function () {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n var filter = options.filter;\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n // Check if element is draggable\n if (!closest(children[i], options.draggable, parentEl, false)) continue;\n // Check if element is filtered\n var filtered = filter && (typeof filter === 'function' ? filter.call(sortable, evt, children[i], sortable) : filter.split(',').some(function (criteria) {\n return closest(children[i], criteria.trim(), parentEl, false);\n }));\n if (filtered) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n })();\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nexport default Sortable;\nexport { AutoScrollPlugin as AutoScroll, MultiDragPlugin as MultiDrag, OnSpill, Sortable, SwapPlugin as Swap };\n","!function(e,a){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=a(require(\"dayjs\")):\"function\"==typeof define&&define.amd?define([\"dayjs\"],a):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_locale_et=a(e.dayjs)}(this,(function(e){\"use strict\";function a(e){return e&&\"object\"==typeof e&&\"default\"in e?e:{default:e}}var t=a(e);function u(e,a,t,u){var s={s:[\"mõne sekundi\",\"mõni sekund\",\"paar sekundit\"],m:[\"ühe minuti\",\"üks minut\"],mm:[\"%d minuti\",\"%d minutit\"],h:[\"ühe tunni\",\"tund aega\",\"üks tund\"],hh:[\"%d tunni\",\"%d tundi\"],d:[\"ühe päeva\",\"üks päev\"],M:[\"kuu aja\",\"kuu aega\",\"üks kuu\"],MM:[\"%d kuu\",\"%d kuud\"],y:[\"ühe aasta\",\"aasta\",\"üks aasta\"],yy:[\"%d aasta\",\"%d aastat\"]};return a?(s[t][2]?s[t][2]:s[t][1]).replace(\"%d\",e):(u?s[t][0]:s[t][1]).replace(\"%d\",e)}var s={name:\"et\",weekdays:\"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev\".split(\"_\"),weekdaysShort:\"P_E_T_K_N_R_L\".split(\"_\"),weekdaysMin:\"P_E_T_K_N_R_L\".split(\"_\"),months:\"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember\".split(\"_\"),monthsShort:\"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets\".split(\"_\"),ordinal:function(e){return e+\".\"},weekStart:1,relativeTime:{future:\"%s pärast\",past:\"%s tagasi\",s:u,m:u,mm:u,h:u,hh:u,d:u,dd:\"%d päeva\",M:u,MM:u,y:u,yy:u},formats:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"}};return t.default.locale(s,null,!0),s}));","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","/*!\n * jQuery JavaScript Library v3.7.1\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-08-28T13:37Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar version = \"3.7.1\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar pop = arr.pop;\n\n\nvar sort = arr.sort;\n\n\nvar splice = arr.splice;\n\n\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n\n\n\n// Note: an element does not contain itself\njQuery.contains = function( a, b ) {\n\tvar bup = b && b.parentNode;\n\n\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE doesn't have `contains` on SVG.\n\t\ta.contains ?\n\t\t\ta.contains( bup ) :\n\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t) );\n};\n\n\n\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\n\n\n\nvar preferredDoc = document,\n\tpushNative = push;\n\n( function() {\n\nvar i,\n\tExpr,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\tpush = pushNative,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\tmatches,\n\n\t// Instance-specific data\n\texpando = jQuery.expando,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\twhitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\t\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\tATTR: new RegExp( \"^\" + attributes ),\n\t\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\t\tCHILD: new RegExp(\n\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\tbool: new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE/Edge.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android <=4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = {\n\t\tapply: function( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t},\n\t\tcall: function( target ) {\n\t\t\tpushNative.apply( target, slice.call( arguments, 1 ) );\n\t\t}\n\t};\n}\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tfind.contains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: iOS 7 only, IE 9 - 11+\n\t// Older browsers didn't support unprefixed `matches`.\n\tmatches = documentElement.matches ||\n\t\tdocumentElement.webkitMatchesSelector ||\n\t\tdocumentElement.msMatchesSelector;\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors\n\t// (see trac-13936).\n\t// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,\n\t// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.\n\tif ( documentElement.msMatchesSelector &&\n\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tpreferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n\n\t// Support: IE <10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocumentElement.appendChild( el ).id = jQuery.expando;\n\t\treturn !document.getElementsByName ||\n\t\t\t!document.getElementsByName( jQuery.expando ).length;\n\t} );\n\n\t// Support: IE 9 only\n\t// Check to see if it's possible to do matchesSelector\n\t// on a disconnected node.\n\tsupport.disconnectedMatch = assert( function( el ) {\n\t\treturn matches.call( el, \"*\" );\n\t} );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// IE/Edge don't support the :scope pseudo-class.\n\tsupport.scope = assert( function() {\n\t\treturn document.querySelectorAll( \":scope\" );\n\t} );\n\n\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t// We include `*` in the test to detect buggy implementations that are\n\t// _selectively_ forgiving (specifically when the list includes at least\n\t// one valid selector).\n\t// Note that we treat complete lack of support for `:has()` as if it were\n\t// spec-compliant support, which is fine because use of `:has()` in such\n\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t// anyway.\n\tsupport.cssHas = assert( function() {\n\t\ttry {\n\t\t\tdocument.querySelector( \":has(*,:jqfake)\" );\n\t\t\treturn false;\n\t\t} catch ( e ) {\n\t\t\treturn true;\n\t\t}\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find.TAG = function( tag, context ) {\n\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t// DocumentFragment nodes don't have gEBTN\n\t\t} else {\n\t\t\treturn context.querySelectorAll( tag );\n\t\t}\n\t};\n\n\t// Class\n\tExpr.find.CLASS = function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\trbuggyQSA = [];\n\n\t// Build QSA regex\n\t// Regex strategy adopted from Diego Perini\n\tassert( function( el ) {\n\n\t\tvar input;\n\n\t\tdocumentElement.appendChild( el ).innerHTML =\n\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\"<option selected=''></option></select>\";\n\n\t\t// Support: iOS <=7 - 8 only\n\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t}\n\n\t\t// Support: iOS <=7 - 8 only\n\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\trbuggyQSA.push( \"~=\" );\n\t\t}\n\n\t\t// Support: iOS 8 only\n\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t}\n\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\trbuggyQSA.push( \":checked\" );\n\t\t}\n\n\t\t// Support: Windows 8 Native Apps\n\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tdocumentElement.appendChild( el ).disabled = true;\n\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t}\n\n\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t// Adding a temporary attribute to the document before the selection works\n\t\t// around the issue.\n\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"name\", \"\" );\n\t\tel.appendChild( input );\n\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t}\n\t} );\n\n\tif ( !support.cssHas ) {\n\n\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\trbuggyQSA.push( \":has\" );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = function( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t};\n\n\treturn document;\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\nfind.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn jQuery.contains( context, elem );\n};\n\n\nfind.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\tif ( val !== undefined ) {\n\t\treturn val;\n\t}\n\n\treturn elem.getAttribute( name );\n};\n\nfind.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\t//\n\t// Support: Android <=4.0+\n\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t// depend on duplicate detection in all browsers without a stable sort.\n\thasDuplicate = !support.sortStable;\n\tsortInput = !support.sortStable && slice.call( results, 0 );\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nExpr = jQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\tATTR: function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" )\n\t\t\t\t.replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\tCHILD: function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t\t);\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPSEUDO: function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = find.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || ( parent[ expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tfind.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tfind.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !Expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\" &&\n\n\t\t\t\t// Support: IE <10 only\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos.nth = Expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tfind.error( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t// elements by id. (see trac-14142)\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find.ID(\n\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Support: Android <=4.0 - 4.1+\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Android <=4.0 - 4.1+\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\njQuery.find = find;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.unique = jQuery.uniqueSort;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfind.escape = jQuery.escapeSelector;\nfind.getText = jQuery.text;\nfind.isXML = jQuery.isXMLDoc;\nfind.selectors = jQuery.expr;\nfind.support = jQuery.support;\nfind.uniqueSort = jQuery.uniqueSort;\n\n\t/* eslint-enable */\n\n} )();\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t} else if ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message,\n\t\t\terror.stack, asyncError );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (trac-13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, jQuery.event.trigger(\n\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\tthis\n\t\t\t\t) );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\tfunction focusMappedHandler( nativeEvent ) {\n\t\tif ( document.documentMode ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t// to change the `type` here.\n\t\t\tvar handle = dataPriv.get( this, \"handle\" ),\n\t\t\t\tevent = jQuery.event.fix( nativeEvent );\n\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\tevent.isSimulated = true;\n\n\t\t\t// First, handle focusin/focusout\n\t\t\thandle( nativeEvent );\n\n\t\t\t// ...then, handle focus/blur\n\t\t\t//\n\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t// invoking the handler at the lower level.\n\t\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t// by this point.\n\t\t\t\thandle( event );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t// while someone wants focusin/focusout.\n\t\t\tjQuery.event.simulate( delegateType, nativeEvent.target,\n\t\t\t\tjQuery.event.fix( nativeEvent ) );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\tvar attaches;\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( document.documentMode ) {\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tattaches = dataPriv.get( this, delegateType );\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t}\n\t\t\t\tdataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tvar attaches;\n\n\t\t\tif ( document.documentMode ) {\n\t\t\t\tattaches = dataPriv.get( this, delegateType ) - 1;\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t\tdataPriv.remove( this, delegateType );\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set( this, delegateType, attaches );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n\n\t// Support: Firefox <=44\n\t// Firefox doesn't have focus(in | out) events\n\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t//\n\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t// focus(in | out) events fire after focus & blur events,\n\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t//\n\t// Support: IE 9 - 11+\n\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t// attach a single handler for both events in IE.\n\tjQuery.event.special[ delegateType ] = {\n\t\tsetup: function() {\n\n\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType );\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.addEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\tdataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );\n\t\t},\n\t\tteardown: function() {\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType ) - 1;\n\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.removeEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( dataHolder, delegateType );\n\t\t\t} else {\n\t\t\t\tdataPriv.set( dataHolder, delegateType, attaches );\n\t\t\t}\n\t\t}\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (trac-8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"box-sizing:content-box;border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is `display: block`\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tisCustomProp = rcustomProp.test( name ),\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, trac-12537)\n\t// .css('--customProperty) (gh-3144)\n\tif ( computed ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\tanimationIterationCount: true,\n\t\taspectRatio: true,\n\t\tborderImageSlice: true,\n\t\tcolumnCount: true,\n\t\tflexGrow: true,\n\t\tflexShrink: true,\n\t\tfontWeight: true,\n\t\tgridArea: true,\n\t\tgridColumn: true,\n\t\tgridColumnEnd: true,\n\t\tgridColumnStart: true,\n\t\tgridRow: true,\n\t\tgridRowEnd: true,\n\t\tgridRowStart: true,\n\t\tlineHeight: true,\n\t\topacity: true,\n\t\torder: true,\n\t\torphans: true,\n\t\tscale: true,\n\t\twidows: true,\n\t\tzIndex: true,\n\t\tzoom: true,\n\n\t\t// SVG-related\n\t\tfillOpacity: true,\n\t\tfloodOpacity: true,\n\t\tstopOpacity: true,\n\t\tstrokeMiterlimit: true,\n\t\tstrokeOpacity: true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this\n\t\t\t.on( \"mouseenter\", fnOver )\n\t\t\t.on( \"mouseleave\", fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\n// Require that the \"whitespace run\" starts from a non-whitespace\n// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"$1\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","/*!\n * Select2 4.1.0-rc.0\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n;(function (factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['jquery'], factory);\n } else if (typeof module === 'object' && module.exports) {\n // Node/CommonJS\n module.exports = function (root, jQuery) {\n if (jQuery === undefined) {\n // require('jQuery') returns a factory that requires window to\n // build a jQuery instance, we normalize how we use modules\n // that require this pattern but the window provided is a noop\n // if it's defined (how jquery works)\n if (typeof window !== 'undefined') {\n jQuery = require('jquery');\n }\n else {\n jQuery = require('jquery')(root);\n }\n }\n factory(jQuery);\n return jQuery;\n };\n } else {\n // Browser globals\n factory(jQuery);\n }\n} (function (jQuery) {\n // This is needed so we can catch the AMD loader configuration and use it\n // The inner file should be wrapped (by `banner.start.js`) in a function that\n // returns the AMD loader references.\n var S2 =(function () {\n // Restore the Select2 AMD loader so it can be used\n // Needed mostly in the language files, where the loader is not inserted\n if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n var S2 = jQuery.fn.select2.amd;\n }\nvar S2;(function () { if (!S2 || !S2.requirejs) {\nif (!S2) { S2 = {}; } else { require = S2; }\n/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n var main, req, makeMap, handlers,\n defined = {},\n waiting = {},\n config = {},\n defining = {},\n hasOwn = Object.prototype.hasOwnProperty,\n aps = [].slice,\n jsSuffixRegExp = /\\.js$/;\n\n function hasProp(obj, prop) {\n return hasOwn.call(obj, prop);\n }\n\n /**\n * Given a relative module name, like ./something, normalize it to\n * a real name that can be mapped to a path.\n * @param {String} name the relative name\n * @param {String} baseName a real name that the name arg is relative\n * to.\n * @returns {String} normalized name\n */\n function normalize(name, baseName) {\n var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n baseParts = baseName && baseName.split(\"/\"),\n map = config.map,\n starMap = (map && map['*']) || {};\n\n //Adjust any relative paths.\n if (name) {\n name = name.split('/');\n lastIndex = name.length - 1;\n\n // If wanting node ID compatibility, strip .js from end\n // of IDs. Have to do this here, and not in nameToUrl\n // because node allows either .js or non .js to map\n // to same file.\n if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n }\n\n // Starts with a '.' so need the baseName\n if (name[0].charAt(0) === '.' && baseParts) {\n //Convert baseName to array, and lop off the last part,\n //so that . matches that 'directory' and not name of the baseName's\n //module. For instance, baseName of 'one/two/three', maps to\n //'one/two/three.js', but we want the directory, 'one/two' for\n //this normalization.\n normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n name = normalizedBaseParts.concat(name);\n }\n\n //start trimDots\n for (i = 0; i < name.length; i++) {\n part = name[i];\n if (part === '.') {\n name.splice(i, 1);\n i -= 1;\n } else if (part === '..') {\n // If at the start, or previous value is still ..,\n // keep them so that when converted to a path it may\n // still work when converted to a path, even though\n // as an ID it is less than ideal. In larger point\n // releases, may be better to just kick out an error.\n if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n continue;\n } else if (i > 0) {\n name.splice(i - 1, 2);\n i -= 2;\n }\n }\n }\n //end trimDots\n\n name = name.join('/');\n }\n\n //Apply map config if available.\n if ((baseParts || starMap) && map) {\n nameParts = name.split('/');\n\n for (i = nameParts.length; i > 0; i -= 1) {\n nameSegment = nameParts.slice(0, i).join(\"/\");\n\n if (baseParts) {\n //Find the longest baseName segment match in the config.\n //So, do joins on the biggest to smallest lengths of baseParts.\n for (j = baseParts.length; j > 0; j -= 1) {\n mapValue = map[baseParts.slice(0, j).join('/')];\n\n //baseName segment has config, find if it has one for\n //this name.\n if (mapValue) {\n mapValue = mapValue[nameSegment];\n if (mapValue) {\n //Match, update name to the new value.\n foundMap = mapValue;\n foundI = i;\n break;\n }\n }\n }\n }\n\n if (foundMap) {\n break;\n }\n\n //Check for a star map match, but just hold on to it,\n //if there is a shorter segment match later in a matching\n //config, then favor over this star map.\n if (!foundStarMap && starMap && starMap[nameSegment]) {\n foundStarMap = starMap[nameSegment];\n starI = i;\n }\n }\n\n if (!foundMap && foundStarMap) {\n foundMap = foundStarMap;\n foundI = starI;\n }\n\n if (foundMap) {\n nameParts.splice(0, foundI, foundMap);\n name = nameParts.join('/');\n }\n }\n\n return name;\n }\n\n function makeRequire(relName, forceSync) {\n return function () {\n //A version of a require function that passes a moduleName\n //value for items that may need to\n //look up paths relative to the moduleName\n var args = aps.call(arguments, 0);\n\n //If first arg is not require('string'), and there is only\n //one arg, it is the array form without a callback. Insert\n //a null so that the following concat is correct.\n if (typeof args[0] !== 'string' && args.length === 1) {\n args.push(null);\n }\n return req.apply(undef, args.concat([relName, forceSync]));\n };\n }\n\n function makeNormalize(relName) {\n return function (name) {\n return normalize(name, relName);\n };\n }\n\n function makeLoad(depName) {\n return function (value) {\n defined[depName] = value;\n };\n }\n\n function callDep(name) {\n if (hasProp(waiting, name)) {\n var args = waiting[name];\n delete waiting[name];\n defining[name] = true;\n main.apply(undef, args);\n }\n\n if (!hasProp(defined, name) && !hasProp(defining, name)) {\n throw new Error('No ' + name);\n }\n return defined[name];\n }\n\n //Turns a plugin!resource to [plugin, resource]\n //with the plugin being undefined if the name\n //did not have a plugin prefix.\n function splitPrefix(name) {\n var prefix,\n index = name ? name.indexOf('!') : -1;\n if (index > -1) {\n prefix = name.substring(0, index);\n name = name.substring(index + 1, name.length);\n }\n return [prefix, name];\n }\n\n //Creates a parts array for a relName where first part is plugin ID,\n //second part is resource ID. Assumes relName has already been normalized.\n function makeRelParts(relName) {\n return relName ? splitPrefix(relName) : [];\n }\n\n /**\n * Makes a name map, normalizing the name, and using a plugin\n * for normalization if necessary. Grabs a ref to plugin\n * too, as an optimization.\n */\n makeMap = function (name, relParts) {\n var plugin,\n parts = splitPrefix(name),\n prefix = parts[0],\n relResourceName = relParts[1];\n\n name = parts[1];\n\n if (prefix) {\n prefix = normalize(prefix, relResourceName);\n plugin = callDep(prefix);\n }\n\n //Normalize according\n if (prefix) {\n if (plugin && plugin.normalize) {\n name = plugin.normalize(name, makeNormalize(relResourceName));\n } else {\n name = normalize(name, relResourceName);\n }\n } else {\n name = normalize(name, relResourceName);\n parts = splitPrefix(name);\n prefix = parts[0];\n name = parts[1];\n if (prefix) {\n plugin = callDep(prefix);\n }\n }\n\n //Using ridiculous property names for space reasons\n return {\n f: prefix ? prefix + '!' + name : name, //fullName\n n: name,\n pr: prefix,\n p: plugin\n };\n };\n\n function makeConfig(name) {\n return function () {\n return (config && config.config && config.config[name]) || {};\n };\n }\n\n handlers = {\n require: function (name) {\n return makeRequire(name);\n },\n exports: function (name) {\n var e = defined[name];\n if (typeof e !== 'undefined') {\n return e;\n } else {\n return (defined[name] = {});\n }\n },\n module: function (name) {\n return {\n id: name,\n uri: '',\n exports: defined[name],\n config: makeConfig(name)\n };\n }\n };\n\n main = function (name, deps, callback, relName) {\n var cjsModule, depName, ret, map, i, relParts,\n args = [],\n callbackType = typeof callback,\n usingExports;\n\n //Use name if no relName\n relName = relName || name;\n relParts = makeRelParts(relName);\n\n //Call the callback to define the module, if necessary.\n if (callbackType === 'undefined' || callbackType === 'function') {\n //Pull out the defined dependencies and pass the ordered\n //values to the callback.\n //Default to [require, exports, module] if no deps\n deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n for (i = 0; i < deps.length; i += 1) {\n map = makeMap(deps[i], relParts);\n depName = map.f;\n\n //Fast path CommonJS standard dependencies.\n if (depName === \"require\") {\n args[i] = handlers.require(name);\n } else if (depName === \"exports\") {\n //CommonJS module spec 1.1\n args[i] = handlers.exports(name);\n usingExports = true;\n } else if (depName === \"module\") {\n //CommonJS module spec 1.1\n cjsModule = args[i] = handlers.module(name);\n } else if (hasProp(defined, depName) ||\n hasProp(waiting, depName) ||\n hasProp(defining, depName)) {\n args[i] = callDep(depName);\n } else if (map.p) {\n map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n args[i] = defined[depName];\n } else {\n throw new Error(name + ' missing ' + depName);\n }\n }\n\n ret = callback ? callback.apply(defined[name], args) : undefined;\n\n if (name) {\n //If setting exports via \"module\" is in play,\n //favor that over return value and exports. After that,\n //favor a non-undefined return value over exports use.\n if (cjsModule && cjsModule.exports !== undef &&\n cjsModule.exports !== defined[name]) {\n defined[name] = cjsModule.exports;\n } else if (ret !== undef || !usingExports) {\n //Use the return value from the function.\n defined[name] = ret;\n }\n }\n } else if (name) {\n //May just be an object definition for the module. Only\n //worry about defining if have a module name.\n defined[name] = callback;\n }\n };\n\n requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n if (typeof deps === \"string\") {\n if (handlers[deps]) {\n //callback in this case is really relName\n return handlers[deps](callback);\n }\n //Just return the module wanted. In this scenario, the\n //deps arg is the module name, and second arg (if passed)\n //is just the relName.\n //Normalize module name, if it contains . or ..\n return callDep(makeMap(deps, makeRelParts(callback)).f);\n } else if (!deps.splice) {\n //deps is a config object, not an array.\n config = deps;\n if (config.deps) {\n req(config.deps, config.callback);\n }\n if (!callback) {\n return;\n }\n\n if (callback.splice) {\n //callback is an array, which means it is a dependency list.\n //Adjust args if there are dependencies\n deps = callback;\n callback = relName;\n relName = null;\n } else {\n deps = undef;\n }\n }\n\n //Support require(['a'])\n callback = callback || function () {};\n\n //If relName is a function, it is an errback handler,\n //so remove it.\n if (typeof relName === 'function') {\n relName = forceSync;\n forceSync = alt;\n }\n\n //Simulate async callback;\n if (forceSync) {\n main(undef, deps, callback, relName);\n } else {\n //Using a non-zero value because of concern for what old browsers\n //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n //If want a value immediately, use require('id') instead -- something\n //that works in almond on the global level, but not guaranteed and\n //unlikely to work in other AMD implementations.\n setTimeout(function () {\n main(undef, deps, callback, relName);\n }, 4);\n }\n\n return req;\n };\n\n /**\n * Just drops the config on the floor, but returns req in case\n * the config return value is used.\n */\n req.config = function (cfg) {\n return req(cfg);\n };\n\n /**\n * Expose module registry for debugging and tooling\n */\n requirejs._defined = defined;\n\n define = function (name, deps, callback) {\n if (typeof name !== 'string') {\n throw new Error('See almond README: incorrect module build, no module name');\n }\n\n //This module may not have dependencies\n if (!deps.splice) {\n //deps is not an array, so probably means\n //an object literal or factory function for\n //the value. Adjust args.\n callback = deps;\n deps = [];\n }\n\n if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n waiting[name] = [name, deps, callback];\n }\n };\n\n define.amd = {\n jQuery: true\n };\n}());\n\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\n}\n}());\nS2.define(\"almond\", function(){});\n\n/* global jQuery:false, $:false */\nS2.define('jquery',[],function () {\n var _$ = jQuery || $;\n\n if (_$ == null && console && console.error) {\n console.error(\n 'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\n 'found. Make sure that you are including jQuery before Select2 on your ' +\n 'web page.'\n );\n }\n\n return _$;\n});\n\nS2.define('select2/utils',[\n 'jquery'\n], function ($) {\n var Utils = {};\n\n Utils.Extend = function (ChildClass, SuperClass) {\n var __hasProp = {}.hasOwnProperty;\n\n function BaseConstructor () {\n this.constructor = ChildClass;\n }\n\n for (var key in SuperClass) {\n if (__hasProp.call(SuperClass, key)) {\n ChildClass[key] = SuperClass[key];\n }\n }\n\n BaseConstructor.prototype = SuperClass.prototype;\n ChildClass.prototype = new BaseConstructor();\n ChildClass.__super__ = SuperClass.prototype;\n\n return ChildClass;\n };\n\n function getMethods (theClass) {\n var proto = theClass.prototype;\n\n var methods = [];\n\n for (var methodName in proto) {\n var m = proto[methodName];\n\n if (typeof m !== 'function') {\n continue;\n }\n\n if (methodName === 'constructor') {\n continue;\n }\n\n methods.push(methodName);\n }\n\n return methods;\n }\n\n Utils.Decorate = function (SuperClass, DecoratorClass) {\n var decoratedMethods = getMethods(DecoratorClass);\n var superMethods = getMethods(SuperClass);\n\n function DecoratedClass () {\n var unshift = Array.prototype.unshift;\n\n var argCount = DecoratorClass.prototype.constructor.length;\n\n var calledConstructor = SuperClass.prototype.constructor;\n\n if (argCount > 0) {\n unshift.call(arguments, SuperClass.prototype.constructor);\n\n calledConstructor = DecoratorClass.prototype.constructor;\n }\n\n calledConstructor.apply(this, arguments);\n }\n\n DecoratorClass.displayName = SuperClass.displayName;\n\n function ctr () {\n this.constructor = DecoratedClass;\n }\n\n DecoratedClass.prototype = new ctr();\n\n for (var m = 0; m < superMethods.length; m++) {\n var superMethod = superMethods[m];\n\n DecoratedClass.prototype[superMethod] =\n SuperClass.prototype[superMethod];\n }\n\n var calledMethod = function (methodName) {\n // Stub out the original method if it's not decorating an actual method\n var originalMethod = function () {};\n\n if (methodName in DecoratedClass.prototype) {\n originalMethod = DecoratedClass.prototype[methodName];\n }\n\n var decoratedMethod = DecoratorClass.prototype[methodName];\n\n return function () {\n var unshift = Array.prototype.unshift;\n\n unshift.call(arguments, originalMethod);\n\n return decoratedMethod.apply(this, arguments);\n };\n };\n\n for (var d = 0; d < decoratedMethods.length; d++) {\n var decoratedMethod = decoratedMethods[d];\n\n DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n }\n\n return DecoratedClass;\n };\n\n var Observable = function () {\n this.listeners = {};\n };\n\n Observable.prototype.on = function (event, callback) {\n this.listeners = this.listeners || {};\n\n if (event in this.listeners) {\n this.listeners[event].push(callback);\n } else {\n this.listeners[event] = [callback];\n }\n };\n\n Observable.prototype.trigger = function (event) {\n var slice = Array.prototype.slice;\n var params = slice.call(arguments, 1);\n\n this.listeners = this.listeners || {};\n\n // Params should always come in as an array\n if (params == null) {\n params = [];\n }\n\n // If there are no arguments to the event, use a temporary object\n if (params.length === 0) {\n params.push({});\n }\n\n // Set the `_type` of the first object to the event\n params[0]._type = event;\n\n if (event in this.listeners) {\n this.invoke(this.listeners[event], slice.call(arguments, 1));\n }\n\n if ('*' in this.listeners) {\n this.invoke(this.listeners['*'], arguments);\n }\n };\n\n Observable.prototype.invoke = function (listeners, params) {\n for (var i = 0, len = listeners.length; i < len; i++) {\n listeners[i].apply(this, params);\n }\n };\n\n Utils.Observable = Observable;\n\n Utils.generateChars = function (length) {\n var chars = '';\n\n for (var i = 0; i < length; i++) {\n var randomChar = Math.floor(Math.random() * 36);\n chars += randomChar.toString(36);\n }\n\n return chars;\n };\n\n Utils.bind = function (func, context) {\n return function () {\n func.apply(context, arguments);\n };\n };\n\n Utils._convertData = function (data) {\n for (var originalKey in data) {\n var keys = originalKey.split('-');\n\n var dataLevel = data;\n\n if (keys.length === 1) {\n continue;\n }\n\n for (var k = 0; k < keys.length; k++) {\n var key = keys[k];\n\n // Lowercase the first letter\n // By default, dash-separated becomes camelCase\n key = key.substring(0, 1).toLowerCase() + key.substring(1);\n\n if (!(key in dataLevel)) {\n dataLevel[key] = {};\n }\n\n if (k == keys.length - 1) {\n dataLevel[key] = data[originalKey];\n }\n\n dataLevel = dataLevel[key];\n }\n\n delete data[originalKey];\n }\n\n return data;\n };\n\n Utils.hasScroll = function (index, el) {\n // Adapted from the function created by @ShadowScripter\n // and adapted by @BillBarry on the Stack Exchange Code Review website.\n // The original code can be found at\n // http://codereview.stackexchange.com/q/13338\n // and was designed to be used with the Sizzle selector engine.\n\n var $el = $(el);\n var overflowX = el.style.overflowX;\n var overflowY = el.style.overflowY;\n\n //Check both x and y declarations\n if (overflowX === overflowY &&\n (overflowY === 'hidden' || overflowY === 'visible')) {\n return false;\n }\n\n if (overflowX === 'scroll' || overflowY === 'scroll') {\n return true;\n }\n\n return ($el.innerHeight() < el.scrollHeight ||\n $el.innerWidth() < el.scrollWidth);\n };\n\n Utils.escapeMarkup = function (markup) {\n var replaceMap = {\n '\\\\': '\',\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': ''',\n '/': '/'\n };\n\n // Do not try to escape the markup if it's not a string\n if (typeof markup !== 'string') {\n return markup;\n }\n\n return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n return replaceMap[match];\n });\n };\n\n // Cache objects in Utils.__cache instead of $.data (see #4346)\n Utils.__cache = {};\n\n var id = 0;\n Utils.GetUniqueElementId = function (element) {\n // Get a unique element Id. If element has no id,\n // creates a new unique number, stores it in the id\n // attribute and returns the new id with a prefix.\n // If an id already exists, it simply returns it with a prefix.\n\n var select2Id = element.getAttribute('data-select2-id');\n\n if (select2Id != null) {\n return select2Id;\n }\n\n // If element has id, use it.\n if (element.id) {\n select2Id = 'select2-data-' + element.id;\n } else {\n select2Id = 'select2-data-' + (++id).toString() +\n '-' + Utils.generateChars(4);\n }\n\n element.setAttribute('data-select2-id', select2Id);\n\n return select2Id;\n };\n\n Utils.StoreData = function (element, name, value) {\n // Stores an item in the cache for a specified element.\n // name is the cache key.\n var id = Utils.GetUniqueElementId(element);\n if (!Utils.__cache[id]) {\n Utils.__cache[id] = {};\n }\n\n Utils.__cache[id][name] = value;\n };\n\n Utils.GetData = function (element, name) {\n // Retrieves a value from the cache by its key (name)\n // name is optional. If no name specified, return\n // all cache items for the specified element.\n // and for a specified element.\n var id = Utils.GetUniqueElementId(element);\n if (name) {\n if (Utils.__cache[id]) {\n if (Utils.__cache[id][name] != null) {\n return Utils.__cache[id][name];\n }\n return $(element).data(name); // Fallback to HTML5 data attribs.\n }\n return $(element).data(name); // Fallback to HTML5 data attribs.\n } else {\n return Utils.__cache[id];\n }\n };\n\n Utils.RemoveData = function (element) {\n // Removes all cached items for a specified element.\n var id = Utils.GetUniqueElementId(element);\n if (Utils.__cache[id] != null) {\n delete Utils.__cache[id];\n }\n\n element.removeAttribute('data-select2-id');\n };\n\n Utils.copyNonInternalCssClasses = function (dest, src) {\n var classes;\n\n var destinationClasses = dest.getAttribute('class').trim().split(/\\s+/);\n\n destinationClasses = destinationClasses.filter(function (clazz) {\n // Save all Select2 classes\n return clazz.indexOf('select2-') === 0;\n });\n\n var sourceClasses = src.getAttribute('class').trim().split(/\\s+/);\n\n sourceClasses = sourceClasses.filter(function (clazz) {\n // Only copy non-Select2 classes\n return clazz.indexOf('select2-') !== 0;\n });\n\n var replacements = destinationClasses.concat(sourceClasses);\n\n dest.setAttribute('class', replacements.join(' '));\n };\n\n return Utils;\n});\n\nS2.define('select2/results',[\n 'jquery',\n './utils'\n], function ($, Utils) {\n function Results ($element, options, dataAdapter) {\n this.$element = $element;\n this.data = dataAdapter;\n this.options = options;\n\n Results.__super__.constructor.call(this);\n }\n\n Utils.Extend(Results, Utils.Observable);\n\n Results.prototype.render = function () {\n var $results = $(\n '<ul class=\"select2-results__options\" role=\"listbox\"></ul>'\n );\n\n if (this.options.get('multiple')) {\n $results.attr('aria-multiselectable', 'true');\n }\n\n this.$results = $results;\n\n return $results;\n };\n\n Results.prototype.clear = function () {\n this.$results.empty();\n };\n\n Results.prototype.displayMessage = function (params) {\n var escapeMarkup = this.options.get('escapeMarkup');\n\n this.clear();\n this.hideLoading();\n\n var $message = $(\n '<li role=\"alert\" aria-live=\"assertive\"' +\n ' class=\"select2-results__option\"></li>'\n );\n\n var message = this.options.get('translations').get(params.message);\n\n $message.append(\n escapeMarkup(\n message(params.args)\n )\n );\n\n $message[0].className += ' select2-results__message';\n\n this.$results.append($message);\n };\n\n Results.prototype.hideMessages = function () {\n this.$results.find('.select2-results__message').remove();\n };\n\n Results.prototype.append = function (data) {\n this.hideLoading();\n\n var $options = [];\n\n if (data.results == null || data.results.length === 0) {\n if (this.$results.children().length === 0) {\n this.trigger('results:message', {\n message: 'noResults'\n });\n }\n\n return;\n }\n\n data.results = this.sort(data.results);\n\n for (var d = 0; d < data.results.length; d++) {\n var item = data.results[d];\n\n var $option = this.option(item);\n\n $options.push($option);\n }\n\n this.$results.append($options);\n };\n\n Results.prototype.position = function ($results, $dropdown) {\n var $resultsContainer = $dropdown.find('.select2-results');\n $resultsContainer.append($results);\n };\n\n Results.prototype.sort = function (data) {\n var sorter = this.options.get('sorter');\n\n return sorter(data);\n };\n\n Results.prototype.highlightFirstItem = function () {\n var $options = this.$results\n .find('.select2-results__option--selectable');\n\n var $selected = $options.filter('.select2-results__option--selected');\n\n // Check if there are any selected options\n if ($selected.length > 0) {\n // If there are selected options, highlight the first\n $selected.first().trigger('mouseenter');\n } else {\n // If there are no selected options, highlight the first option\n // in the dropdown\n $options.first().trigger('mouseenter');\n }\n\n this.ensureHighlightVisible();\n };\n\n Results.prototype.setClasses = function () {\n var self = this;\n\n this.data.current(function (selected) {\n var selectedIds = selected.map(function (s) {\n return s.id.toString();\n });\n\n var $options = self.$results\n .find('.select2-results__option--selectable');\n\n $options.each(function () {\n var $option = $(this);\n\n var item = Utils.GetData(this, 'data');\n\n // id needs to be converted to a string when comparing\n var id = '' + item.id;\n\n if ((item.element != null && item.element.selected) ||\n (item.element == null && selectedIds.indexOf(id) > -1)) {\n this.classList.add('select2-results__option--selected');\n $option.attr('aria-selected', 'true');\n } else {\n this.classList.remove('select2-results__option--selected');\n $option.attr('aria-selected', 'false');\n }\n });\n\n });\n };\n\n Results.prototype.showLoading = function (params) {\n this.hideLoading();\n\n var loadingMore = this.options.get('translations').get('searching');\n\n var loading = {\n disabled: true,\n loading: true,\n text: loadingMore(params)\n };\n var $loading = this.option(loading);\n $loading.className += ' loading-results';\n\n this.$results.prepend($loading);\n };\n\n Results.prototype.hideLoading = function () {\n this.$results.find('.loading-results').remove();\n };\n\n Results.prototype.option = function (data) {\n var option = document.createElement('li');\n option.classList.add('select2-results__option');\n option.classList.add('select2-results__option--selectable');\n\n var attrs = {\n 'role': 'option'\n };\n\n var matches = window.Element.prototype.matches ||\n window.Element.prototype.msMatchesSelector ||\n window.Element.prototype.webkitMatchesSelector;\n\n if ((data.element != null && matches.call(data.element, ':disabled')) ||\n (data.element == null && data.disabled)) {\n attrs['aria-disabled'] = 'true';\n\n option.classList.remove('select2-results__option--selectable');\n option.classList.add('select2-results__option--disabled');\n }\n\n if (data.id == null) {\n option.classList.remove('select2-results__option--selectable');\n }\n\n if (data._resultId != null) {\n option.id = data._resultId;\n }\n\n if (data.title) {\n option.title = data.title;\n }\n\n if (data.children) {\n attrs.role = 'group';\n attrs['aria-label'] = data.text;\n\n option.classList.remove('select2-results__option--selectable');\n option.classList.add('select2-results__option--group');\n }\n\n for (var attr in attrs) {\n var val = attrs[attr];\n\n option.setAttribute(attr, val);\n }\n\n if (data.children) {\n var $option = $(option);\n\n var label = document.createElement('strong');\n label.className = 'select2-results__group';\n\n this.template(data, label);\n\n var $children = [];\n\n for (var c = 0; c < data.children.length; c++) {\n var child = data.children[c];\n\n var $child = this.option(child);\n\n $children.push($child);\n }\n\n var $childrenContainer = $('<ul></ul>', {\n 'class': 'select2-results__options select2-results__options--nested',\n 'role': 'none'\n });\n\n $childrenContainer.append($children);\n\n $option.append(label);\n $option.append($childrenContainer);\n } else {\n this.template(data, option);\n }\n\n Utils.StoreData(option, 'data', data);\n\n return option;\n };\n\n Results.prototype.bind = function (container, $container) {\n var self = this;\n\n var id = container.id + '-results';\n\n this.$results.attr('id', id);\n\n container.on('results:all', function (params) {\n self.clear();\n self.append(params.data);\n\n if (container.isOpen()) {\n self.setClasses();\n self.highlightFirstItem();\n }\n });\n\n container.on('results:append', function (params) {\n self.append(params.data);\n\n if (container.isOpen()) {\n self.setClasses();\n }\n });\n\n container.on('query', function (params) {\n self.hideMessages();\n self.showLoading(params);\n });\n\n container.on('select', function () {\n if (!container.isOpen()) {\n return;\n }\n\n self.setClasses();\n\n if (self.options.get('scrollAfterSelect')) {\n self.highlightFirstItem();\n }\n });\n\n container.on('unselect', function () {\n if (!container.isOpen()) {\n return;\n }\n\n self.setClasses();\n\n if (self.options.get('scrollAfterSelect')) {\n self.highlightFirstItem();\n }\n });\n\n container.on('open', function () {\n // When the dropdown is open, aria-expended=\"true\"\n self.$results.attr('aria-expanded', 'true');\n self.$results.attr('aria-hidden', 'false');\n\n self.setClasses();\n self.ensureHighlightVisible();\n });\n\n container.on('close', function () {\n // When the dropdown is closed, aria-expended=\"false\"\n self.$results.attr('aria-expanded', 'false');\n self.$results.attr('aria-hidden', 'true');\n self.$results.removeAttr('aria-activedescendant');\n });\n\n container.on('results:toggle', function () {\n var $highlighted = self.getHighlightedResults();\n\n if ($highlighted.length === 0) {\n return;\n }\n\n $highlighted.trigger('mouseup');\n });\n\n container.on('results:select', function () {\n var $highlighted = self.getHighlightedResults();\n\n if ($highlighted.length === 0) {\n return;\n }\n\n var data = Utils.GetData($highlighted[0], 'data');\n\n if ($highlighted.hasClass('select2-results__option--selected')) {\n self.trigger('close', {});\n } else {\n self.trigger('select', {\n data: data\n });\n }\n });\n\n container.on('results:previous', function () {\n var $highlighted = self.getHighlightedResults();\n\n var $options = self.$results.find('.select2-results__option--selectable');\n\n var currentIndex = $options.index($highlighted);\n\n // If we are already at the top, don't move further\n // If no options, currentIndex will be -1\n if (currentIndex <= 0) {\n return;\n }\n\n var nextIndex = currentIndex - 1;\n\n // If none are highlighted, highlight the first\n if ($highlighted.length === 0) {\n nextIndex = 0;\n }\n\n var $next = $options.eq(nextIndex);\n\n $next.trigger('mouseenter');\n\n var currentOffset = self.$results.offset().top;\n var nextTop = $next.offset().top;\n var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n\n if (nextIndex === 0) {\n self.$results.scrollTop(0);\n } else if (nextTop - currentOffset < 0) {\n self.$results.scrollTop(nextOffset);\n }\n });\n\n container.on('results:next', function () {\n var $highlighted = self.getHighlightedResults();\n\n var $options = self.$results.find('.select2-results__option--selectable');\n\n var currentIndex = $options.index($highlighted);\n\n var nextIndex = currentIndex + 1;\n\n // If we are at the last option, stay there\n if (nextIndex >= $options.length) {\n return;\n }\n\n var $next = $options.eq(nextIndex);\n\n $next.trigger('mouseenter');\n\n var currentOffset = self.$results.offset().top +\n self.$results.outerHeight(false);\n var nextBottom = $next.offset().top + $next.outerHeight(false);\n var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n\n if (nextIndex === 0) {\n self.$results.scrollTop(0);\n } else if (nextBottom > currentOffset) {\n self.$results.scrollTop(nextOffset);\n }\n });\n\n container.on('results:focus', function (params) {\n params.element[0].classList.add('select2-results__option--highlighted');\n params.element[0].setAttribute('aria-selected', 'true');\n });\n\n container.on('results:message', function (params) {\n self.displayMessage(params);\n });\n\n if ($.fn.mousewheel) {\n this.$results.on('mousewheel', function (e) {\n var top = self.$results.scrollTop();\n\n var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n\n var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n\n if (isAtTop) {\n self.$results.scrollTop(0);\n\n e.preventDefault();\n e.stopPropagation();\n } else if (isAtBottom) {\n self.$results.scrollTop(\n self.$results.get(0).scrollHeight - self.$results.height()\n );\n\n e.preventDefault();\n e.stopPropagation();\n }\n });\n }\n\n this.$results.on('mouseup', '.select2-results__option--selectable',\n function (evt) {\n var $this = $(this);\n\n var data = Utils.GetData(this, 'data');\n\n if ($this.hasClass('select2-results__option--selected')) {\n if (self.options.get('multiple')) {\n self.trigger('unselect', {\n originalEvent: evt,\n data: data\n });\n } else {\n self.trigger('close', {});\n }\n\n return;\n }\n\n self.trigger('select', {\n originalEvent: evt,\n data: data\n });\n });\n\n this.$results.on('mouseenter', '.select2-results__option--selectable',\n function (evt) {\n var data = Utils.GetData(this, 'data');\n\n self.getHighlightedResults()\n .removeClass('select2-results__option--highlighted')\n .attr('aria-selected', 'false');\n\n self.trigger('results:focus', {\n data: data,\n element: $(this)\n });\n });\n };\n\n Results.prototype.getHighlightedResults = function () {\n var $highlighted = this.$results\n .find('.select2-results__option--highlighted');\n\n return $highlighted;\n };\n\n Results.prototype.destroy = function () {\n this.$results.remove();\n };\n\n Results.prototype.ensureHighlightVisible = function () {\n var $highlighted = this.getHighlightedResults();\n\n if ($highlighted.length === 0) {\n return;\n }\n\n var $options = this.$results.find('.select2-results__option--selectable');\n\n var currentIndex = $options.index($highlighted);\n\n var currentOffset = this.$results.offset().top;\n var nextTop = $highlighted.offset().top;\n var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n\n var offsetDelta = nextTop - currentOffset;\n nextOffset -= $highlighted.outerHeight(false) * 2;\n\n if (currentIndex <= 2) {\n this.$results.scrollTop(0);\n } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n this.$results.scrollTop(nextOffset);\n }\n };\n\n Results.prototype.template = function (result, container) {\n var template = this.options.get('templateResult');\n var escapeMarkup = this.options.get('escapeMarkup');\n\n var content = template(result, container);\n\n if (content == null) {\n container.style.display = 'none';\n } else if (typeof content === 'string') {\n container.innerHTML = escapeMarkup(content);\n } else {\n $(container).append(content);\n }\n };\n\n return Results;\n});\n\nS2.define('select2/keys',[\n\n], function () {\n var KEYS = {\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n SHIFT: 16,\n CTRL: 17,\n ALT: 18,\n ESC: 27,\n SPACE: 32,\n PAGE_UP: 33,\n PAGE_DOWN: 34,\n END: 35,\n HOME: 36,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n DELETE: 46\n };\n\n return KEYS;\n});\n\nS2.define('select2/selection/base',[\n 'jquery',\n '../utils',\n '../keys'\n], function ($, Utils, KEYS) {\n function BaseSelection ($element, options) {\n this.$element = $element;\n this.options = options;\n\n BaseSelection.__super__.constructor.call(this);\n }\n\n Utils.Extend(BaseSelection, Utils.Observable);\n\n BaseSelection.prototype.render = function () {\n var $selection = $(\n '<span class=\"select2-selection\" role=\"combobox\" ' +\n ' aria-haspopup=\"true\" aria-expanded=\"false\">' +\n '</span>'\n );\n\n this._tabindex = 0;\n\n if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {\n this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');\n } else if (this.$element.attr('tabindex') != null) {\n this._tabindex = this.$element.attr('tabindex');\n }\n\n $selection.attr('title', this.$element.attr('title'));\n $selection.attr('tabindex', this._tabindex);\n $selection.attr('aria-disabled', 'false');\n\n this.$selection = $selection;\n\n return $selection;\n };\n\n BaseSelection.prototype.bind = function (container, $container) {\n var self = this;\n\n var resultsId = container.id + '-results';\n\n this.container = container;\n\n this.$selection.on('focus', function (evt) {\n self.trigger('focus', evt);\n });\n\n this.$selection.on('blur', function (evt) {\n self._handleBlur(evt);\n });\n\n this.$selection.on('keydown', function (evt) {\n self.trigger('keypress', evt);\n\n if (evt.which === KEYS.SPACE) {\n evt.preventDefault();\n }\n });\n\n container.on('results:focus', function (params) {\n self.$selection.attr('aria-activedescendant', params.data._resultId);\n });\n\n container.on('selection:update', function (params) {\n self.update(params.data);\n });\n\n container.on('open', function () {\n // When the dropdown is open, aria-expanded=\"true\"\n self.$selection.attr('aria-expanded', 'true');\n self.$selection.attr('aria-owns', resultsId);\n\n self._attachCloseHandler(container);\n });\n\n container.on('close', function () {\n // When the dropdown is closed, aria-expanded=\"false\"\n self.$selection.attr('aria-expanded', 'false');\n self.$selection.removeAttr('aria-activedescendant');\n self.$selection.removeAttr('aria-owns');\n\n self.$selection.trigger('focus');\n\n self._detachCloseHandler(container);\n });\n\n container.on('enable', function () {\n self.$selection.attr('tabindex', self._tabindex);\n self.$selection.attr('aria-disabled', 'false');\n });\n\n container.on('disable', function () {\n self.$selection.attr('tabindex', '-1');\n self.$selection.attr('aria-disabled', 'true');\n });\n };\n\n BaseSelection.prototype._handleBlur = function (evt) {\n var self = this;\n\n // This needs to be delayed as the active element is the body when the tab\n // key is pressed, possibly along with others.\n window.setTimeout(function () {\n // Don't trigger `blur` if the focus is still in the selection\n if (\n (document.activeElement == self.$selection[0]) ||\n ($.contains(self.$selection[0], document.activeElement))\n ) {\n return;\n }\n\n self.trigger('blur', evt);\n }, 1);\n };\n\n BaseSelection.prototype._attachCloseHandler = function (container) {\n\n $(document.body).on('mousedown.select2.' + container.id, function (e) {\n var $target = $(e.target);\n\n var $select = $target.closest('.select2');\n\n var $all = $('.select2.select2-container--open');\n\n $all.each(function () {\n if (this == $select[0]) {\n return;\n }\n\n var $element = Utils.GetData(this, 'element');\n\n $element.select2('close');\n });\n });\n };\n\n BaseSelection.prototype._detachCloseHandler = function (container) {\n $(document.body).off('mousedown.select2.' + container.id);\n };\n\n BaseSelection.prototype.position = function ($selection, $container) {\n var $selectionContainer = $container.find('.selection');\n $selectionContainer.append($selection);\n };\n\n BaseSelection.prototype.destroy = function () {\n this._detachCloseHandler(this.container);\n };\n\n BaseSelection.prototype.update = function (data) {\n throw new Error('The `update` method must be defined in child classes.');\n };\n\n /**\n * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n * object.\n *\n * @return {true} if the instance is not disabled.\n * @return {false} if the instance is disabled.\n */\n BaseSelection.prototype.isEnabled = function () {\n return !this.isDisabled();\n };\n\n /**\n * Helper method to abstract the \"disabled\" state of this object.\n *\n * @return {true} if the disabled option is true.\n * @return {false} if the disabled option is false.\n */\n BaseSelection.prototype.isDisabled = function () {\n return this.options.get('disabled');\n };\n\n return BaseSelection;\n});\n\nS2.define('select2/selection/single',[\n 'jquery',\n './base',\n '../utils',\n '../keys'\n], function ($, BaseSelection, Utils, KEYS) {\n function SingleSelection () {\n SingleSelection.__super__.constructor.apply(this, arguments);\n }\n\n Utils.Extend(SingleSelection, BaseSelection);\n\n SingleSelection.prototype.render = function () {\n var $selection = SingleSelection.__super__.render.call(this);\n\n $selection[0].classList.add('select2-selection--single');\n\n $selection.html(\n '<span class=\"select2-selection__rendered\"></span>' +\n '<span class=\"select2-selection__arrow\" role=\"presentation\">' +\n '<b role=\"presentation\"></b>' +\n '</span>'\n );\n\n return $selection;\n };\n\n SingleSelection.prototype.bind = function (container, $container) {\n var self = this;\n\n SingleSelection.__super__.bind.apply(this, arguments);\n\n var id = container.id + '-container';\n\n this.$selection.find('.select2-selection__rendered')\n .attr('id', id)\n .attr('role', 'textbox')\n .attr('aria-readonly', 'true');\n this.$selection.attr('aria-labelledby', id);\n this.$selection.attr('aria-controls', id);\n\n this.$selection.on('mousedown', function (evt) {\n // Only respond to left clicks\n if (evt.which !== 1) {\n return;\n }\n\n self.trigger('toggle', {\n originalEvent: evt\n });\n });\n\n this.$selection.on('focus', function (evt) {\n // User focuses on the container\n });\n\n this.$selection.on('blur', function (evt) {\n // User exits the container\n });\n\n container.on('focus', function (evt) {\n if (!container.isOpen()) {\n self.$selection.trigger('focus');\n }\n });\n };\n\n SingleSelection.prototype.clear = function () {\n var $rendered = this.$selection.find('.select2-selection__rendered');\n $rendered.empty();\n $rendered.removeAttr('title'); // clear tooltip on empty\n };\n\n SingleSelection.prototype.display = function (data, container) {\n var template = this.options.get('templateSelection');\n var escapeMarkup = this.options.get('escapeMarkup');\n\n return escapeMarkup(template(data, container));\n };\n\n SingleSelection.prototype.selectionContainer = function () {\n return $('<span></span>');\n };\n\n SingleSelection.prototype.update = function (data) {\n if (data.length === 0) {\n this.clear();\n return;\n }\n\n var selection = data[0];\n\n var $rendered = this.$selection.find('.select2-selection__rendered');\n var formatted = this.display(selection, $rendered);\n\n $rendered.empty().append(formatted);\n\n var title = selection.title || selection.text;\n\n if (title) {\n $rendered.attr('title', title);\n } else {\n $rendered.removeAttr('title');\n }\n };\n\n return SingleSelection;\n});\n\nS2.define('select2/selection/multiple',[\n 'jquery',\n './base',\n '../utils'\n], function ($, BaseSelection, Utils) {\n function MultipleSelection ($element, options) {\n MultipleSelection.__super__.constructor.apply(this, arguments);\n }\n\n Utils.Extend(MultipleSelection, BaseSelection);\n\n MultipleSelection.prototype.render = function () {\n var $selection = MultipleSelection.__super__.render.call(this);\n\n $selection[0].classList.add('select2-selection--multiple');\n\n $selection.html(\n '<ul class=\"select2-selection__rendered\"></ul>'\n );\n\n return $selection;\n };\n\n MultipleSelection.prototype.bind = function (container, $container) {\n var self = this;\n\n MultipleSelection.__super__.bind.apply(this, arguments);\n\n var id = container.id + '-container';\n this.$selection.find('.select2-selection__rendered').attr('id', id);\n\n this.$selection.on('click', function (evt) {\n self.trigger('toggle', {\n originalEvent: evt\n });\n });\n\n this.$selection.on(\n 'click',\n '.select2-selection__choice__remove',\n function (evt) {\n // Ignore the event if it is disabled\n if (self.isDisabled()) {\n return;\n }\n\n var $remove = $(this);\n var $selection = $remove.parent();\n\n var data = Utils.GetData($selection[0], 'data');\n\n self.trigger('unselect', {\n originalEvent: evt,\n data: data\n });\n }\n );\n\n this.$selection.on(\n 'keydown',\n '.select2-selection__choice__remove',\n function (evt) {\n // Ignore the event if it is disabled\n if (self.isDisabled()) {\n return;\n }\n\n evt.stopPropagation();\n }\n );\n };\n\n MultipleSelection.prototype.clear = function () {\n var $rendered = this.$selection.find('.select2-selection__rendered');\n $rendered.empty();\n $rendered.removeAttr('title');\n };\n\n MultipleSelection.prototype.display = function (data, container) {\n var template = this.options.get('templateSelection');\n var escapeMarkup = this.options.get('escapeMarkup');\n\n return escapeMarkup(template(data, container));\n };\n\n MultipleSelection.prototype.selectionContainer = function () {\n var $container = $(\n '<li class=\"select2-selection__choice\">' +\n '<button type=\"button\" class=\"select2-selection__choice__remove\" ' +\n 'tabindex=\"-1\">' +\n '<span aria-hidden=\"true\">×</span>' +\n '</button>' +\n '<span class=\"select2-selection__choice__display\"></span>' +\n '</li>'\n );\n\n return $container;\n };\n\n MultipleSelection.prototype.update = function (data) {\n this.clear();\n\n if (data.length === 0) {\n return;\n }\n\n var $selections = [];\n\n var selectionIdPrefix = this.$selection.find('.select2-selection__rendered')\n .attr('id') + '-choice-';\n\n for (var d = 0; d < data.length; d++) {\n var selection = data[d];\n\n var $selection = this.selectionContainer();\n var formatted = this.display(selection, $selection);\n\n var selectionId = selectionIdPrefix + Utils.generateChars(4) + '-';\n\n if (selection.id) {\n selectionId += selection.id;\n } else {\n selectionId += Utils.generateChars(4);\n }\n\n $selection.find('.select2-selection__choice__display')\n .append(formatted)\n .attr('id', selectionId);\n\n var title = selection.title || selection.text;\n\n if (title) {\n $selection.attr('title', title);\n }\n\n var removeItem = this.options.get('translations').get('removeItem');\n\n var $remove = $selection.find('.select2-selection__choice__remove');\n\n $remove.attr('title', removeItem());\n $remove.attr('aria-label', removeItem());\n $remove.attr('aria-describedby', selectionId);\n\n Utils.StoreData($selection[0], 'data', selection);\n\n $selections.push($selection);\n }\n\n var $rendered = this.$selection.find('.select2-selection__rendered');\n\n $rendered.append($selections);\n };\n\n return MultipleSelection;\n});\n\nS2.define('select2/selection/placeholder',[\n\n], function () {\n function Placeholder (decorated, $element, options) {\n this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n decorated.call(this, $element, options);\n }\n\n Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n if (typeof placeholder === 'string') {\n placeholder = {\n id: '',\n text: placeholder\n };\n }\n\n return placeholder;\n };\n\n Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n var $placeholder = this.selectionContainer();\n\n $placeholder.html(this.display(placeholder));\n $placeholder[0].classList.add('select2-selection__placeholder');\n $placeholder[0].classList.remove('select2-selection__choice');\n\n var placeholderTitle = placeholder.title ||\n placeholder.text ||\n $placeholder.text();\n\n this.$selection.find('.select2-selection__rendered').attr(\n 'title',\n placeholderTitle\n );\n\n return $placeholder;\n };\n\n Placeholder.prototype.update = function (decorated, data) {\n var singlePlaceholder = (\n data.length == 1 && data[0].id != this.placeholder.id\n );\n var multipleSelections = data.length > 1;\n\n if (multipleSelections || singlePlaceholder) {\n return decorated.call(this, data);\n }\n\n this.clear();\n\n var $placeholder = this.createPlaceholder(this.placeholder);\n\n this.$selection.find('.select2-selection__rendered').append($placeholder);\n };\n\n return Placeholder;\n});\n\nS2.define('select2/selection/allowClear',[\n 'jquery',\n '../keys',\n '../utils'\n], function ($, KEYS, Utils) {\n function AllowClear () { }\n\n AllowClear.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n if (this.placeholder == null) {\n if (this.options.get('debug') && window.console && console.error) {\n console.error(\n 'Select2: The `allowClear` option should be used in combination ' +\n 'with the `placeholder` option.'\n );\n }\n }\n\n this.$selection.on('mousedown', '.select2-selection__clear',\n function (evt) {\n self._handleClear(evt);\n });\n\n container.on('keypress', function (evt) {\n self._handleKeyboardClear(evt, container);\n });\n };\n\n AllowClear.prototype._handleClear = function (_, evt) {\n // Ignore the event if it is disabled\n if (this.isDisabled()) {\n return;\n }\n\n var $clear = this.$selection.find('.select2-selection__clear');\n\n // Ignore the event if nothing has been selected\n if ($clear.length === 0) {\n return;\n }\n\n evt.stopPropagation();\n\n var data = Utils.GetData($clear[0], 'data');\n\n var previousVal = this.$element.val();\n this.$element.val(this.placeholder.id);\n\n var unselectData = {\n data: data\n };\n this.trigger('clear', unselectData);\n if (unselectData.prevented) {\n this.$element.val(previousVal);\n return;\n }\n\n for (var d = 0; d < data.length; d++) {\n unselectData = {\n data: data[d]\n };\n\n // Trigger the `unselect` event, so people can prevent it from being\n // cleared.\n this.trigger('unselect', unselectData);\n\n // If the event was prevented, don't clear it out.\n if (unselectData.prevented) {\n this.$element.val(previousVal);\n return;\n }\n }\n\n this.$element.trigger('input').trigger('change');\n\n this.trigger('toggle', {});\n };\n\n AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n if (container.isOpen()) {\n return;\n }\n\n if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n this._handleClear(evt);\n }\n };\n\n AllowClear.prototype.update = function (decorated, data) {\n decorated.call(this, data);\n\n this.$selection.find('.select2-selection__clear').remove();\n this.$selection[0].classList.remove('select2-selection--clearable');\n\n if (this.$selection.find('.select2-selection__placeholder').length > 0 ||\n data.length === 0) {\n return;\n }\n\n var selectionId = this.$selection.find('.select2-selection__rendered')\n .attr('id');\n\n var removeAll = this.options.get('translations').get('removeAllItems');\n\n var $remove = $(\n '<button type=\"button\" class=\"select2-selection__clear\" tabindex=\"-1\">' +\n '<span aria-hidden=\"true\">×</span>' +\n '</button>'\n );\n $remove.attr('title', removeAll());\n $remove.attr('aria-label', removeAll());\n $remove.attr('aria-describedby', selectionId);\n Utils.StoreData($remove[0], 'data', data);\n\n this.$selection.prepend($remove);\n this.$selection[0].classList.add('select2-selection--clearable');\n };\n\n return AllowClear;\n});\n\nS2.define('select2/selection/search',[\n 'jquery',\n '../utils',\n '../keys'\n], function ($, Utils, KEYS) {\n function Search (decorated, $element, options) {\n decorated.call(this, $element, options);\n }\n\n Search.prototype.render = function (decorated) {\n var searchLabel = this.options.get('translations').get('search');\n var $search = $(\n '<span class=\"select2-search select2-search--inline\">' +\n '<textarea class=\"select2-search__field\"'+\n ' type=\"search\" tabindex=\"-1\"' +\n ' autocorrect=\"off\" autocapitalize=\"none\"' +\n ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" >' +\n '</textarea>' +\n '</span>'\n );\n\n this.$searchContainer = $search;\n this.$search = $search.find('textarea');\n\n this.$search.prop('autocomplete', this.options.get('autocomplete'));\n this.$search.attr('aria-label', searchLabel());\n\n var $rendered = decorated.call(this);\n\n this._transferTabIndex();\n $rendered.append(this.$searchContainer);\n\n return $rendered;\n };\n\n Search.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n var resultsId = container.id + '-results';\n var selectionId = container.id + '-container';\n\n decorated.call(this, container, $container);\n\n self.$search.attr('aria-describedby', selectionId);\n\n container.on('open', function () {\n self.$search.attr('aria-controls', resultsId);\n self.$search.trigger('focus');\n });\n\n container.on('close', function () {\n self.$search.val('');\n self.resizeSearch();\n self.$search.removeAttr('aria-controls');\n self.$search.removeAttr('aria-activedescendant');\n self.$search.trigger('focus');\n });\n\n container.on('enable', function () {\n self.$search.prop('disabled', false);\n\n self._transferTabIndex();\n });\n\n container.on('disable', function () {\n self.$search.prop('disabled', true);\n });\n\n container.on('focus', function (evt) {\n self.$search.trigger('focus');\n });\n\n container.on('results:focus', function (params) {\n if (params.data._resultId) {\n self.$search.attr('aria-activedescendant', params.data._resultId);\n } else {\n self.$search.removeAttr('aria-activedescendant');\n }\n });\n\n this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n self.trigger('focus', evt);\n });\n\n this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n self._handleBlur(evt);\n });\n\n this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n evt.stopPropagation();\n\n self.trigger('keypress', evt);\n\n self._keyUpPrevented = evt.isDefaultPrevented();\n\n var key = evt.which;\n\n if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n var $previousChoice = self.$selection\n .find('.select2-selection__choice').last();\n\n if ($previousChoice.length > 0) {\n var item = Utils.GetData($previousChoice[0], 'data');\n\n self.searchRemoveChoice(item);\n\n evt.preventDefault();\n }\n }\n });\n\n this.$selection.on('click', '.select2-search--inline', function (evt) {\n if (self.$search.val()) {\n evt.stopPropagation();\n }\n });\n\n // Try to detect the IE version should the `documentMode` property that\n // is stored on the document. This is only implemented in IE and is\n // slightly cleaner than doing a user agent check.\n // This property is not available in Edge, but Edge also doesn't have\n // this bug.\n var msie = document.documentMode;\n var disableInputEvents = msie && msie <= 11;\n\n // Workaround for browsers which do not support the `input` event\n // This will prevent double-triggering of events for browsers which support\n // both the `keyup` and `input` events.\n this.$selection.on(\n 'input.searchcheck',\n '.select2-search--inline',\n function (evt) {\n // IE will trigger the `input` event when a placeholder is used on a\n // search box. To get around this issue, we are forced to ignore all\n // `input` events in IE and keep using `keyup`.\n if (disableInputEvents) {\n self.$selection.off('input.search input.searchcheck');\n return;\n }\n\n // Unbind the duplicated `keyup` event\n self.$selection.off('keyup.search');\n }\n );\n\n this.$selection.on(\n 'keyup.search input.search',\n '.select2-search--inline',\n function (evt) {\n // IE will trigger the `input` event when a placeholder is used on a\n // search box. To get around this issue, we are forced to ignore all\n // `input` events in IE and keep using `keyup`.\n if (disableInputEvents && evt.type === 'input') {\n self.$selection.off('input.search input.searchcheck');\n return;\n }\n\n var key = evt.which;\n\n // We can freely ignore events from modifier keys\n if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n return;\n }\n\n // Tabbing will be handled during the `keydown` phase\n if (key == KEYS.TAB) {\n return;\n }\n\n self.handleSearch(evt);\n }\n );\n };\n\n /**\n * This method will transfer the tabindex attribute from the rendered\n * selection to the search box. This allows for the search box to be used as\n * the primary focus instead of the selection container.\n *\n * @private\n */\n Search.prototype._transferTabIndex = function (decorated) {\n this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n this.$selection.attr('tabindex', '-1');\n };\n\n Search.prototype.createPlaceholder = function (decorated, placeholder) {\n this.$search.attr('placeholder', placeholder.text);\n };\n\n Search.prototype.update = function (decorated, data) {\n var searchHadFocus = this.$search[0] == document.activeElement;\n\n this.$search.attr('placeholder', '');\n\n decorated.call(this, data);\n\n this.resizeSearch();\n if (searchHadFocus) {\n this.$search.trigger('focus');\n }\n };\n\n Search.prototype.handleSearch = function () {\n this.resizeSearch();\n\n if (!this._keyUpPrevented) {\n var input = this.$search.val();\n\n this.trigger('query', {\n term: input\n });\n }\n\n this._keyUpPrevented = false;\n };\n\n Search.prototype.searchRemoveChoice = function (decorated, item) {\n this.trigger('unselect', {\n data: item\n });\n\n this.$search.val(item.text);\n this.handleSearch();\n };\n\n Search.prototype.resizeSearch = function () {\n this.$search.css('width', '25px');\n\n var width = '100%';\n\n if (this.$search.attr('placeholder') === '') {\n var minimumWidth = this.$search.val().length + 1;\n\n width = (minimumWidth * 0.75) + 'em';\n }\n\n this.$search.css('width', width);\n };\n\n return Search;\n});\n\nS2.define('select2/selection/selectionCss',[\n '../utils'\n], function (Utils) {\n function SelectionCSS () { }\n\n SelectionCSS.prototype.render = function (decorated) {\n var $selection = decorated.call(this);\n\n var selectionCssClass = this.options.get('selectionCssClass') || '';\n\n if (selectionCssClass.indexOf(':all:') !== -1) {\n selectionCssClass = selectionCssClass.replace(':all:', '');\n\n Utils.copyNonInternalCssClasses($selection[0], this.$element[0]);\n }\n\n $selection.addClass(selectionCssClass);\n\n return $selection;\n };\n\n return SelectionCSS;\n});\n\nS2.define('select2/selection/eventRelay',[\n 'jquery'\n], function ($) {\n function EventRelay () { }\n\n EventRelay.prototype.bind = function (decorated, container, $container) {\n var self = this;\n var relayEvents = [\n 'open', 'opening',\n 'close', 'closing',\n 'select', 'selecting',\n 'unselect', 'unselecting',\n 'clear', 'clearing'\n ];\n\n var preventableEvents = [\n 'opening', 'closing', 'selecting', 'unselecting', 'clearing'\n ];\n\n decorated.call(this, container, $container);\n\n container.on('*', function (name, params) {\n // Ignore events that should not be relayed\n if (relayEvents.indexOf(name) === -1) {\n return;\n }\n\n // The parameters should always be an object\n params = params || {};\n\n // Generate the jQuery event for the Select2 event\n var evt = $.Event('select2:' + name, {\n params: params\n });\n\n self.$element.trigger(evt);\n\n // Only handle preventable events if it was one\n if (preventableEvents.indexOf(name) === -1) {\n return;\n }\n\n params.prevented = evt.isDefaultPrevented();\n });\n };\n\n return EventRelay;\n});\n\nS2.define('select2/translation',[\n 'jquery',\n 'require'\n], function ($, require) {\n function Translation (dict) {\n this.dict = dict || {};\n }\n\n Translation.prototype.all = function () {\n return this.dict;\n };\n\n Translation.prototype.get = function (key) {\n return this.dict[key];\n };\n\n Translation.prototype.extend = function (translation) {\n this.dict = $.extend({}, translation.all(), this.dict);\n };\n\n // Static functions\n\n Translation._cache = {};\n\n Translation.loadPath = function (path) {\n if (!(path in Translation._cache)) {\n var translations = require(path);\n\n Translation._cache[path] = translations;\n }\n\n return new Translation(Translation._cache[path]);\n };\n\n return Translation;\n});\n\nS2.define('select2/diacritics',[\n\n], function () {\n var diacritics = {\n '\\u24B6': 'A',\n '\\uFF21': 'A',\n '\\u00C0': 'A',\n '\\u00C1': 'A',\n '\\u00C2': 'A',\n '\\u1EA6': 'A',\n '\\u1EA4': 'A',\n '\\u1EAA': 'A',\n '\\u1EA8': 'A',\n '\\u00C3': 'A',\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u1EB0': 'A',\n '\\u1EAE': 'A',\n '\\u1EB4': 'A',\n '\\u1EB2': 'A',\n '\\u0226': 'A',\n '\\u01E0': 'A',\n '\\u00C4': 'A',\n '\\u01DE': 'A',\n '\\u1EA2': 'A',\n '\\u00C5': 'A',\n '\\u01FA': 'A',\n '\\u01CD': 'A',\n '\\u0200': 'A',\n '\\u0202': 'A',\n '\\u1EA0': 'A',\n '\\u1EAC': 'A',\n '\\u1EB6': 'A',\n '\\u1E00': 'A',\n '\\u0104': 'A',\n '\\u023A': 'A',\n '\\u2C6F': 'A',\n '\\uA732': 'AA',\n '\\u00C6': 'AE',\n '\\u01FC': 'AE',\n '\\u01E2': 'AE',\n '\\uA734': 'AO',\n '\\uA736': 'AU',\n '\\uA738': 'AV',\n '\\uA73A': 'AV',\n '\\uA73C': 'AY',\n '\\u24B7': 'B',\n '\\uFF22': 'B',\n '\\u1E02': 'B',\n '\\u1E04': 'B',\n '\\u1E06': 'B',\n '\\u0243': 'B',\n '\\u0182': 'B',\n '\\u0181': 'B',\n '\\u24B8': 'C',\n '\\uFF23': 'C',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010A': 'C',\n '\\u010C': 'C',\n '\\u00C7': 'C',\n '\\u1E08': 'C',\n '\\u0187': 'C',\n '\\u023B': 'C',\n '\\uA73E': 'C',\n '\\u24B9': 'D',\n '\\uFF24': 'D',\n '\\u1E0A': 'D',\n '\\u010E': 'D',\n '\\u1E0C': 'D',\n '\\u1E10': 'D',\n '\\u1E12': 'D',\n '\\u1E0E': 'D',\n '\\u0110': 'D',\n '\\u018B': 'D',\n '\\u018A': 'D',\n '\\u0189': 'D',\n '\\uA779': 'D',\n '\\u01F1': 'DZ',\n '\\u01C4': 'DZ',\n '\\u01F2': 'Dz',\n '\\u01C5': 'Dz',\n '\\u24BA': 'E',\n '\\uFF25': 'E',\n '\\u00C8': 'E',\n '\\u00C9': 'E',\n '\\u00CA': 'E',\n '\\u1EC0': 'E',\n '\\u1EBE': 'E',\n '\\u1EC4': 'E',\n '\\u1EC2': 'E',\n '\\u1EBC': 'E',\n '\\u0112': 'E',\n '\\u1E14': 'E',\n '\\u1E16': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u00CB': 'E',\n '\\u1EBA': 'E',\n '\\u011A': 'E',\n '\\u0204': 'E',\n '\\u0206': 'E',\n '\\u1EB8': 'E',\n '\\u1EC6': 'E',\n '\\u0228': 'E',\n '\\u1E1C': 'E',\n '\\u0118': 'E',\n '\\u1E18': 'E',\n '\\u1E1A': 'E',\n '\\u0190': 'E',\n '\\u018E': 'E',\n '\\u24BB': 'F',\n '\\uFF26': 'F',\n '\\u1E1E': 'F',\n '\\u0191': 'F',\n '\\uA77B': 'F',\n '\\u24BC': 'G',\n '\\uFF27': 'G',\n '\\u01F4': 'G',\n '\\u011C': 'G',\n '\\u1E20': 'G',\n '\\u011E': 'G',\n '\\u0120': 'G',\n '\\u01E6': 'G',\n '\\u0122': 'G',\n '\\u01E4': 'G',\n '\\u0193': 'G',\n '\\uA7A0': 'G',\n '\\uA77D': 'G',\n '\\uA77E': 'G',\n '\\u24BD': 'H',\n '\\uFF28': 'H',\n '\\u0124': 'H',\n '\\u1E22': 'H',\n '\\u1E26': 'H',\n '\\u021E': 'H',\n '\\u1E24': 'H',\n '\\u1E28': 'H',\n '\\u1E2A': 'H',\n '\\u0126': 'H',\n '\\u2C67': 'H',\n '\\u2C75': 'H',\n '\\uA78D': 'H',\n '\\u24BE': 'I',\n '\\uFF29': 'I',\n '\\u00CC': 'I',\n '\\u00CD': 'I',\n '\\u00CE': 'I',\n '\\u0128': 'I',\n '\\u012A': 'I',\n '\\u012C': 'I',\n '\\u0130': 'I',\n '\\u00CF': 'I',\n '\\u1E2E': 'I',\n '\\u1EC8': 'I',\n '\\u01CF': 'I',\n '\\u0208': 'I',\n '\\u020A': 'I',\n '\\u1ECA': 'I',\n '\\u012E': 'I',\n '\\u1E2C': 'I',\n '\\u0197': 'I',\n '\\u24BF': 'J',\n '\\uFF2A': 'J',\n '\\u0134': 'J',\n '\\u0248': 'J',\n '\\u24C0': 'K',\n '\\uFF2B': 'K',\n '\\u1E30': 'K',\n '\\u01E8': 'K',\n '\\u1E32': 'K',\n '\\u0136': 'K',\n '\\u1E34': 'K',\n '\\u0198': 'K',\n '\\u2C69': 'K',\n '\\uA740': 'K',\n '\\uA742': 'K',\n '\\uA744': 'K',\n '\\uA7A2': 'K',\n '\\u24C1': 'L',\n '\\uFF2C': 'L',\n '\\u013F': 'L',\n '\\u0139': 'L',\n '\\u013D': 'L',\n '\\u1E36': 'L',\n '\\u1E38': 'L',\n '\\u013B': 'L',\n '\\u1E3C': 'L',\n '\\u1E3A': 'L',\n '\\u0141': 'L',\n '\\u023D': 'L',\n '\\u2C62': 'L',\n '\\u2C60': 'L',\n '\\uA748': 'L',\n '\\uA746': 'L',\n '\\uA780': 'L',\n '\\u01C7': 'LJ',\n '\\u01C8': 'Lj',\n '\\u24C2': 'M',\n '\\uFF2D': 'M',\n '\\u1E3E': 'M',\n '\\u1E40': 'M',\n '\\u1E42': 'M',\n '\\u2C6E': 'M',\n '\\u019C': 'M',\n '\\u24C3': 'N',\n '\\uFF2E': 'N',\n '\\u01F8': 'N',\n '\\u0143': 'N',\n '\\u00D1': 'N',\n '\\u1E44': 'N',\n '\\u0147': 'N',\n '\\u1E46': 'N',\n '\\u0145': 'N',\n '\\u1E4A': 'N',\n '\\u1E48': 'N',\n '\\u0220': 'N',\n '\\u019D': 'N',\n '\\uA790': 'N',\n '\\uA7A4': 'N',\n '\\u01CA': 'NJ',\n '\\u01CB': 'Nj',\n '\\u24C4': 'O',\n '\\uFF2F': 'O',\n '\\u00D2': 'O',\n '\\u00D3': 'O',\n '\\u00D4': 'O',\n '\\u1ED2': 'O',\n '\\u1ED0': 'O',\n '\\u1ED6': 'O',\n '\\u1ED4': 'O',\n '\\u00D5': 'O',\n '\\u1E4C': 'O',\n '\\u022C': 'O',\n '\\u1E4E': 'O',\n '\\u014C': 'O',\n '\\u1E50': 'O',\n '\\u1E52': 'O',\n '\\u014E': 'O',\n '\\u022E': 'O',\n '\\u0230': 'O',\n '\\u00D6': 'O',\n '\\u022A': 'O',\n '\\u1ECE': 'O',\n '\\u0150': 'O',\n '\\u01D1': 'O',\n '\\u020C': 'O',\n '\\u020E': 'O',\n '\\u01A0': 'O',\n '\\u1EDC': 'O',\n '\\u1EDA': 'O',\n '\\u1EE0': 'O',\n '\\u1EDE': 'O',\n '\\u1EE2': 'O',\n '\\u1ECC': 'O',\n '\\u1ED8': 'O',\n '\\u01EA': 'O',\n '\\u01EC': 'O',\n '\\u00D8': 'O',\n '\\u01FE': 'O',\n '\\u0186': 'O',\n '\\u019F': 'O',\n '\\uA74A': 'O',\n '\\uA74C': 'O',\n '\\u0152': 'OE',\n '\\u01A2': 'OI',\n '\\uA74E': 'OO',\n '\\u0222': 'OU',\n '\\u24C5': 'P',\n '\\uFF30': 'P',\n '\\u1E54': 'P',\n '\\u1E56': 'P',\n '\\u01A4': 'P',\n '\\u2C63': 'P',\n '\\uA750': 'P',\n '\\uA752': 'P',\n '\\uA754': 'P',\n '\\u24C6': 'Q',\n '\\uFF31': 'Q',\n '\\uA756': 'Q',\n '\\uA758': 'Q',\n '\\u024A': 'Q',\n '\\u24C7': 'R',\n '\\uFF32': 'R',\n '\\u0154': 'R',\n '\\u1E58': 'R',\n '\\u0158': 'R',\n '\\u0210': 'R',\n '\\u0212': 'R',\n '\\u1E5A': 'R',\n '\\u1E5C': 'R',\n '\\u0156': 'R',\n '\\u1E5E': 'R',\n '\\u024C': 'R',\n '\\u2C64': 'R',\n '\\uA75A': 'R',\n '\\uA7A6': 'R',\n '\\uA782': 'R',\n '\\u24C8': 'S',\n '\\uFF33': 'S',\n '\\u1E9E': 'S',\n '\\u015A': 'S',\n '\\u1E64': 'S',\n '\\u015C': 'S',\n '\\u1E60': 'S',\n '\\u0160': 'S',\n '\\u1E66': 'S',\n '\\u1E62': 'S',\n '\\u1E68': 'S',\n '\\u0218': 'S',\n '\\u015E': 'S',\n '\\u2C7E': 'S',\n '\\uA7A8': 'S',\n '\\uA784': 'S',\n '\\u24C9': 'T',\n '\\uFF34': 'T',\n '\\u1E6A': 'T',\n '\\u0164': 'T',\n '\\u1E6C': 'T',\n '\\u021A': 'T',\n '\\u0162': 'T',\n '\\u1E70': 'T',\n '\\u1E6E': 'T',\n '\\u0166': 'T',\n '\\u01AC': 'T',\n '\\u01AE': 'T',\n '\\u023E': 'T',\n '\\uA786': 'T',\n '\\uA728': 'TZ',\n '\\u24CA': 'U',\n '\\uFF35': 'U',\n '\\u00D9': 'U',\n '\\u00DA': 'U',\n '\\u00DB': 'U',\n '\\u0168': 'U',\n '\\u1E78': 'U',\n '\\u016A': 'U',\n '\\u1E7A': 'U',\n '\\u016C': 'U',\n '\\u00DC': 'U',\n '\\u01DB': 'U',\n '\\u01D7': 'U',\n '\\u01D5': 'U',\n '\\u01D9': 'U',\n '\\u1EE6': 'U',\n '\\u016E': 'U',\n '\\u0170': 'U',\n '\\u01D3': 'U',\n '\\u0214': 'U',\n '\\u0216': 'U',\n '\\u01AF': 'U',\n '\\u1EEA': 'U',\n '\\u1EE8': 'U',\n '\\u1EEE': 'U',\n '\\u1EEC': 'U',\n '\\u1EF0': 'U',\n '\\u1EE4': 'U',\n '\\u1E72': 'U',\n '\\u0172': 'U',\n '\\u1E76': 'U',\n '\\u1E74': 'U',\n '\\u0244': 'U',\n '\\u24CB': 'V',\n '\\uFF36': 'V',\n '\\u1E7C': 'V',\n '\\u1E7E': 'V',\n '\\u01B2': 'V',\n '\\uA75E': 'V',\n '\\u0245': 'V',\n '\\uA760': 'VY',\n '\\u24CC': 'W',\n '\\uFF37': 'W',\n '\\u1E80': 'W',\n '\\u1E82': 'W',\n '\\u0174': 'W',\n '\\u1E86': 'W',\n '\\u1E84': 'W',\n '\\u1E88': 'W',\n '\\u2C72': 'W',\n '\\u24CD': 'X',\n '\\uFF38': 'X',\n '\\u1E8A': 'X',\n '\\u1E8C': 'X',\n '\\u24CE': 'Y',\n '\\uFF39': 'Y',\n '\\u1EF2': 'Y',\n '\\u00DD': 'Y',\n '\\u0176': 'Y',\n '\\u1EF8': 'Y',\n '\\u0232': 'Y',\n '\\u1E8E': 'Y',\n '\\u0178': 'Y',\n '\\u1EF6': 'Y',\n '\\u1EF4': 'Y',\n '\\u01B3': 'Y',\n '\\u024E': 'Y',\n '\\u1EFE': 'Y',\n '\\u24CF': 'Z',\n '\\uFF3A': 'Z',\n '\\u0179': 'Z',\n '\\u1E90': 'Z',\n '\\u017B': 'Z',\n '\\u017D': 'Z',\n '\\u1E92': 'Z',\n '\\u1E94': 'Z',\n '\\u01B5': 'Z',\n '\\u0224': 'Z',\n '\\u2C7F': 'Z',\n '\\u2C6B': 'Z',\n '\\uA762': 'Z',\n '\\u24D0': 'a',\n '\\uFF41': 'a',\n '\\u1E9A': 'a',\n '\\u00E0': 'a',\n '\\u00E1': 'a',\n '\\u00E2': 'a',\n '\\u1EA7': 'a',\n '\\u1EA5': 'a',\n '\\u1EAB': 'a',\n '\\u1EA9': 'a',\n '\\u00E3': 'a',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u1EB1': 'a',\n '\\u1EAF': 'a',\n '\\u1EB5': 'a',\n '\\u1EB3': 'a',\n '\\u0227': 'a',\n '\\u01E1': 'a',\n '\\u00E4': 'a',\n '\\u01DF': 'a',\n '\\u1EA3': 'a',\n '\\u00E5': 'a',\n '\\u01FB': 'a',\n '\\u01CE': 'a',\n '\\u0201': 'a',\n '\\u0203': 'a',\n '\\u1EA1': 'a',\n '\\u1EAD': 'a',\n '\\u1EB7': 'a',\n '\\u1E01': 'a',\n '\\u0105': 'a',\n '\\u2C65': 'a',\n '\\u0250': 'a',\n '\\uA733': 'aa',\n '\\u00E6': 'ae',\n '\\u01FD': 'ae',\n '\\u01E3': 'ae',\n '\\uA735': 'ao',\n '\\uA737': 'au',\n '\\uA739': 'av',\n '\\uA73B': 'av',\n '\\uA73D': 'ay',\n '\\u24D1': 'b',\n '\\uFF42': 'b',\n '\\u1E03': 'b',\n '\\u1E05': 'b',\n '\\u1E07': 'b',\n '\\u0180': 'b',\n '\\u0183': 'b',\n '\\u0253': 'b',\n '\\u24D2': 'c',\n '\\uFF43': 'c',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010B': 'c',\n '\\u010D': 'c',\n '\\u00E7': 'c',\n '\\u1E09': 'c',\n '\\u0188': 'c',\n '\\u023C': 'c',\n '\\uA73F': 'c',\n '\\u2184': 'c',\n '\\u24D3': 'd',\n '\\uFF44': 'd',\n '\\u1E0B': 'd',\n '\\u010F': 'd',\n '\\u1E0D': 'd',\n '\\u1E11': 'd',\n '\\u1E13': 'd',\n '\\u1E0F': 'd',\n '\\u0111': 'd',\n '\\u018C': 'd',\n '\\u0256': 'd',\n '\\u0257': 'd',\n '\\uA77A': 'd',\n '\\u01F3': 'dz',\n '\\u01C6': 'dz',\n '\\u24D4': 'e',\n '\\uFF45': 'e',\n '\\u00E8': 'e',\n '\\u00E9': 'e',\n '\\u00EA': 'e',\n '\\u1EC1': 'e',\n '\\u1EBF': 'e',\n '\\u1EC5': 'e',\n '\\u1EC3': 'e',\n '\\u1EBD': 'e',\n '\\u0113': 'e',\n '\\u1E15': 'e',\n '\\u1E17': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u00EB': 'e',\n '\\u1EBB': 'e',\n '\\u011B': 'e',\n '\\u0205': 'e',\n '\\u0207': 'e',\n '\\u1EB9': 'e',\n '\\u1EC7': 'e',\n '\\u0229': 'e',\n '\\u1E1D': 'e',\n '\\u0119': 'e',\n '\\u1E19': 'e',\n '\\u1E1B': 'e',\n '\\u0247': 'e',\n '\\u025B': 'e',\n '\\u01DD': 'e',\n '\\u24D5': 'f',\n '\\uFF46': 'f',\n '\\u1E1F': 'f',\n '\\u0192': 'f',\n '\\uA77C': 'f',\n '\\u24D6': 'g',\n '\\uFF47': 'g',\n '\\u01F5': 'g',\n '\\u011D': 'g',\n '\\u1E21': 'g',\n '\\u011F': 'g',\n '\\u0121': 'g',\n '\\u01E7': 'g',\n '\\u0123': 'g',\n '\\u01E5': 'g',\n '\\u0260': 'g',\n '\\uA7A1': 'g',\n '\\u1D79': 'g',\n '\\uA77F': 'g',\n '\\u24D7': 'h',\n '\\uFF48': 'h',\n '\\u0125': 'h',\n '\\u1E23': 'h',\n '\\u1E27': 'h',\n '\\u021F': 'h',\n '\\u1E25': 'h',\n '\\u1E29': 'h',\n '\\u1E2B': 'h',\n '\\u1E96': 'h',\n '\\u0127': 'h',\n '\\u2C68': 'h',\n '\\u2C76': 'h',\n '\\u0265': 'h',\n '\\u0195': 'hv',\n '\\u24D8': 'i',\n '\\uFF49': 'i',\n '\\u00EC': 'i',\n '\\u00ED': 'i',\n '\\u00EE': 'i',\n '\\u0129': 'i',\n '\\u012B': 'i',\n '\\u012D': 'i',\n '\\u00EF': 'i',\n '\\u1E2F': 'i',\n '\\u1EC9': 'i',\n '\\u01D0': 'i',\n '\\u0209': 'i',\n '\\u020B': 'i',\n '\\u1ECB': 'i',\n '\\u012F': 'i',\n '\\u1E2D': 'i',\n '\\u0268': 'i',\n '\\u0131': 'i',\n '\\u24D9': 'j',\n '\\uFF4A': 'j',\n '\\u0135': 'j',\n '\\u01F0': 'j',\n '\\u0249': 'j',\n '\\u24DA': 'k',\n '\\uFF4B': 'k',\n '\\u1E31': 'k',\n '\\u01E9': 'k',\n '\\u1E33': 'k',\n '\\u0137': 'k',\n '\\u1E35': 'k',\n '\\u0199': 'k',\n '\\u2C6A': 'k',\n '\\uA741': 'k',\n '\\uA743': 'k',\n '\\uA745': 'k',\n '\\uA7A3': 'k',\n '\\u24DB': 'l',\n '\\uFF4C': 'l',\n '\\u0140': 'l',\n '\\u013A': 'l',\n '\\u013E': 'l',\n '\\u1E37': 'l',\n '\\u1E39': 'l',\n '\\u013C': 'l',\n '\\u1E3D': 'l',\n '\\u1E3B': 'l',\n '\\u017F': 'l',\n '\\u0142': 'l',\n '\\u019A': 'l',\n '\\u026B': 'l',\n '\\u2C61': 'l',\n '\\uA749': 'l',\n '\\uA781': 'l',\n '\\uA747': 'l',\n '\\u01C9': 'lj',\n '\\u24DC': 'm',\n '\\uFF4D': 'm',\n '\\u1E3F': 'm',\n '\\u1E41': 'm',\n '\\u1E43': 'm',\n '\\u0271': 'm',\n '\\u026F': 'm',\n '\\u24DD': 'n',\n '\\uFF4E': 'n',\n '\\u01F9': 'n',\n '\\u0144': 'n',\n '\\u00F1': 'n',\n '\\u1E45': 'n',\n '\\u0148': 'n',\n '\\u1E47': 'n',\n '\\u0146': 'n',\n '\\u1E4B': 'n',\n '\\u1E49': 'n',\n '\\u019E': 'n',\n '\\u0272': 'n',\n '\\u0149': 'n',\n '\\uA791': 'n',\n '\\uA7A5': 'n',\n '\\u01CC': 'nj',\n '\\u24DE': 'o',\n '\\uFF4F': 'o',\n '\\u00F2': 'o',\n '\\u00F3': 'o',\n '\\u00F4': 'o',\n '\\u1ED3': 'o',\n '\\u1ED1': 'o',\n '\\u1ED7': 'o',\n '\\u1ED5': 'o',\n '\\u00F5': 'o',\n '\\u1E4D': 'o',\n '\\u022D': 'o',\n '\\u1E4F': 'o',\n '\\u014D': 'o',\n '\\u1E51': 'o',\n '\\u1E53': 'o',\n '\\u014F': 'o',\n '\\u022F': 'o',\n '\\u0231': 'o',\n '\\u00F6': 'o',\n '\\u022B': 'o',\n '\\u1ECF': 'o',\n '\\u0151': 'o',\n '\\u01D2': 'o',\n '\\u020D': 'o',\n '\\u020F': 'o',\n '\\u01A1': 'o',\n '\\u1EDD': 'o',\n '\\u1EDB': 'o',\n '\\u1EE1': 'o',\n '\\u1EDF': 'o',\n '\\u1EE3': 'o',\n '\\u1ECD': 'o',\n '\\u1ED9': 'o',\n '\\u01EB': 'o',\n '\\u01ED': 'o',\n '\\u00F8': 'o',\n '\\u01FF': 'o',\n '\\u0254': 'o',\n '\\uA74B': 'o',\n '\\uA74D': 'o',\n '\\u0275': 'o',\n '\\u0153': 'oe',\n '\\u01A3': 'oi',\n '\\u0223': 'ou',\n '\\uA74F': 'oo',\n '\\u24DF': 'p',\n '\\uFF50': 'p',\n '\\u1E55': 'p',\n '\\u1E57': 'p',\n '\\u01A5': 'p',\n '\\u1D7D': 'p',\n '\\uA751': 'p',\n '\\uA753': 'p',\n '\\uA755': 'p',\n '\\u24E0': 'q',\n '\\uFF51': 'q',\n '\\u024B': 'q',\n '\\uA757': 'q',\n '\\uA759': 'q',\n '\\u24E1': 'r',\n '\\uFF52': 'r',\n '\\u0155': 'r',\n '\\u1E59': 'r',\n '\\u0159': 'r',\n '\\u0211': 'r',\n '\\u0213': 'r',\n '\\u1E5B': 'r',\n '\\u1E5D': 'r',\n '\\u0157': 'r',\n '\\u1E5F': 'r',\n '\\u024D': 'r',\n '\\u027D': 'r',\n '\\uA75B': 'r',\n '\\uA7A7': 'r',\n '\\uA783': 'r',\n '\\u24E2': 's',\n '\\uFF53': 's',\n '\\u00DF': 's',\n '\\u015B': 's',\n '\\u1E65': 's',\n '\\u015D': 's',\n '\\u1E61': 's',\n '\\u0161': 's',\n '\\u1E67': 's',\n '\\u1E63': 's',\n '\\u1E69': 's',\n '\\u0219': 's',\n '\\u015F': 's',\n '\\u023F': 's',\n '\\uA7A9': 's',\n '\\uA785': 's',\n '\\u1E9B': 's',\n '\\u24E3': 't',\n '\\uFF54': 't',\n '\\u1E6B': 't',\n '\\u1E97': 't',\n '\\u0165': 't',\n '\\u1E6D': 't',\n '\\u021B': 't',\n '\\u0163': 't',\n '\\u1E71': 't',\n '\\u1E6F': 't',\n '\\u0167': 't',\n '\\u01AD': 't',\n '\\u0288': 't',\n '\\u2C66': 't',\n '\\uA787': 't',\n '\\uA729': 'tz',\n '\\u24E4': 'u',\n '\\uFF55': 'u',\n '\\u00F9': 'u',\n '\\u00FA': 'u',\n '\\u00FB': 'u',\n '\\u0169': 'u',\n '\\u1E79': 'u',\n '\\u016B': 'u',\n '\\u1E7B': 'u',\n '\\u016D': 'u',\n '\\u00FC': 'u',\n '\\u01DC': 'u',\n '\\u01D8': 'u',\n '\\u01D6': 'u',\n '\\u01DA': 'u',\n '\\u1EE7': 'u',\n '\\u016F': 'u',\n '\\u0171': 'u',\n '\\u01D4': 'u',\n '\\u0215': 'u',\n '\\u0217': 'u',\n '\\u01B0': 'u',\n '\\u1EEB': 'u',\n '\\u1EE9': 'u',\n '\\u1EEF': 'u',\n '\\u1EED': 'u',\n '\\u1EF1': 'u',\n '\\u1EE5': 'u',\n '\\u1E73': 'u',\n '\\u0173': 'u',\n '\\u1E77': 'u',\n '\\u1E75': 'u',\n '\\u0289': 'u',\n '\\u24E5': 'v',\n '\\uFF56': 'v',\n '\\u1E7D': 'v',\n '\\u1E7F': 'v',\n '\\u028B': 'v',\n '\\uA75F': 'v',\n '\\u028C': 'v',\n '\\uA761': 'vy',\n '\\u24E6': 'w',\n '\\uFF57': 'w',\n '\\u1E81': 'w',\n '\\u1E83': 'w',\n '\\u0175': 'w',\n '\\u1E87': 'w',\n '\\u1E85': 'w',\n '\\u1E98': 'w',\n '\\u1E89': 'w',\n '\\u2C73': 'w',\n '\\u24E7': 'x',\n '\\uFF58': 'x',\n '\\u1E8B': 'x',\n '\\u1E8D': 'x',\n '\\u24E8': 'y',\n '\\uFF59': 'y',\n '\\u1EF3': 'y',\n '\\u00FD': 'y',\n '\\u0177': 'y',\n '\\u1EF9': 'y',\n '\\u0233': 'y',\n '\\u1E8F': 'y',\n '\\u00FF': 'y',\n '\\u1EF7': 'y',\n '\\u1E99': 'y',\n '\\u1EF5': 'y',\n '\\u01B4': 'y',\n '\\u024F': 'y',\n '\\u1EFF': 'y',\n '\\u24E9': 'z',\n '\\uFF5A': 'z',\n '\\u017A': 'z',\n '\\u1E91': 'z',\n '\\u017C': 'z',\n '\\u017E': 'z',\n '\\u1E93': 'z',\n '\\u1E95': 'z',\n '\\u01B6': 'z',\n '\\u0225': 'z',\n '\\u0240': 'z',\n '\\u2C6C': 'z',\n '\\uA763': 'z',\n '\\u0386': '\\u0391',\n '\\u0388': '\\u0395',\n '\\u0389': '\\u0397',\n '\\u038A': '\\u0399',\n '\\u03AA': '\\u0399',\n '\\u038C': '\\u039F',\n '\\u038E': '\\u03A5',\n '\\u03AB': '\\u03A5',\n '\\u038F': '\\u03A9',\n '\\u03AC': '\\u03B1',\n '\\u03AD': '\\u03B5',\n '\\u03AE': '\\u03B7',\n '\\u03AF': '\\u03B9',\n '\\u03CA': '\\u03B9',\n '\\u0390': '\\u03B9',\n '\\u03CC': '\\u03BF',\n '\\u03CD': '\\u03C5',\n '\\u03CB': '\\u03C5',\n '\\u03B0': '\\u03C5',\n '\\u03CE': '\\u03C9',\n '\\u03C2': '\\u03C3',\n '\\u2019': '\\''\n };\n\n return diacritics;\n});\n\nS2.define('select2/data/base',[\n '../utils'\n], function (Utils) {\n function BaseAdapter ($element, options) {\n BaseAdapter.__super__.constructor.call(this);\n }\n\n Utils.Extend(BaseAdapter, Utils.Observable);\n\n BaseAdapter.prototype.current = function (callback) {\n throw new Error('The `current` method must be defined in child classes.');\n };\n\n BaseAdapter.prototype.query = function (params, callback) {\n throw new Error('The `query` method must be defined in child classes.');\n };\n\n BaseAdapter.prototype.bind = function (container, $container) {\n // Can be implemented in subclasses\n };\n\n BaseAdapter.prototype.destroy = function () {\n // Can be implemented in subclasses\n };\n\n BaseAdapter.prototype.generateResultId = function (container, data) {\n var id = container.id + '-result-';\n\n id += Utils.generateChars(4);\n\n if (data.id != null) {\n id += '-' + data.id.toString();\n } else {\n id += '-' + Utils.generateChars(4);\n }\n return id;\n };\n\n return BaseAdapter;\n});\n\nS2.define('select2/data/select',[\n './base',\n '../utils',\n 'jquery'\n], function (BaseAdapter, Utils, $) {\n function SelectAdapter ($element, options) {\n this.$element = $element;\n this.options = options;\n\n SelectAdapter.__super__.constructor.call(this);\n }\n\n Utils.Extend(SelectAdapter, BaseAdapter);\n\n SelectAdapter.prototype.current = function (callback) {\n var self = this;\n\n var data = Array.prototype.map.call(\n this.$element[0].querySelectorAll(':checked'),\n function (selectedElement) {\n return self.item($(selectedElement));\n }\n );\n\n callback(data);\n };\n\n SelectAdapter.prototype.select = function (data) {\n var self = this;\n\n data.selected = true;\n\n // If data.element is a DOM node, use it instead\n if (\n data.element != null && data.element.tagName.toLowerCase() === 'option'\n ) {\n data.element.selected = true;\n\n this.$element.trigger('input').trigger('change');\n\n return;\n }\n\n if (this.$element.prop('multiple')) {\n this.current(function (currentData) {\n var val = [];\n\n data = [data];\n data.push.apply(data, currentData);\n\n for (var d = 0; d < data.length; d++) {\n var id = data[d].id;\n\n if (val.indexOf(id) === -1) {\n val.push(id);\n }\n }\n\n self.$element.val(val);\n self.$element.trigger('input').trigger('change');\n });\n } else {\n var val = data.id;\n\n this.$element.val(val);\n this.$element.trigger('input').trigger('change');\n }\n };\n\n SelectAdapter.prototype.unselect = function (data) {\n var self = this;\n\n if (!this.$element.prop('multiple')) {\n return;\n }\n\n data.selected = false;\n\n if (\n data.element != null &&\n data.element.tagName.toLowerCase() === 'option'\n ) {\n data.element.selected = false;\n\n this.$element.trigger('input').trigger('change');\n\n return;\n }\n\n this.current(function (currentData) {\n var val = [];\n\n for (var d = 0; d < currentData.length; d++) {\n var id = currentData[d].id;\n\n if (id !== data.id && val.indexOf(id) === -1) {\n val.push(id);\n }\n }\n\n self.$element.val(val);\n\n self.$element.trigger('input').trigger('change');\n });\n };\n\n SelectAdapter.prototype.bind = function (container, $container) {\n var self = this;\n\n this.container = container;\n\n container.on('select', function (params) {\n self.select(params.data);\n });\n\n container.on('unselect', function (params) {\n self.unselect(params.data);\n });\n };\n\n SelectAdapter.prototype.destroy = function () {\n // Remove anything added to child elements\n this.$element.find('*').each(function () {\n // Remove any custom data set by Select2\n Utils.RemoveData(this);\n });\n };\n\n SelectAdapter.prototype.query = function (params, callback) {\n var data = [];\n var self = this;\n\n var $options = this.$element.children();\n\n $options.each(function () {\n if (\n this.tagName.toLowerCase() !== 'option' &&\n this.tagName.toLowerCase() !== 'optgroup'\n ) {\n return;\n }\n\n var $option = $(this);\n\n var option = self.item($option);\n\n var matches = self.matches(params, option);\n\n if (matches !== null) {\n data.push(matches);\n }\n });\n\n callback({\n results: data\n });\n };\n\n SelectAdapter.prototype.addOptions = function ($options) {\n this.$element.append($options);\n };\n\n SelectAdapter.prototype.option = function (data) {\n var option;\n\n if (data.children) {\n option = document.createElement('optgroup');\n option.label = data.text;\n } else {\n option = document.createElement('option');\n\n if (option.textContent !== undefined) {\n option.textContent = data.text;\n } else {\n option.innerText = data.text;\n }\n }\n\n if (data.id !== undefined) {\n option.value = data.id;\n }\n\n if (data.disabled) {\n option.disabled = true;\n }\n\n if (data.selected) {\n option.selected = true;\n }\n\n if (data.title) {\n option.title = data.title;\n }\n\n var normalizedData = this._normalizeItem(data);\n normalizedData.element = option;\n\n // Override the option's data with the combined data\n Utils.StoreData(option, 'data', normalizedData);\n\n return $(option);\n };\n\n SelectAdapter.prototype.item = function ($option) {\n var data = {};\n\n data = Utils.GetData($option[0], 'data');\n\n if (data != null) {\n return data;\n }\n\n var option = $option[0];\n\n if (option.tagName.toLowerCase() === 'option') {\n data = {\n id: $option.val(),\n text: $option.text(),\n disabled: $option.prop('disabled'),\n selected: $option.prop('selected'),\n title: $option.prop('title')\n };\n } else if (option.tagName.toLowerCase() === 'optgroup') {\n data = {\n text: $option.prop('label'),\n children: [],\n title: $option.prop('title')\n };\n\n var $children = $option.children('option');\n var children = [];\n\n for (var c = 0; c < $children.length; c++) {\n var $child = $($children[c]);\n\n var child = this.item($child);\n\n children.push(child);\n }\n\n data.children = children;\n }\n\n data = this._normalizeItem(data);\n data.element = $option[0];\n\n Utils.StoreData($option[0], 'data', data);\n\n return data;\n };\n\n SelectAdapter.prototype._normalizeItem = function (item) {\n if (item !== Object(item)) {\n item = {\n id: item,\n text: item\n };\n }\n\n item = $.extend({}, {\n text: ''\n }, item);\n\n var defaults = {\n selected: false,\n disabled: false\n };\n\n if (item.id != null) {\n item.id = item.id.toString();\n }\n\n if (item.text != null) {\n item.text = item.text.toString();\n }\n\n if (item._resultId == null && item.id && this.container != null) {\n item._resultId = this.generateResultId(this.container, item);\n }\n\n return $.extend({}, defaults, item);\n };\n\n SelectAdapter.prototype.matches = function (params, data) {\n var matcher = this.options.get('matcher');\n\n return matcher(params, data);\n };\n\n return SelectAdapter;\n});\n\nS2.define('select2/data/array',[\n './select',\n '../utils',\n 'jquery'\n], function (SelectAdapter, Utils, $) {\n function ArrayAdapter ($element, options) {\n this._dataToConvert = options.get('data') || [];\n\n ArrayAdapter.__super__.constructor.call(this, $element, options);\n }\n\n Utils.Extend(ArrayAdapter, SelectAdapter);\n\n ArrayAdapter.prototype.bind = function (container, $container) {\n ArrayAdapter.__super__.bind.call(this, container, $container);\n\n this.addOptions(this.convertToOptions(this._dataToConvert));\n };\n\n ArrayAdapter.prototype.select = function (data) {\n var $option = this.$element.find('option').filter(function (i, elm) {\n return elm.value == data.id.toString();\n });\n\n if ($option.length === 0) {\n $option = this.option(data);\n\n this.addOptions($option);\n }\n\n ArrayAdapter.__super__.select.call(this, data);\n };\n\n ArrayAdapter.prototype.convertToOptions = function (data) {\n var self = this;\n\n var $existing = this.$element.find('option');\n var existingIds = $existing.map(function () {\n return self.item($(this)).id;\n }).get();\n\n var $options = [];\n\n // Filter out all items except for the one passed in the argument\n function onlyItem (item) {\n return function () {\n return $(this).val() == item.id;\n };\n }\n\n for (var d = 0; d < data.length; d++) {\n var item = this._normalizeItem(data[d]);\n\n // Skip items which were pre-loaded, only merge the data\n if (existingIds.indexOf(item.id) >= 0) {\n var $existingOption = $existing.filter(onlyItem(item));\n\n var existingData = this.item($existingOption);\n var newData = $.extend(true, {}, item, existingData);\n\n var $newOption = this.option(newData);\n\n $existingOption.replaceWith($newOption);\n\n continue;\n }\n\n var $option = this.option(item);\n\n if (item.children) {\n var $children = this.convertToOptions(item.children);\n\n $option.append($children);\n }\n\n $options.push($option);\n }\n\n return $options;\n };\n\n return ArrayAdapter;\n});\n\nS2.define('select2/data/ajax',[\n './array',\n '../utils',\n 'jquery'\n], function (ArrayAdapter, Utils, $) {\n function AjaxAdapter ($element, options) {\n this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n\n if (this.ajaxOptions.processResults != null) {\n this.processResults = this.ajaxOptions.processResults;\n }\n\n AjaxAdapter.__super__.constructor.call(this, $element, options);\n }\n\n Utils.Extend(AjaxAdapter, ArrayAdapter);\n\n AjaxAdapter.prototype._applyDefaults = function (options) {\n var defaults = {\n data: function (params) {\n return $.extend({}, params, {\n q: params.term\n });\n },\n transport: function (params, success, failure) {\n var $request = $.ajax(params);\n\n $request.then(success);\n $request.fail(failure);\n\n return $request;\n }\n };\n\n return $.extend({}, defaults, options, true);\n };\n\n AjaxAdapter.prototype.processResults = function (results) {\n return results;\n };\n\n AjaxAdapter.prototype.query = function (params, callback) {\n var matches = [];\n var self = this;\n\n if (this._request != null) {\n // JSONP requests cannot always be aborted\n if (typeof this._request.abort === 'function') {\n this._request.abort();\n }\n\n this._request = null;\n }\n\n var options = $.extend({\n type: 'GET'\n }, this.ajaxOptions);\n\n if (typeof options.url === 'function') {\n options.url = options.url.call(this.$element, params);\n }\n\n if (typeof options.data === 'function') {\n options.data = options.data.call(this.$element, params);\n }\n\n function request () {\n var $request = options.transport(options, function (data) {\n var results = self.processResults(data, params);\n\n if (self.options.get('debug') && window.console && console.error) {\n // Check to make sure that the response included a `results` key.\n if (!results || !results.results || !Array.isArray(results.results)) {\n console.error(\n 'Select2: The AJAX results did not return an array in the ' +\n '`results` key of the response.'\n );\n }\n }\n\n callback(results);\n }, function () {\n // Attempt to detect if a request was aborted\n // Only works if the transport exposes a status property\n if ('status' in $request &&\n ($request.status === 0 || $request.status === '0')) {\n return;\n }\n\n self.trigger('results:message', {\n message: 'errorLoading'\n });\n });\n\n self._request = $request;\n }\n\n if (this.ajaxOptions.delay && params.term != null) {\n if (this._queryTimeout) {\n window.clearTimeout(this._queryTimeout);\n }\n\n this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n } else {\n request();\n }\n };\n\n return AjaxAdapter;\n});\n\nS2.define('select2/data/tags',[\n 'jquery'\n], function ($) {\n function Tags (decorated, $element, options) {\n var tags = options.get('tags');\n\n var createTag = options.get('createTag');\n\n if (createTag !== undefined) {\n this.createTag = createTag;\n }\n\n var insertTag = options.get('insertTag');\n\n if (insertTag !== undefined) {\n this.insertTag = insertTag;\n }\n\n decorated.call(this, $element, options);\n\n if (Array.isArray(tags)) {\n for (var t = 0; t < tags.length; t++) {\n var tag = tags[t];\n var item = this._normalizeItem(tag);\n\n var $option = this.option(item);\n\n this.$element.append($option);\n }\n }\n }\n\n Tags.prototype.query = function (decorated, params, callback) {\n var self = this;\n\n this._removeOldTags();\n\n if (params.term == null || params.page != null) {\n decorated.call(this, params, callback);\n return;\n }\n\n function wrapper (obj, child) {\n var data = obj.results;\n\n for (var i = 0; i < data.length; i++) {\n var option = data[i];\n\n var checkChildren = (\n option.children != null &&\n !wrapper({\n results: option.children\n }, true)\n );\n\n var optionText = (option.text || '').toUpperCase();\n var paramsTerm = (params.term || '').toUpperCase();\n\n var checkText = optionText === paramsTerm;\n\n if (checkText || checkChildren) {\n if (child) {\n return false;\n }\n\n obj.data = data;\n callback(obj);\n\n return;\n }\n }\n\n if (child) {\n return true;\n }\n\n var tag = self.createTag(params);\n\n if (tag != null) {\n var $option = self.option(tag);\n $option.attr('data-select2-tag', 'true');\n\n self.addOptions([$option]);\n\n self.insertTag(data, tag);\n }\n\n obj.results = data;\n\n callback(obj);\n }\n\n decorated.call(this, params, wrapper);\n };\n\n Tags.prototype.createTag = function (decorated, params) {\n if (params.term == null) {\n return null;\n }\n\n var term = params.term.trim();\n\n if (term === '') {\n return null;\n }\n\n return {\n id: term,\n text: term\n };\n };\n\n Tags.prototype.insertTag = function (_, data, tag) {\n data.unshift(tag);\n };\n\n Tags.prototype._removeOldTags = function (_) {\n var $options = this.$element.find('option[data-select2-tag]');\n\n $options.each(function () {\n if (this.selected) {\n return;\n }\n\n $(this).remove();\n });\n };\n\n return Tags;\n});\n\nS2.define('select2/data/tokenizer',[\n 'jquery'\n], function ($) {\n function Tokenizer (decorated, $element, options) {\n var tokenizer = options.get('tokenizer');\n\n if (tokenizer !== undefined) {\n this.tokenizer = tokenizer;\n }\n\n decorated.call(this, $element, options);\n }\n\n Tokenizer.prototype.bind = function (decorated, container, $container) {\n decorated.call(this, container, $container);\n\n this.$search = container.dropdown.$search || container.selection.$search ||\n $container.find('.select2-search__field');\n };\n\n Tokenizer.prototype.query = function (decorated, params, callback) {\n var self = this;\n\n function createAndSelect (data) {\n // Normalize the data object so we can use it for checks\n var item = self._normalizeItem(data);\n\n // Check if the data object already exists as a tag\n // Select it if it doesn't\n var $existingOptions = self.$element.find('option').filter(function () {\n return $(this).val() === item.id;\n });\n\n // If an existing option wasn't found for it, create the option\n if (!$existingOptions.length) {\n var $option = self.option(item);\n $option.attr('data-select2-tag', true);\n\n self._removeOldTags();\n self.addOptions([$option]);\n }\n\n // Select the item, now that we know there is an option for it\n select(item);\n }\n\n function select (data) {\n self.trigger('select', {\n data: data\n });\n }\n\n params.term = params.term || '';\n\n var tokenData = this.tokenizer(params, this.options, createAndSelect);\n\n if (tokenData.term !== params.term) {\n // Replace the search term if we have the search box\n if (this.$search.length) {\n this.$search.val(tokenData.term);\n this.$search.trigger('focus');\n }\n\n params.term = tokenData.term;\n }\n\n decorated.call(this, params, callback);\n };\n\n Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n var separators = options.get('tokenSeparators') || [];\n var term = params.term;\n var i = 0;\n\n var createTag = this.createTag || function (params) {\n return {\n id: params.term,\n text: params.term\n };\n };\n\n while (i < term.length) {\n var termChar = term[i];\n\n if (separators.indexOf(termChar) === -1) {\n i++;\n\n continue;\n }\n\n var part = term.substr(0, i);\n var partParams = $.extend({}, params, {\n term: part\n });\n\n var data = createTag(partParams);\n\n if (data == null) {\n i++;\n continue;\n }\n\n callback(data);\n\n // Reset the term to not include the tokenized portion\n term = term.substr(i + 1) || '';\n i = 0;\n }\n\n return {\n term: term\n };\n };\n\n return Tokenizer;\n});\n\nS2.define('select2/data/minimumInputLength',[\n\n], function () {\n function MinimumInputLength (decorated, $e, options) {\n this.minimumInputLength = options.get('minimumInputLength');\n\n decorated.call(this, $e, options);\n }\n\n MinimumInputLength.prototype.query = function (decorated, params, callback) {\n params.term = params.term || '';\n\n if (params.term.length < this.minimumInputLength) {\n this.trigger('results:message', {\n message: 'inputTooShort',\n args: {\n minimum: this.minimumInputLength,\n input: params.term,\n params: params\n }\n });\n\n return;\n }\n\n decorated.call(this, params, callback);\n };\n\n return MinimumInputLength;\n});\n\nS2.define('select2/data/maximumInputLength',[\n\n], function () {\n function MaximumInputLength (decorated, $e, options) {\n this.maximumInputLength = options.get('maximumInputLength');\n\n decorated.call(this, $e, options);\n }\n\n MaximumInputLength.prototype.query = function (decorated, params, callback) {\n params.term = params.term || '';\n\n if (this.maximumInputLength > 0 &&\n params.term.length > this.maximumInputLength) {\n this.trigger('results:message', {\n message: 'inputTooLong',\n args: {\n maximum: this.maximumInputLength,\n input: params.term,\n params: params\n }\n });\n\n return;\n }\n\n decorated.call(this, params, callback);\n };\n\n return MaximumInputLength;\n});\n\nS2.define('select2/data/maximumSelectionLength',[\n\n], function (){\n function MaximumSelectionLength (decorated, $e, options) {\n this.maximumSelectionLength = options.get('maximumSelectionLength');\n\n decorated.call(this, $e, options);\n }\n\n MaximumSelectionLength.prototype.bind =\n function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('select', function () {\n self._checkIfMaximumSelected();\n });\n };\n\n MaximumSelectionLength.prototype.query =\n function (decorated, params, callback) {\n var self = this;\n\n this._checkIfMaximumSelected(function () {\n decorated.call(self, params, callback);\n });\n };\n\n MaximumSelectionLength.prototype._checkIfMaximumSelected =\n function (_, successCallback) {\n var self = this;\n\n this.current(function (currentData) {\n var count = currentData != null ? currentData.length : 0;\n if (self.maximumSelectionLength > 0 &&\n count >= self.maximumSelectionLength) {\n self.trigger('results:message', {\n message: 'maximumSelected',\n args: {\n maximum: self.maximumSelectionLength\n }\n });\n return;\n }\n\n if (successCallback) {\n successCallback();\n }\n });\n };\n\n return MaximumSelectionLength;\n});\n\nS2.define('select2/dropdown',[\n 'jquery',\n './utils'\n], function ($, Utils) {\n function Dropdown ($element, options) {\n this.$element = $element;\n this.options = options;\n\n Dropdown.__super__.constructor.call(this);\n }\n\n Utils.Extend(Dropdown, Utils.Observable);\n\n Dropdown.prototype.render = function () {\n var $dropdown = $(\n '<span class=\"select2-dropdown\">' +\n '<span class=\"select2-results\"></span>' +\n '</span>'\n );\n\n $dropdown.attr('dir', this.options.get('dir'));\n\n this.$dropdown = $dropdown;\n\n return $dropdown;\n };\n\n Dropdown.prototype.bind = function () {\n // Should be implemented in subclasses\n };\n\n Dropdown.prototype.position = function ($dropdown, $container) {\n // Should be implemented in subclasses\n };\n\n Dropdown.prototype.destroy = function () {\n // Remove the dropdown from the DOM\n this.$dropdown.remove();\n };\n\n return Dropdown;\n});\n\nS2.define('select2/dropdown/search',[\n 'jquery'\n], function ($) {\n function Search () { }\n\n Search.prototype.render = function (decorated) {\n var $rendered = decorated.call(this);\n var searchLabel = this.options.get('translations').get('search');\n\n var $search = $(\n '<span class=\"select2-search select2-search--dropdown\">' +\n '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n ' autocorrect=\"off\" autocapitalize=\"none\"' +\n ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n '</span>'\n );\n\n this.$searchContainer = $search;\n this.$search = $search.find('input');\n\n this.$search.prop('autocomplete', this.options.get('autocomplete'));\n this.$search.attr('aria-label', searchLabel());\n\n $rendered.prepend($search);\n\n return $rendered;\n };\n\n Search.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n var resultsId = container.id + '-results';\n\n decorated.call(this, container, $container);\n\n this.$search.on('keydown', function (evt) {\n self.trigger('keypress', evt);\n\n self._keyUpPrevented = evt.isDefaultPrevented();\n });\n\n // Workaround for browsers which do not support the `input` event\n // This will prevent double-triggering of events for browsers which support\n // both the `keyup` and `input` events.\n this.$search.on('input', function (evt) {\n // Unbind the duplicated `keyup` event\n $(this).off('keyup');\n });\n\n this.$search.on('keyup input', function (evt) {\n self.handleSearch(evt);\n });\n\n container.on('open', function () {\n self.$search.attr('tabindex', 0);\n self.$search.attr('aria-controls', resultsId);\n\n self.$search.trigger('focus');\n\n window.setTimeout(function () {\n self.$search.trigger('focus');\n }, 0);\n });\n\n container.on('close', function () {\n self.$search.attr('tabindex', -1);\n self.$search.removeAttr('aria-controls');\n self.$search.removeAttr('aria-activedescendant');\n\n self.$search.val('');\n self.$search.trigger('blur');\n });\n\n container.on('focus', function () {\n if (!container.isOpen()) {\n self.$search.trigger('focus');\n }\n });\n\n container.on('results:all', function (params) {\n if (params.query.term == null || params.query.term === '') {\n var showSearch = self.showSearch(params);\n\n if (showSearch) {\n self.$searchContainer[0].classList.remove('select2-search--hide');\n } else {\n self.$searchContainer[0].classList.add('select2-search--hide');\n }\n }\n });\n\n container.on('results:focus', function (params) {\n if (params.data._resultId) {\n self.$search.attr('aria-activedescendant', params.data._resultId);\n } else {\n self.$search.removeAttr('aria-activedescendant');\n }\n });\n };\n\n Search.prototype.handleSearch = function (evt) {\n if (!this._keyUpPrevented) {\n var input = this.$search.val();\n\n this.trigger('query', {\n term: input\n });\n }\n\n this._keyUpPrevented = false;\n };\n\n Search.prototype.showSearch = function (_, params) {\n return true;\n };\n\n return Search;\n});\n\nS2.define('select2/dropdown/hidePlaceholder',[\n\n], function () {\n function HidePlaceholder (decorated, $element, options, dataAdapter) {\n this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n decorated.call(this, $element, options, dataAdapter);\n }\n\n HidePlaceholder.prototype.append = function (decorated, data) {\n data.results = this.removePlaceholder(data.results);\n\n decorated.call(this, data);\n };\n\n HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n if (typeof placeholder === 'string') {\n placeholder = {\n id: '',\n text: placeholder\n };\n }\n\n return placeholder;\n };\n\n HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n var modifiedData = data.slice(0);\n\n for (var d = data.length - 1; d >= 0; d--) {\n var item = data[d];\n\n if (this.placeholder.id === item.id) {\n modifiedData.splice(d, 1);\n }\n }\n\n return modifiedData;\n };\n\n return HidePlaceholder;\n});\n\nS2.define('select2/dropdown/infiniteScroll',[\n 'jquery'\n], function ($) {\n function InfiniteScroll (decorated, $element, options, dataAdapter) {\n this.lastParams = {};\n\n decorated.call(this, $element, options, dataAdapter);\n\n this.$loadingMore = this.createLoadingMore();\n this.loading = false;\n }\n\n InfiniteScroll.prototype.append = function (decorated, data) {\n this.$loadingMore.remove();\n this.loading = false;\n\n decorated.call(this, data);\n\n if (this.showLoadingMore(data)) {\n this.$results.append(this.$loadingMore);\n this.loadMoreIfNeeded();\n }\n };\n\n InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('query', function (params) {\n self.lastParams = params;\n self.loading = true;\n });\n\n container.on('query:append', function (params) {\n self.lastParams = params;\n self.loading = true;\n });\n\n this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));\n };\n\n InfiniteScroll.prototype.loadMoreIfNeeded = function () {\n var isLoadMoreVisible = $.contains(\n document.documentElement,\n this.$loadingMore[0]\n );\n\n if (this.loading || !isLoadMoreVisible) {\n return;\n }\n\n var currentOffset = this.$results.offset().top +\n this.$results.outerHeight(false);\n var loadingMoreOffset = this.$loadingMore.offset().top +\n this.$loadingMore.outerHeight(false);\n\n if (currentOffset + 50 >= loadingMoreOffset) {\n this.loadMore();\n }\n };\n\n InfiniteScroll.prototype.loadMore = function () {\n this.loading = true;\n\n var params = $.extend({}, {page: 1}, this.lastParams);\n\n params.page++;\n\n this.trigger('query:append', params);\n };\n\n InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n return data.pagination && data.pagination.more;\n };\n\n InfiniteScroll.prototype.createLoadingMore = function () {\n var $option = $(\n '<li ' +\n 'class=\"select2-results__option select2-results__option--load-more\"' +\n 'role=\"option\" aria-disabled=\"true\"></li>'\n );\n\n var message = this.options.get('translations').get('loadingMore');\n\n $option.html(message(this.lastParams));\n\n return $option;\n };\n\n return InfiniteScroll;\n});\n\nS2.define('select2/dropdown/attachBody',[\n 'jquery',\n '../utils'\n], function ($, Utils) {\n function AttachBody (decorated, $element, options) {\n this.$dropdownParent = $(options.get('dropdownParent') || document.body);\n\n decorated.call(this, $element, options);\n }\n\n AttachBody.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('open', function () {\n self._showDropdown();\n self._attachPositioningHandler(container);\n\n // Must bind after the results handlers to ensure correct sizing\n self._bindContainerResultHandlers(container);\n });\n\n container.on('close', function () {\n self._hideDropdown();\n self._detachPositioningHandler(container);\n });\n\n this.$dropdownContainer.on('mousedown', function (evt) {\n evt.stopPropagation();\n });\n };\n\n AttachBody.prototype.destroy = function (decorated) {\n decorated.call(this);\n\n this.$dropdownContainer.remove();\n };\n\n AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n // Clone all of the container classes\n $dropdown.attr('class', $container.attr('class'));\n\n $dropdown[0].classList.remove('select2');\n $dropdown[0].classList.add('select2-container--open');\n\n $dropdown.css({\n position: 'absolute',\n top: -999999\n });\n\n this.$container = $container;\n };\n\n AttachBody.prototype.render = function (decorated) {\n var $container = $('<span></span>');\n\n var $dropdown = decorated.call(this);\n $container.append($dropdown);\n\n this.$dropdownContainer = $container;\n\n return $container;\n };\n\n AttachBody.prototype._hideDropdown = function (decorated) {\n this.$dropdownContainer.detach();\n };\n\n AttachBody.prototype._bindContainerResultHandlers =\n function (decorated, container) {\n\n // These should only be bound once\n if (this._containerResultsHandlersBound) {\n return;\n }\n\n var self = this;\n\n container.on('results:all', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n container.on('results:append', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n container.on('results:message', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n container.on('select', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n container.on('unselect', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n this._containerResultsHandlersBound = true;\n };\n\n AttachBody.prototype._attachPositioningHandler =\n function (decorated, container) {\n var self = this;\n\n var scrollEvent = 'scroll.select2.' + container.id;\n var resizeEvent = 'resize.select2.' + container.id;\n var orientationEvent = 'orientationchange.select2.' + container.id;\n\n var $watchers = this.$container.parents().filter(Utils.hasScroll);\n $watchers.each(function () {\n Utils.StoreData(this, 'select2-scroll-position', {\n x: $(this).scrollLeft(),\n y: $(this).scrollTop()\n });\n });\n\n $watchers.on(scrollEvent, function (ev) {\n var position = Utils.GetData(this, 'select2-scroll-position');\n $(this).scrollTop(position.y);\n });\n\n $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,\n function (e) {\n self._positionDropdown();\n self._resizeDropdown();\n });\n };\n\n AttachBody.prototype._detachPositioningHandler =\n function (decorated, container) {\n var scrollEvent = 'scroll.select2.' + container.id;\n var resizeEvent = 'resize.select2.' + container.id;\n var orientationEvent = 'orientationchange.select2.' + container.id;\n\n var $watchers = this.$container.parents().filter(Utils.hasScroll);\n $watchers.off(scrollEvent);\n\n $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n };\n\n AttachBody.prototype._positionDropdown = function () {\n var $window = $(window);\n\n var isCurrentlyAbove = this.$dropdown[0].classList\n .contains('select2-dropdown--above');\n var isCurrentlyBelow = this.$dropdown[0].classList\n .contains('select2-dropdown--below');\n\n var newDirection = null;\n\n var offset = this.$container.offset();\n\n offset.bottom = offset.top + this.$container.outerHeight(false);\n\n var container = {\n height: this.$container.outerHeight(false)\n };\n\n container.top = offset.top;\n container.bottom = offset.top + container.height;\n\n var dropdown = {\n height: this.$dropdown.outerHeight(false)\n };\n\n var viewport = {\n top: $window.scrollTop(),\n bottom: $window.scrollTop() + $window.height()\n };\n\n var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\n var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\n\n var css = {\n left: offset.left,\n top: container.bottom\n };\n\n // Determine what the parent element is to use for calculating the offset\n var $offsetParent = this.$dropdownParent;\n\n // For statically positioned elements, we need to get the element\n // that is determining the offset\n if ($offsetParent.css('position') === 'static') {\n $offsetParent = $offsetParent.offsetParent();\n }\n\n var parentOffset = {\n top: 0,\n left: 0\n };\n\n if (\n $.contains(document.body, $offsetParent[0]) ||\n $offsetParent[0].isConnected\n ) {\n parentOffset = $offsetParent.offset();\n }\n\n css.top -= parentOffset.top;\n css.left -= parentOffset.left;\n\n if (!isCurrentlyAbove && !isCurrentlyBelow) {\n newDirection = 'below';\n }\n\n if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n newDirection = 'above';\n } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n newDirection = 'below';\n }\n\n if (newDirection == 'above' ||\n (isCurrentlyAbove && newDirection !== 'below')) {\n css.top = container.top - parentOffset.top - dropdown.height;\n }\n\n if (newDirection != null) {\n this.$dropdown[0].classList.remove('select2-dropdown--below');\n this.$dropdown[0].classList.remove('select2-dropdown--above');\n this.$dropdown[0].classList.add('select2-dropdown--' + newDirection);\n\n this.$container[0].classList.remove('select2-container--below');\n this.$container[0].classList.remove('select2-container--above');\n this.$container[0].classList.add('select2-container--' + newDirection);\n }\n\n this.$dropdownContainer.css(css);\n };\n\n AttachBody.prototype._resizeDropdown = function () {\n var css = {\n width: this.$container.outerWidth(false) + 'px'\n };\n\n if (this.options.get('dropdownAutoWidth')) {\n css.minWidth = css.width;\n css.position = 'relative';\n css.width = 'auto';\n }\n\n this.$dropdown.css(css);\n };\n\n AttachBody.prototype._showDropdown = function (decorated) {\n this.$dropdownContainer.appendTo(this.$dropdownParent);\n\n this._positionDropdown();\n this._resizeDropdown();\n };\n\n return AttachBody;\n});\n\nS2.define('select2/dropdown/minimumResultsForSearch',[\n\n], function () {\n function countResults (data) {\n var count = 0;\n\n for (var d = 0; d < data.length; d++) {\n var item = data[d];\n\n if (item.children) {\n count += countResults(item.children);\n } else {\n count++;\n }\n }\n\n return count;\n }\n\n function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {\n this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n\n if (this.minimumResultsForSearch < 0) {\n this.minimumResultsForSearch = Infinity;\n }\n\n decorated.call(this, $element, options, dataAdapter);\n }\n\n MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n if (countResults(params.data.results) < this.minimumResultsForSearch) {\n return false;\n }\n\n return decorated.call(this, params);\n };\n\n return MinimumResultsForSearch;\n});\n\nS2.define('select2/dropdown/selectOnClose',[\n '../utils'\n], function (Utils) {\n function SelectOnClose () { }\n\n SelectOnClose.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('close', function (params) {\n self._handleSelectOnClose(params);\n });\n };\n\n SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n if (params && params.originalSelect2Event != null) {\n var event = params.originalSelect2Event;\n\n // Don't select an item if the close event was triggered from a select or\n // unselect event\n if (event._type === 'select' || event._type === 'unselect') {\n return;\n }\n }\n\n var $highlightedResults = this.getHighlightedResults();\n\n // Only select highlighted results\n if ($highlightedResults.length < 1) {\n return;\n }\n\n var data = Utils.GetData($highlightedResults[0], 'data');\n\n // Don't re-select already selected resulte\n if (\n (data.element != null && data.element.selected) ||\n (data.element == null && data.selected)\n ) {\n return;\n }\n\n this.trigger('select', {\n data: data\n });\n };\n\n return SelectOnClose;\n});\n\nS2.define('select2/dropdown/closeOnSelect',[\n\n], function () {\n function CloseOnSelect () { }\n\n CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('select', function (evt) {\n self._selectTriggered(evt);\n });\n\n container.on('unselect', function (evt) {\n self._selectTriggered(evt);\n });\n };\n\n CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n var originalEvent = evt.originalEvent;\n\n // Don't close if the control key is being held\n if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {\n return;\n }\n\n this.trigger('close', {\n originalEvent: originalEvent,\n originalSelect2Event: evt\n });\n };\n\n return CloseOnSelect;\n});\n\nS2.define('select2/dropdown/dropdownCss',[\n '../utils'\n], function (Utils) {\n function DropdownCSS () { }\n\n DropdownCSS.prototype.render = function (decorated) {\n var $dropdown = decorated.call(this);\n\n var dropdownCssClass = this.options.get('dropdownCssClass') || '';\n\n if (dropdownCssClass.indexOf(':all:') !== -1) {\n dropdownCssClass = dropdownCssClass.replace(':all:', '');\n\n Utils.copyNonInternalCssClasses($dropdown[0], this.$element[0]);\n }\n\n $dropdown.addClass(dropdownCssClass);\n\n return $dropdown;\n };\n\n return DropdownCSS;\n});\n\nS2.define('select2/dropdown/tagsSearchHighlight',[\n '../utils'\n], function (Utils) {\n function TagsSearchHighlight () { }\n\n TagsSearchHighlight.prototype.highlightFirstItem = function (decorated) {\n var $options = this.$results\n .find(\n '.select2-results__option--selectable' +\n ':not(.select2-results__option--selected)'\n );\n\n if ($options.length > 0) {\n var $firstOption = $options.first();\n var data = Utils.GetData($firstOption[0], 'data');\n var firstElement = data.element;\n\n if (firstElement && firstElement.getAttribute) {\n if (firstElement.getAttribute('data-select2-tag') === 'true') {\n $firstOption.trigger('mouseenter');\n\n return;\n }\n }\n }\n\n decorated.call(this);\n };\n\n return TagsSearchHighlight;\n});\n\nS2.define('select2/i18n/en',[],function () {\n // English\n return {\n errorLoading: function () {\n return 'The results could not be loaded.';\n },\n inputTooLong: function (args) {\n var overChars = args.input.length - args.maximum;\n\n var message = 'Please delete ' + overChars + ' character';\n\n if (overChars != 1) {\n message += 's';\n }\n\n return message;\n },\n inputTooShort: function (args) {\n var remainingChars = args.minimum - args.input.length;\n\n var message = 'Please enter ' + remainingChars + ' or more characters';\n\n return message;\n },\n loadingMore: function () {\n return 'Loading more results…';\n },\n maximumSelected: function (args) {\n var message = 'You can only select ' + args.maximum + ' item';\n\n if (args.maximum != 1) {\n message += 's';\n }\n\n return message;\n },\n noResults: function () {\n return 'No results found';\n },\n searching: function () {\n return 'Searching…';\n },\n removeAllItems: function () {\n return 'Remove all items';\n },\n removeItem: function () {\n return 'Remove item';\n },\n search: function() {\n return 'Search';\n }\n };\n});\n\nS2.define('select2/defaults',[\n 'jquery',\n\n './results',\n\n './selection/single',\n './selection/multiple',\n './selection/placeholder',\n './selection/allowClear',\n './selection/search',\n './selection/selectionCss',\n './selection/eventRelay',\n\n './utils',\n './translation',\n './diacritics',\n\n './data/select',\n './data/array',\n './data/ajax',\n './data/tags',\n './data/tokenizer',\n './data/minimumInputLength',\n './data/maximumInputLength',\n './data/maximumSelectionLength',\n\n './dropdown',\n './dropdown/search',\n './dropdown/hidePlaceholder',\n './dropdown/infiniteScroll',\n './dropdown/attachBody',\n './dropdown/minimumResultsForSearch',\n './dropdown/selectOnClose',\n './dropdown/closeOnSelect',\n './dropdown/dropdownCss',\n './dropdown/tagsSearchHighlight',\n\n './i18n/en'\n], function ($,\n\n ResultsList,\n\n SingleSelection, MultipleSelection, Placeholder, AllowClear,\n SelectionSearch, SelectionCSS, EventRelay,\n\n Utils, Translation, DIACRITICS,\n\n SelectData, ArrayData, AjaxData, Tags, Tokenizer,\n MinimumInputLength, MaximumInputLength, MaximumSelectionLength,\n\n Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,\n AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,\n DropdownCSS, TagsSearchHighlight,\n\n EnglishTranslation) {\n function Defaults () {\n this.reset();\n }\n\n Defaults.prototype.apply = function (options) {\n options = $.extend(true, {}, this.defaults, options);\n\n if (options.dataAdapter == null) {\n if (options.ajax != null) {\n options.dataAdapter = AjaxData;\n } else if (options.data != null) {\n options.dataAdapter = ArrayData;\n } else {\n options.dataAdapter = SelectData;\n }\n\n if (options.minimumInputLength > 0) {\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n MinimumInputLength\n );\n }\n\n if (options.maximumInputLength > 0) {\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n MaximumInputLength\n );\n }\n\n if (options.maximumSelectionLength > 0) {\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n MaximumSelectionLength\n );\n }\n\n if (options.tags) {\n options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n }\n\n if (options.tokenSeparators != null || options.tokenizer != null) {\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n Tokenizer\n );\n }\n }\n\n if (options.resultsAdapter == null) {\n options.resultsAdapter = ResultsList;\n\n if (options.ajax != null) {\n options.resultsAdapter = Utils.Decorate(\n options.resultsAdapter,\n InfiniteScroll\n );\n }\n\n if (options.placeholder != null) {\n options.resultsAdapter = Utils.Decorate(\n options.resultsAdapter,\n HidePlaceholder\n );\n }\n\n if (options.selectOnClose) {\n options.resultsAdapter = Utils.Decorate(\n options.resultsAdapter,\n SelectOnClose\n );\n }\n\n if (options.tags) {\n options.resultsAdapter = Utils.Decorate(\n options.resultsAdapter,\n TagsSearchHighlight\n );\n }\n }\n\n if (options.dropdownAdapter == null) {\n if (options.multiple) {\n options.dropdownAdapter = Dropdown;\n } else {\n var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n\n options.dropdownAdapter = SearchableDropdown;\n }\n\n if (options.minimumResultsForSearch !== 0) {\n options.dropdownAdapter = Utils.Decorate(\n options.dropdownAdapter,\n MinimumResultsForSearch\n );\n }\n\n if (options.closeOnSelect) {\n options.dropdownAdapter = Utils.Decorate(\n options.dropdownAdapter,\n CloseOnSelect\n );\n }\n\n if (options.dropdownCssClass != null) {\n options.dropdownAdapter = Utils.Decorate(\n options.dropdownAdapter,\n DropdownCSS\n );\n }\n\n options.dropdownAdapter = Utils.Decorate(\n options.dropdownAdapter,\n AttachBody\n );\n }\n\n if (options.selectionAdapter == null) {\n if (options.multiple) {\n options.selectionAdapter = MultipleSelection;\n } else {\n options.selectionAdapter = SingleSelection;\n }\n\n // Add the placeholder mixin if a placeholder was specified\n if (options.placeholder != null) {\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n Placeholder\n );\n }\n\n if (options.allowClear) {\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n AllowClear\n );\n }\n\n if (options.multiple) {\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n SelectionSearch\n );\n }\n\n if (options.selectionCssClass != null) {\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n SelectionCSS\n );\n }\n\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n EventRelay\n );\n }\n\n // If the defaults were not previously applied from an element, it is\n // possible for the language option to have not been resolved\n options.language = this._resolveLanguage(options.language);\n\n // Always fall back to English since it will always be complete\n options.language.push('en');\n\n var uniqueLanguages = [];\n\n for (var l = 0; l < options.language.length; l++) {\n var language = options.language[l];\n\n if (uniqueLanguages.indexOf(language) === -1) {\n uniqueLanguages.push(language);\n }\n }\n\n options.language = uniqueLanguages;\n\n options.translations = this._processTranslations(\n options.language,\n options.debug\n );\n\n return options;\n };\n\n Defaults.prototype.reset = function () {\n function stripDiacritics (text) {\n // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n function match(a) {\n return DIACRITICS[a] || a;\n }\n\n return text.replace(/[^\\u0000-\\u007E]/g, match);\n }\n\n function matcher (params, data) {\n // Always return the object if there is nothing to compare\n if (params.term == null || params.term.trim() === '') {\n return data;\n }\n\n // Do a recursive check for options with children\n if (data.children && data.children.length > 0) {\n // Clone the data object if there are children\n // This is required as we modify the object to remove any non-matches\n var match = $.extend(true, {}, data);\n\n // Check each child of the option\n for (var c = data.children.length - 1; c >= 0; c--) {\n var child = data.children[c];\n\n var matches = matcher(params, child);\n\n // If there wasn't a match, remove the object in the array\n if (matches == null) {\n match.children.splice(c, 1);\n }\n }\n\n // If any children matched, return the new object\n if (match.children.length > 0) {\n return match;\n }\n\n // If there were no matching children, check just the plain object\n return matcher(params, match);\n }\n\n var original = stripDiacritics(data.text).toUpperCase();\n var term = stripDiacritics(params.term).toUpperCase();\n\n // Check if the text contains the term\n if (original.indexOf(term) > -1) {\n return data;\n }\n\n // If it doesn't contain the term, don't return anything\n return null;\n }\n\n this.defaults = {\n amdLanguageBase: './i18n/',\n autocomplete: 'off',\n closeOnSelect: true,\n debug: false,\n dropdownAutoWidth: false,\n escapeMarkup: Utils.escapeMarkup,\n language: {},\n matcher: matcher,\n minimumInputLength: 0,\n maximumInputLength: 0,\n maximumSelectionLength: 0,\n minimumResultsForSearch: 0,\n selectOnClose: false,\n scrollAfterSelect: false,\n sorter: function (data) {\n return data;\n },\n templateResult: function (result) {\n return result.text;\n },\n templateSelection: function (selection) {\n return selection.text;\n },\n theme: 'default',\n width: 'resolve'\n };\n };\n\n Defaults.prototype.applyFromElement = function (options, $element) {\n var optionLanguage = options.language;\n var defaultLanguage = this.defaults.language;\n var elementLanguage = $element.prop('lang');\n var parentLanguage = $element.closest('[lang]').prop('lang');\n\n var languages = Array.prototype.concat.call(\n this._resolveLanguage(elementLanguage),\n this._resolveLanguage(optionLanguage),\n this._resolveLanguage(defaultLanguage),\n this._resolveLanguage(parentLanguage)\n );\n\n options.language = languages;\n\n return options;\n };\n\n Defaults.prototype._resolveLanguage = function (language) {\n if (!language) {\n return [];\n }\n\n if ($.isEmptyObject(language)) {\n return [];\n }\n\n if ($.isPlainObject(language)) {\n return [language];\n }\n\n var languages;\n\n if (!Array.isArray(language)) {\n languages = [language];\n } else {\n languages = language;\n }\n\n var resolvedLanguages = [];\n\n for (var l = 0; l < languages.length; l++) {\n resolvedLanguages.push(languages[l]);\n\n if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {\n // Extract the region information if it is included\n var languageParts = languages[l].split('-');\n var baseLanguage = languageParts[0];\n\n resolvedLanguages.push(baseLanguage);\n }\n }\n\n return resolvedLanguages;\n };\n\n Defaults.prototype._processTranslations = function (languages, debug) {\n var translations = new Translation();\n\n for (var l = 0; l < languages.length; l++) {\n var languageData = new Translation();\n\n var language = languages[l];\n\n if (typeof language === 'string') {\n try {\n // Try to load it with the original name\n languageData = Translation.loadPath(language);\n } catch (e) {\n try {\n // If we couldn't load it, check if it wasn't the full path\n language = this.defaults.amdLanguageBase + language;\n languageData = Translation.loadPath(language);\n } catch (ex) {\n // The translation could not be loaded at all. Sometimes this is\n // because of a configuration problem, other times this can be\n // because of how Select2 helps load all possible translation files\n if (debug && window.console && console.warn) {\n console.warn(\n 'Select2: The language file for \"' + language + '\" could ' +\n 'not be automatically loaded. A fallback will be used instead.'\n );\n }\n }\n }\n } else if ($.isPlainObject(language)) {\n languageData = new Translation(language);\n } else {\n languageData = language;\n }\n\n translations.extend(languageData);\n }\n\n return translations;\n };\n\n Defaults.prototype.set = function (key, value) {\n var camelKey = $.camelCase(key);\n\n var data = {};\n data[camelKey] = value;\n\n var convertedData = Utils._convertData(data);\n\n $.extend(true, this.defaults, convertedData);\n };\n\n var defaults = new Defaults();\n\n return defaults;\n});\n\nS2.define('select2/options',[\n 'jquery',\n './defaults',\n './utils'\n], function ($, Defaults, Utils) {\n function Options (options, $element) {\n this.options = options;\n\n if ($element != null) {\n this.fromElement($element);\n }\n\n if ($element != null) {\n this.options = Defaults.applyFromElement(this.options, $element);\n }\n\n this.options = Defaults.apply(this.options);\n }\n\n Options.prototype.fromElement = function ($e) {\n var excludedData = ['select2'];\n\n if (this.options.multiple == null) {\n this.options.multiple = $e.prop('multiple');\n }\n\n if (this.options.disabled == null) {\n this.options.disabled = $e.prop('disabled');\n }\n\n if (this.options.autocomplete == null && $e.prop('autocomplete')) {\n this.options.autocomplete = $e.prop('autocomplete');\n }\n\n if (this.options.dir == null) {\n if ($e.prop('dir')) {\n this.options.dir = $e.prop('dir');\n } else if ($e.closest('[dir]').prop('dir')) {\n this.options.dir = $e.closest('[dir]').prop('dir');\n } else {\n this.options.dir = 'ltr';\n }\n }\n\n $e.prop('disabled', this.options.disabled);\n $e.prop('multiple', this.options.multiple);\n\n if (Utils.GetData($e[0], 'select2Tags')) {\n if (this.options.debug && window.console && console.warn) {\n console.warn(\n 'Select2: The `data-select2-tags` attribute has been changed to ' +\n 'use the `data-data` and `data-tags=\"true\"` attributes and will be ' +\n 'removed in future versions of Select2.'\n );\n }\n\n Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));\n Utils.StoreData($e[0], 'tags', true);\n }\n\n if (Utils.GetData($e[0], 'ajaxUrl')) {\n if (this.options.debug && window.console && console.warn) {\n console.warn(\n 'Select2: The `data-ajax-url` attribute has been changed to ' +\n '`data-ajax--url` and support for the old attribute will be removed' +\n ' in future versions of Select2.'\n );\n }\n\n $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));\n Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));\n }\n\n var dataset = {};\n\n function upperCaseLetter(_, letter) {\n return letter.toUpperCase();\n }\n\n // Pre-load all of the attributes which are prefixed with `data-`\n for (var attr = 0; attr < $e[0].attributes.length; attr++) {\n var attributeName = $e[0].attributes[attr].name;\n var prefix = 'data-';\n\n if (attributeName.substr(0, prefix.length) == prefix) {\n // Get the contents of the attribute after `data-`\n var dataName = attributeName.substring(prefix.length);\n\n // Get the data contents from the consistent source\n // This is more than likely the jQuery data helper\n var dataValue = Utils.GetData($e[0], dataName);\n\n // camelCase the attribute name to match the spec\n var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);\n\n // Store the data attribute contents into the dataset since\n dataset[camelDataName] = dataValue;\n }\n }\n\n // Prefer the element's `dataset` attribute if it exists\n // jQuery 1.x does not correctly handle data attributes with multiple dashes\n if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n dataset = $.extend(true, {}, $e[0].dataset, dataset);\n }\n\n // Prefer our internal data cache if it exists\n var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);\n\n data = Utils._convertData(data);\n\n for (var key in data) {\n if (excludedData.indexOf(key) > -1) {\n continue;\n }\n\n if ($.isPlainObject(this.options[key])) {\n $.extend(this.options[key], data[key]);\n } else {\n this.options[key] = data[key];\n }\n }\n\n return this;\n };\n\n Options.prototype.get = function (key) {\n return this.options[key];\n };\n\n Options.prototype.set = function (key, val) {\n this.options[key] = val;\n };\n\n return Options;\n});\n\nS2.define('select2/core',[\n 'jquery',\n './options',\n './utils',\n './keys'\n], function ($, Options, Utils, KEYS) {\n var Select2 = function ($element, options) {\n if (Utils.GetData($element[0], 'select2') != null) {\n Utils.GetData($element[0], 'select2').destroy();\n }\n\n this.$element = $element;\n\n this.id = this._generateId($element);\n\n options = options || {};\n\n this.options = new Options(options, $element);\n\n Select2.__super__.constructor.call(this);\n\n // Set up the tabindex\n\n var tabindex = $element.attr('tabindex') || 0;\n Utils.StoreData($element[0], 'old-tabindex', tabindex);\n $element.attr('tabindex', '-1');\n\n // Set up containers and adapters\n\n var DataAdapter = this.options.get('dataAdapter');\n this.dataAdapter = new DataAdapter($element, this.options);\n\n var $container = this.render();\n\n this._placeContainer($container);\n\n var SelectionAdapter = this.options.get('selectionAdapter');\n this.selection = new SelectionAdapter($element, this.options);\n this.$selection = this.selection.render();\n\n this.selection.position(this.$selection, $container);\n\n var DropdownAdapter = this.options.get('dropdownAdapter');\n this.dropdown = new DropdownAdapter($element, this.options);\n this.$dropdown = this.dropdown.render();\n\n this.dropdown.position(this.$dropdown, $container);\n\n var ResultsAdapter = this.options.get('resultsAdapter');\n this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n this.$results = this.results.render();\n\n this.results.position(this.$results, this.$dropdown);\n\n // Bind events\n\n var self = this;\n\n // Bind the container to all of the adapters\n this._bindAdapters();\n\n // Register any DOM event handlers\n this._registerDomEvents();\n\n // Register any internal event handlers\n this._registerDataEvents();\n this._registerSelectionEvents();\n this._registerDropdownEvents();\n this._registerResultsEvents();\n this._registerEvents();\n\n // Set the initial state\n this.dataAdapter.current(function (initialData) {\n self.trigger('selection:update', {\n data: initialData\n });\n });\n\n // Hide the original select\n $element[0].classList.add('select2-hidden-accessible');\n $element.attr('aria-hidden', 'true');\n\n // Synchronize any monitored attributes\n this._syncAttributes();\n\n Utils.StoreData($element[0], 'select2', this);\n\n // Ensure backwards compatibility with $element.data('select2').\n $element.data('select2', this);\n };\n\n Utils.Extend(Select2, Utils.Observable);\n\n Select2.prototype._generateId = function ($element) {\n var id = '';\n\n if ($element.attr('id') != null) {\n id = $element.attr('id');\n } else if ($element.attr('name') != null) {\n id = $element.attr('name') + '-' + Utils.generateChars(2);\n } else {\n id = Utils.generateChars(4);\n }\n\n id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n id = 'select2-' + id;\n\n return id;\n };\n\n Select2.prototype._placeContainer = function ($container) {\n $container.insertAfter(this.$element);\n\n var width = this._resolveWidth(this.$element, this.options.get('width'));\n\n if (width != null) {\n $container.css('width', width);\n }\n };\n\n Select2.prototype._resolveWidth = function ($element, method) {\n var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n\n if (method == 'resolve') {\n var styleWidth = this._resolveWidth($element, 'style');\n\n if (styleWidth != null) {\n return styleWidth;\n }\n\n return this._resolveWidth($element, 'element');\n }\n\n if (method == 'element') {\n var elementWidth = $element.outerWidth(false);\n\n if (elementWidth <= 0) {\n return 'auto';\n }\n\n return elementWidth + 'px';\n }\n\n if (method == 'style') {\n var style = $element.attr('style');\n\n if (typeof(style) !== 'string') {\n return null;\n }\n\n var attrs = style.split(';');\n\n for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n var attr = attrs[i].replace(/\\s/g, '');\n var matches = attr.match(WIDTH);\n\n if (matches !== null && matches.length >= 1) {\n return matches[1];\n }\n }\n\n return null;\n }\n\n if (method == 'computedstyle') {\n var computedStyle = window.getComputedStyle($element[0]);\n\n return computedStyle.width;\n }\n\n return method;\n };\n\n Select2.prototype._bindAdapters = function () {\n this.dataAdapter.bind(this, this.$container);\n this.selection.bind(this, this.$container);\n\n this.dropdown.bind(this, this.$container);\n this.results.bind(this, this.$container);\n };\n\n Select2.prototype._registerDomEvents = function () {\n var self = this;\n\n this.$element.on('change.select2', function () {\n self.dataAdapter.current(function (data) {\n self.trigger('selection:update', {\n data: data\n });\n });\n });\n\n this.$element.on('focus.select2', function (evt) {\n self.trigger('focus', evt);\n });\n\n this._syncA = Utils.bind(this._syncAttributes, this);\n this._syncS = Utils.bind(this._syncSubtree, this);\n\n this._observer = new window.MutationObserver(function (mutations) {\n self._syncA();\n self._syncS(mutations);\n });\n this._observer.observe(this.$element[0], {\n attributes: true,\n childList: true,\n subtree: false\n });\n };\n\n Select2.prototype._registerDataEvents = function () {\n var self = this;\n\n this.dataAdapter.on('*', function (name, params) {\n self.trigger(name, params);\n });\n };\n\n Select2.prototype._registerSelectionEvents = function () {\n var self = this;\n var nonRelayEvents = ['toggle', 'focus'];\n\n this.selection.on('toggle', function () {\n self.toggleDropdown();\n });\n\n this.selection.on('focus', function (params) {\n self.focus(params);\n });\n\n this.selection.on('*', function (name, params) {\n if (nonRelayEvents.indexOf(name) !== -1) {\n return;\n }\n\n self.trigger(name, params);\n });\n };\n\n Select2.prototype._registerDropdownEvents = function () {\n var self = this;\n\n this.dropdown.on('*', function (name, params) {\n self.trigger(name, params);\n });\n };\n\n Select2.prototype._registerResultsEvents = function () {\n var self = this;\n\n this.results.on('*', function (name, params) {\n self.trigger(name, params);\n });\n };\n\n Select2.prototype._registerEvents = function () {\n var self = this;\n\n this.on('open', function () {\n self.$container[0].classList.add('select2-container--open');\n });\n\n this.on('close', function () {\n self.$container[0].classList.remove('select2-container--open');\n });\n\n this.on('enable', function () {\n self.$container[0].classList.remove('select2-container--disabled');\n });\n\n this.on('disable', function () {\n self.$container[0].classList.add('select2-container--disabled');\n });\n\n this.on('blur', function () {\n self.$container[0].classList.remove('select2-container--focus');\n });\n\n this.on('query', function (params) {\n if (!self.isOpen()) {\n self.trigger('open', {});\n }\n\n this.dataAdapter.query(params, function (data) {\n self.trigger('results:all', {\n data: data,\n query: params\n });\n });\n });\n\n this.on('query:append', function (params) {\n this.dataAdapter.query(params, function (data) {\n self.trigger('results:append', {\n data: data,\n query: params\n });\n });\n });\n\n this.on('keypress', function (evt) {\n var key = evt.which;\n\n if (self.isOpen()) {\n if (key === KEYS.ESC || (key === KEYS.UP && evt.altKey)) {\n self.close(evt);\n\n evt.preventDefault();\n } else if (key === KEYS.ENTER || key === KEYS.TAB) {\n self.trigger('results:select', {});\n\n evt.preventDefault();\n } else if ((key === KEYS.SPACE && evt.ctrlKey)) {\n self.trigger('results:toggle', {});\n\n evt.preventDefault();\n } else if (key === KEYS.UP) {\n self.trigger('results:previous', {});\n\n evt.preventDefault();\n } else if (key === KEYS.DOWN) {\n self.trigger('results:next', {});\n\n evt.preventDefault();\n }\n } else {\n if (key === KEYS.ENTER || key === KEYS.SPACE ||\n (key === KEYS.DOWN && evt.altKey)) {\n self.open();\n\n evt.preventDefault();\n }\n }\n });\n };\n\n Select2.prototype._syncAttributes = function () {\n this.options.set('disabled', this.$element.prop('disabled'));\n\n if (this.isDisabled()) {\n if (this.isOpen()) {\n this.close();\n }\n\n this.trigger('disable', {});\n } else {\n this.trigger('enable', {});\n }\n };\n\n Select2.prototype._isChangeMutation = function (mutations) {\n var self = this;\n\n if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n for (var n = 0; n < mutations.addedNodes.length; n++) {\n var node = mutations.addedNodes[n];\n\n if (node.selected) {\n return true;\n }\n }\n } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n return true;\n } else if (Array.isArray(mutations)) {\n return mutations.some(function (mutation) {\n return self._isChangeMutation(mutation);\n });\n }\n\n return false;\n };\n\n Select2.prototype._syncSubtree = function (mutations) {\n var changed = this._isChangeMutation(mutations);\n var self = this;\n\n // Only re-pull the data if we think there is a change\n if (changed) {\n this.dataAdapter.current(function (currentData) {\n self.trigger('selection:update', {\n data: currentData\n });\n });\n }\n };\n\n /**\n * Override the trigger method to automatically trigger pre-events when\n * there are events that can be prevented.\n */\n Select2.prototype.trigger = function (name, args) {\n var actualTrigger = Select2.__super__.trigger;\n var preTriggerMap = {\n 'open': 'opening',\n 'close': 'closing',\n 'select': 'selecting',\n 'unselect': 'unselecting',\n 'clear': 'clearing'\n };\n\n if (args === undefined) {\n args = {};\n }\n\n if (name in preTriggerMap) {\n var preTriggerName = preTriggerMap[name];\n var preTriggerArgs = {\n prevented: false,\n name: name,\n args: args\n };\n\n actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n if (preTriggerArgs.prevented) {\n args.prevented = true;\n\n return;\n }\n }\n\n actualTrigger.call(this, name, args);\n };\n\n Select2.prototype.toggleDropdown = function () {\n if (this.isDisabled()) {\n return;\n }\n\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n };\n\n Select2.prototype.open = function () {\n if (this.isOpen()) {\n return;\n }\n\n if (this.isDisabled()) {\n return;\n }\n\n this.trigger('query', {});\n };\n\n Select2.prototype.close = function (evt) {\n if (!this.isOpen()) {\n return;\n }\n\n this.trigger('close', { originalEvent : evt });\n };\n\n /**\n * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n * object.\n *\n * @return {true} if the instance is not disabled.\n * @return {false} if the instance is disabled.\n */\n Select2.prototype.isEnabled = function () {\n return !this.isDisabled();\n };\n\n /**\n * Helper method to abstract the \"disabled\" state of this object.\n *\n * @return {true} if the disabled option is true.\n * @return {false} if the disabled option is false.\n */\n Select2.prototype.isDisabled = function () {\n return this.options.get('disabled');\n };\n\n Select2.prototype.isOpen = function () {\n return this.$container[0].classList.contains('select2-container--open');\n };\n\n Select2.prototype.hasFocus = function () {\n return this.$container[0].classList.contains('select2-container--focus');\n };\n\n Select2.prototype.focus = function (data) {\n // No need to re-trigger focus events if we are already focused\n if (this.hasFocus()) {\n return;\n }\n\n this.$container[0].classList.add('select2-container--focus');\n this.trigger('focus', {});\n };\n\n Select2.prototype.enable = function (args) {\n if (this.options.get('debug') && window.console && console.warn) {\n console.warn(\n 'Select2: The `select2(\"enable\")` method has been deprecated and will' +\n ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' +\n ' instead.'\n );\n }\n\n if (args == null || args.length === 0) {\n args = [true];\n }\n\n var disabled = !args[0];\n\n this.$element.prop('disabled', disabled);\n };\n\n Select2.prototype.data = function () {\n if (this.options.get('debug') &&\n arguments.length > 0 && window.console && console.warn) {\n console.warn(\n 'Select2: Data can no longer be set using `select2(\"data\")`. You ' +\n 'should consider setting the value instead using `$element.val()`.'\n );\n }\n\n var data = [];\n\n this.dataAdapter.current(function (currentData) {\n data = currentData;\n });\n\n return data;\n };\n\n Select2.prototype.val = function (args) {\n if (this.options.get('debug') && window.console && console.warn) {\n console.warn(\n 'Select2: The `select2(\"val\")` method has been deprecated and will be' +\n ' removed in later Select2 versions. Use $element.val() instead.'\n );\n }\n\n if (args == null || args.length === 0) {\n return this.$element.val();\n }\n\n var newVal = args[0];\n\n if (Array.isArray(newVal)) {\n newVal = newVal.map(function (obj) {\n return obj.toString();\n });\n }\n\n this.$element.val(newVal).trigger('input').trigger('change');\n };\n\n Select2.prototype.destroy = function () {\n Utils.RemoveData(this.$container[0]);\n this.$container.remove();\n\n this._observer.disconnect();\n this._observer = null;\n\n this._syncA = null;\n this._syncS = null;\n\n this.$element.off('.select2');\n this.$element.attr('tabindex',\n Utils.GetData(this.$element[0], 'old-tabindex'));\n\n this.$element[0].classList.remove('select2-hidden-accessible');\n this.$element.attr('aria-hidden', 'false');\n Utils.RemoveData(this.$element[0]);\n this.$element.removeData('select2');\n\n this.dataAdapter.destroy();\n this.selection.destroy();\n this.dropdown.destroy();\n this.results.destroy();\n\n this.dataAdapter = null;\n this.selection = null;\n this.dropdown = null;\n this.results = null;\n };\n\n Select2.prototype.render = function () {\n var $container = $(\n '<span class=\"select2 select2-container\">' +\n '<span class=\"selection\"></span>' +\n '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' +\n '</span>'\n );\n\n $container.attr('dir', this.options.get('dir'));\n\n this.$container = $container;\n\n this.$container[0].classList\n .add('select2-container--' + this.options.get('theme'));\n\n Utils.StoreData($container[0], 'element', this.$element);\n\n return $container;\n };\n\n return Select2;\n});\n\nS2.define('jquery-mousewheel',[\n 'jquery'\n], function ($) {\n // Used to shim jQuery.mousewheel for non-full builds.\n return $;\n});\n\nS2.define('jquery.select2',[\n 'jquery',\n 'jquery-mousewheel',\n\n './select2/core',\n './select2/defaults',\n './select2/utils'\n], function ($, _, Select2, Defaults, Utils) {\n if ($.fn.select2 == null) {\n // All methods that should return the element\n var thisMethods = ['open', 'close', 'destroy'];\n\n $.fn.select2 = function (options) {\n options = options || {};\n\n if (typeof options === 'object') {\n this.each(function () {\n var instanceOptions = $.extend(true, {}, options);\n\n var instance = new Select2($(this), instanceOptions);\n });\n\n return this;\n } else if (typeof options === 'string') {\n var ret;\n var args = Array.prototype.slice.call(arguments, 1);\n\n this.each(function () {\n var instance = Utils.GetData(this, 'select2');\n\n if (instance == null && window.console && console.error) {\n console.error(\n 'The select2(\\'' + options + '\\') method was called on an ' +\n 'element that is not using Select2.'\n );\n }\n\n ret = instance[options].apply(instance, args);\n });\n\n // Check if we should be returning `this`\n if (thisMethods.indexOf(options) > -1) {\n return this;\n }\n\n return ret;\n } else {\n throw new Error('Invalid arguments for Select2: ' + options);\n }\n };\n }\n\n if ($.fn.select2.defaults == null) {\n $.fn.select2.defaults = Defaults;\n }\n\n return Select2;\n});\n\n // Return the AMD loader configuration so it can be used outside of this file\n return {\n define: S2.define,\n require: S2.require\n };\n}());\n\n // Autoload the jQuery bindings\n // We know that all of the modules exist above this, so we're safe\n var select2 = S2.require('jquery.select2');\n\n // Hold the AMD module references on the jQuery function that was just loaded\n // This allows Select2 to use the internal loader outside of this file, such\n // as in the language files.\n jQuery.fn.select2.amd = S2;\n\n // Return the Select2 instance for anyone who is importing it.\n return select2;\n}));\n","var adapters = {\n logger: typeof console !== \"undefined\" ? console : undefined,\n WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined\n};\n\nvar logger = {\n log(...messages) {\n if (this.enabled) {\n messages.push(Date.now());\n adapters.logger.log(\"[ActionCable]\", ...messages);\n }\n }\n};\n\nconst now = () => (new Date).getTime();\n\nconst secondsSince = time => (now() - time) / 1e3;\n\nclass ConnectionMonitor {\n constructor(connection) {\n this.visibilityDidChange = this.visibilityDidChange.bind(this);\n this.connection = connection;\n this.reconnectAttempts = 0;\n }\n start() {\n if (!this.isRunning()) {\n this.startedAt = now();\n delete this.stoppedAt;\n this.startPolling();\n addEventListener(\"visibilitychange\", this.visibilityDidChange);\n logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`);\n }\n }\n stop() {\n if (this.isRunning()) {\n this.stoppedAt = now();\n this.stopPolling();\n removeEventListener(\"visibilitychange\", this.visibilityDidChange);\n logger.log(\"ConnectionMonitor stopped\");\n }\n }\n isRunning() {\n return this.startedAt && !this.stoppedAt;\n }\n recordMessage() {\n this.pingedAt = now();\n }\n recordConnect() {\n this.reconnectAttempts = 0;\n delete this.disconnectedAt;\n logger.log(\"ConnectionMonitor recorded connect\");\n }\n recordDisconnect() {\n this.disconnectedAt = now();\n logger.log(\"ConnectionMonitor recorded disconnect\");\n }\n startPolling() {\n this.stopPolling();\n this.poll();\n }\n stopPolling() {\n clearTimeout(this.pollTimeout);\n }\n poll() {\n this.pollTimeout = setTimeout((() => {\n this.reconnectIfStale();\n this.poll();\n }), this.getPollInterval());\n }\n getPollInterval() {\n const {staleThreshold: staleThreshold, reconnectionBackoffRate: reconnectionBackoffRate} = this.constructor;\n const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10));\n const jitterMax = this.reconnectAttempts === 0 ? 1 : reconnectionBackoffRate;\n const jitter = jitterMax * Math.random();\n return staleThreshold * 1e3 * backoff * (1 + jitter);\n }\n reconnectIfStale() {\n if (this.connectionIsStale()) {\n logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`);\n this.reconnectAttempts++;\n if (this.disconnectedRecently()) {\n logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`);\n } else {\n logger.log(\"ConnectionMonitor reopening\");\n this.connection.reopen();\n }\n }\n }\n get refreshedAt() {\n return this.pingedAt ? this.pingedAt : this.startedAt;\n }\n connectionIsStale() {\n return secondsSince(this.refreshedAt) > this.constructor.staleThreshold;\n }\n disconnectedRecently() {\n return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;\n }\n visibilityDidChange() {\n if (document.visibilityState === \"visible\") {\n setTimeout((() => {\n if (this.connectionIsStale() || !this.connection.isOpen()) {\n logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`);\n this.connection.reopen();\n }\n }), 200);\n }\n }\n}\n\nConnectionMonitor.staleThreshold = 6;\n\nConnectionMonitor.reconnectionBackoffRate = .15;\n\nvar INTERNAL = {\n message_types: {\n welcome: \"welcome\",\n disconnect: \"disconnect\",\n ping: \"ping\",\n confirmation: \"confirm_subscription\",\n rejection: \"reject_subscription\"\n },\n disconnect_reasons: {\n unauthorized: \"unauthorized\",\n invalid_request: \"invalid_request\",\n server_restart: \"server_restart\",\n remote: \"remote\"\n },\n default_mount_path: \"/cable\",\n protocols: [ \"actioncable-v1-json\", \"actioncable-unsupported\" ]\n};\n\nconst {message_types: message_types, protocols: protocols} = INTERNAL;\n\nconst supportedProtocols = protocols.slice(0, protocols.length - 1);\n\nconst indexOf = [].indexOf;\n\nclass Connection {\n constructor(consumer) {\n this.open = this.open.bind(this);\n this.consumer = consumer;\n this.subscriptions = this.consumer.subscriptions;\n this.monitor = new ConnectionMonitor(this);\n this.disconnected = true;\n }\n send(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data));\n return true;\n } else {\n return false;\n }\n }\n open() {\n if (this.isActive()) {\n logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`);\n return false;\n } else {\n const socketProtocols = [ ...protocols, ...this.consumer.subprotocols || [] ];\n logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`);\n if (this.webSocket) {\n this.uninstallEventHandlers();\n }\n this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols);\n this.installEventHandlers();\n this.monitor.start();\n return true;\n }\n }\n close({allowReconnect: allowReconnect} = {\n allowReconnect: true\n }) {\n if (!allowReconnect) {\n this.monitor.stop();\n }\n if (this.isOpen()) {\n return this.webSocket.close();\n }\n }\n reopen() {\n logger.log(`Reopening WebSocket, current state is ${this.getState()}`);\n if (this.isActive()) {\n try {\n return this.close();\n } catch (error) {\n logger.log(\"Failed to reopen WebSocket\", error);\n } finally {\n logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`);\n setTimeout(this.open, this.constructor.reopenDelay);\n }\n } else {\n return this.open();\n }\n }\n getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol;\n }\n }\n isOpen() {\n return this.isState(\"open\");\n }\n isActive() {\n return this.isState(\"open\", \"connecting\");\n }\n triedToReconnect() {\n return this.monitor.reconnectAttempts > 0;\n }\n isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0;\n }\n isState(...states) {\n return indexOf.call(states, this.getState()) >= 0;\n }\n getState() {\n if (this.webSocket) {\n for (let state in adapters.WebSocket) {\n if (adapters.WebSocket[state] === this.webSocket.readyState) {\n return state.toLowerCase();\n }\n }\n }\n return null;\n }\n installEventHandlers() {\n for (let eventName in this.events) {\n const handler = this.events[eventName].bind(this);\n this.webSocket[`on${eventName}`] = handler;\n }\n }\n uninstallEventHandlers() {\n for (let eventName in this.events) {\n this.webSocket[`on${eventName}`] = function() {};\n }\n }\n}\n\nConnection.reopenDelay = 500;\n\nConnection.prototype.events = {\n message(event) {\n if (!this.isProtocolSupported()) {\n return;\n }\n const {identifier: identifier, message: message, reason: reason, reconnect: reconnect, type: type} = JSON.parse(event.data);\n this.monitor.recordMessage();\n switch (type) {\n case message_types.welcome:\n if (this.triedToReconnect()) {\n this.reconnectAttempted = true;\n }\n this.monitor.recordConnect();\n return this.subscriptions.reload();\n\n case message_types.disconnect:\n logger.log(`Disconnecting. Reason: ${reason}`);\n return this.close({\n allowReconnect: reconnect\n });\n\n case message_types.ping:\n return null;\n\n case message_types.confirmation:\n this.subscriptions.confirmSubscription(identifier);\n if (this.reconnectAttempted) {\n this.reconnectAttempted = false;\n return this.subscriptions.notify(identifier, \"connected\", {\n reconnected: true\n });\n } else {\n return this.subscriptions.notify(identifier, \"connected\", {\n reconnected: false\n });\n }\n\n case message_types.rejection:\n return this.subscriptions.reject(identifier);\n\n default:\n return this.subscriptions.notify(identifier, \"received\", message);\n }\n },\n open() {\n logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`);\n this.disconnected = false;\n if (!this.isProtocolSupported()) {\n logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\");\n return this.close({\n allowReconnect: false\n });\n }\n },\n close(event) {\n logger.log(\"WebSocket onclose event\");\n if (this.disconnected) {\n return;\n }\n this.disconnected = true;\n this.monitor.recordDisconnect();\n return this.subscriptions.notifyAll(\"disconnected\", {\n willAttemptReconnect: this.monitor.isRunning()\n });\n },\n error() {\n logger.log(\"WebSocket onerror event\");\n }\n};\n\nconst extend = function(object, properties) {\n if (properties != null) {\n for (let key in properties) {\n const value = properties[key];\n object[key] = value;\n }\n }\n return object;\n};\n\nclass Subscription {\n constructor(consumer, params = {}, mixin) {\n this.consumer = consumer;\n this.identifier = JSON.stringify(params);\n extend(this, mixin);\n }\n perform(action, data = {}) {\n data.action = action;\n return this.send(data);\n }\n send(data) {\n return this.consumer.send({\n command: \"message\",\n identifier: this.identifier,\n data: JSON.stringify(data)\n });\n }\n unsubscribe() {\n return this.consumer.subscriptions.remove(this);\n }\n}\n\nclass SubscriptionGuarantor {\n constructor(subscriptions) {\n this.subscriptions = subscriptions;\n this.pendingSubscriptions = [];\n }\n guarantee(subscription) {\n if (this.pendingSubscriptions.indexOf(subscription) == -1) {\n logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`);\n this.pendingSubscriptions.push(subscription);\n } else {\n logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`);\n }\n this.startGuaranteeing();\n }\n forget(subscription) {\n logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`);\n this.pendingSubscriptions = this.pendingSubscriptions.filter((s => s !== subscription));\n }\n startGuaranteeing() {\n this.stopGuaranteeing();\n this.retrySubscribing();\n }\n stopGuaranteeing() {\n clearTimeout(this.retryTimeout);\n }\n retrySubscribing() {\n this.retryTimeout = setTimeout((() => {\n if (this.subscriptions && typeof this.subscriptions.subscribe === \"function\") {\n this.pendingSubscriptions.map((subscription => {\n logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`);\n this.subscriptions.subscribe(subscription);\n }));\n }\n }), 500);\n }\n}\n\nclass Subscriptions {\n constructor(consumer) {\n this.consumer = consumer;\n this.guarantor = new SubscriptionGuarantor(this);\n this.subscriptions = [];\n }\n create(channelName, mixin) {\n const channel = channelName;\n const params = typeof channel === \"object\" ? channel : {\n channel: channel\n };\n const subscription = new Subscription(this.consumer, params, mixin);\n return this.add(subscription);\n }\n add(subscription) {\n this.subscriptions.push(subscription);\n this.consumer.ensureActiveConnection();\n this.notify(subscription, \"initialized\");\n this.subscribe(subscription);\n return subscription;\n }\n remove(subscription) {\n this.forget(subscription);\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\");\n }\n return subscription;\n }\n reject(identifier) {\n return this.findAll(identifier).map((subscription => {\n this.forget(subscription);\n this.notify(subscription, \"rejected\");\n return subscription;\n }));\n }\n forget(subscription) {\n this.guarantor.forget(subscription);\n this.subscriptions = this.subscriptions.filter((s => s !== subscription));\n return subscription;\n }\n findAll(identifier) {\n return this.subscriptions.filter((s => s.identifier === identifier));\n }\n reload() {\n return this.subscriptions.map((subscription => this.subscribe(subscription)));\n }\n notifyAll(callbackName, ...args) {\n return this.subscriptions.map((subscription => this.notify(subscription, callbackName, ...args)));\n }\n notify(subscription, callbackName, ...args) {\n let subscriptions;\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription);\n } else {\n subscriptions = [ subscription ];\n }\n return subscriptions.map((subscription => typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined));\n }\n subscribe(subscription) {\n if (this.sendCommand(subscription, \"subscribe\")) {\n this.guarantor.guarantee(subscription);\n }\n }\n confirmSubscription(identifier) {\n logger.log(`Subscription confirmed ${identifier}`);\n this.findAll(identifier).map((subscription => this.guarantor.forget(subscription)));\n }\n sendCommand(subscription, command) {\n const {identifier: identifier} = subscription;\n return this.consumer.send({\n command: command,\n identifier: identifier\n });\n }\n}\n\nclass Consumer {\n constructor(url) {\n this._url = url;\n this.subscriptions = new Subscriptions(this);\n this.connection = new Connection(this);\n this.subprotocols = [];\n }\n get url() {\n return createWebSocketURL(this._url);\n }\n send(data) {\n return this.connection.send(data);\n }\n connect() {\n return this.connection.open();\n }\n disconnect() {\n return this.connection.close({\n allowReconnect: false\n });\n }\n ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open();\n }\n }\n addSubProtocol(subprotocol) {\n this.subprotocols = [ ...this.subprotocols, subprotocol ];\n }\n}\n\nfunction createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url();\n }\n if (url && !/^wss?:/i.test(url)) {\n const a = document.createElement(\"a\");\n a.href = url;\n a.href = a.href;\n a.protocol = a.protocol.replace(\"http\", \"ws\");\n return a.href;\n } else {\n return url;\n }\n}\n\nfunction createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n return new Consumer(url);\n}\n\nfunction getConfig(name) {\n const element = document.head.querySelector(`meta[name='action-cable-${name}']`);\n if (element) {\n return element.getAttribute(\"content\");\n }\n}\n\nexport { Connection, ConnectionMonitor, Consumer, INTERNAL, Subscription, SubscriptionGuarantor, Subscriptions, adapters, createConsumer, createWebSocketURL, getConfig, logger };\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nexport default baseSlice;\n","import baseSlice from './_baseSlice.js';\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nexport default castSlice;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nexport default hasUnicode;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\nexport default asciiToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\nexport default unicodeToArray;\n","import asciiToArray from './_asciiToArray.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeToArray from './_unicodeToArray.js';\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\nexport default stringToArray;\n","import castSlice from './_castSlice.js';\nimport hasUnicode from './_hasUnicode.js';\nimport stringToArray from './_stringToArray.js';\nimport toString from './toString.js';\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n}\n\nexport default createCaseFirst;\n","import createCaseFirst from './_createCaseFirst.js';\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nexport default upperFirst;\n","import toString from './toString.js';\nimport upperFirst from './upperFirst.js';\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n}\n\nexport default capitalize;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nexport default arrayReduce;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default basePropertyOf;\n","import basePropertyOf from './_basePropertyOf.js';\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nexport default deburrLetter;\n","import deburrLetter from './_deburrLetter.js';\nimport toString from './toString.js';\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nexport default deburr;\n","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\nexport default asciiWords;\n","/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n}\n\nexport default hasUnicodeWord;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n}\n\nexport default unicodeWords;\n","import asciiWords from './_asciiWords.js';\nimport hasUnicodeWord from './_hasUnicodeWord.js';\nimport toString from './toString.js';\nimport unicodeWords from './_unicodeWords.js';\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nexport default words;\n","import arrayReduce from './_arrayReduce.js';\nimport deburr from './deburr.js';\nimport words from './words.js';\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\nexport default createCompounder;\n","import capitalize from './capitalize.js';\nimport createCompounder from './_createCompounder.js';\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n});\n\nexport default camelCase;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","import {Chart, registerables} from '../dist/chart.js';\n\nChart.register(...registerables);\n\nexport * from '../dist/chart.js';\nexport default Chart;\n","/*!\n * @kurkle/color v0.3.2\n * https://github.com/kurkle/color#readme\n * (c) 2023 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nconst names$1 = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/**\n * @namespace Chart.helpers\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ActiveDataPoint, ChartEvent} from '../types/index.js';\n\n/**\n * An empty function that can be used, for example, for optional callback.\n */\nexport function noop() {\n /* noop */\n}\n\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\nexport const uid = (() => {\n let id = 0;\n return () => id++;\n})();\n\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isNullOrUndef(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */\nexport function isArray<T = unknown>(value: unknown): value is T[] {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isObject(value: unknown): value is AnyObject {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */\nfunction isNumberFinite(value: unknown): value is number {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\nexport {\n isNumberFinite as isFinite,\n};\n\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */\nexport function finiteOrDefault(value: unknown, defaultValue: number) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */\nexport function valueOrDefault<T>(value: T | undefined, defaultValue: T) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport const toPercentage = (value: number | string, dimension: number) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100\n : +value / dimension;\n\nexport const toDimension = (value: number | string, dimension: number) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100 * dimension\n : +value;\n\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */\nexport function callback<T extends (this: TA, ...restArgs: unknown[]) => R, TA, R>(\n fn: T | undefined,\n args: unknown[],\n thisArg?: TA\n): R | undefined {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\n\n/**\n * Note(SB) for performance sake, this method should only be used when loopable type\n * is unknown or in none intensive code (not called often and small loopable). Else\n * it's preferable to use a regular for() loop and save extra function calls.\n * @param loopable - The object or array to be iterated.\n * @param fn - The function to call for each item.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n * @param [reverse] - If true, iterates backward on the loopable.\n */\nexport function each<T, TA>(\n loopable: Record<string, T>,\n fn: (this: TA, v: T, i: string) => void,\n thisArg?: TA,\n reverse?: boolean\n): void;\nexport function each<T, TA>(\n loopable: T[],\n fn: (this: TA, v: T, i: number) => void,\n thisArg?: TA,\n reverse?: boolean\n): void;\nexport function each<T, TA>(\n loopable: T[] | Record<string, T>,\n fn: (this: TA, v: T, i: any) => void,\n thisArg?: TA,\n reverse?: boolean\n) {\n let i: number, len: number, keys: string[];\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */\nexport function _elementsEqual(a0: ActiveDataPoint[], a1: ActiveDataPoint[]) {\n let i: number, ilen: number, v0: ActiveDataPoint, v1: ActiveDataPoint;\n\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\nexport function clone<T>(source: T): T {\n if (isArray(source)) {\n return source.map(clone) as unknown as T;\n }\n\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n\n for (; k < klen; ++k) {\n target[keys[k]] = clone(source[keys[k]]);\n }\n\n return target;\n }\n\n return source;\n}\n\nfunction isValidKey(key: string) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\nexport function _merger(key: string, target: AnyObject, source: AnyObject, options: AnyObject) {\n if (!isValidKey(key)) {\n return;\n }\n\n const tval = target[key];\n const sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\n\nexport interface MergeOptions {\n merger?: (key: string, target: AnyObject, source: AnyObject, options?: AnyObject) => void;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` with the given `options`.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @param [options] - Merging options:\n * @param [options.merger] - The merge method (key, target, source, options)\n * @returns The `target` object.\n */\nexport function merge<T>(target: T, source: [], options?: MergeOptions): T;\nexport function merge<T, S1>(target: T, source: S1, options?: MergeOptions): T & S1;\nexport function merge<T, S1>(target: T, source: [S1], options?: MergeOptions): T & S1;\nexport function merge<T, S1, S2>(target: T, source: [S1, S2], options?: MergeOptions): T & S1 & S2;\nexport function merge<T, S1, S2, S3>(target: T, source: [S1, S2, S3], options?: MergeOptions): T & S1 & S2 & S3;\nexport function merge<T, S1, S2, S3, S4>(\n target: T,\n source: [S1, S2, S3, S4],\n options?: MergeOptions\n): T & S1 & S2 & S3 & S4;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n\n if (!isObject(target)) {\n return target as AnyObject;\n }\n\n options = options || {};\n const merger = options.merger || _merger;\n let current: AnyObject;\n\n for (let i = 0; i < ilen; ++i) {\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n\n const keys = Object.keys(current);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, current, options as AnyObject);\n }\n }\n\n return target;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @returns The `target` object.\n */\nexport function mergeIf<T>(target: T, source: []): T;\nexport function mergeIf<T, S1>(target: T, source: S1): T & S1;\nexport function mergeIf<T, S1>(target: T, source: [S1]): T & S1;\nexport function mergeIf<T, S1, S2>(target: T, source: [S1, S2]): T & S1 & S2;\nexport function mergeIf<T, S1, S2, S3>(target: T, source: [S1, S2, S3]): T & S1 & S2 & S3;\nexport function mergeIf<T, S1, S2, S3, S4>(target: T, source: [S1, S2, S3, S4]): T & S1 & S2 & S3 & S4;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge<T>(target, source, {merger: _mergerIf});\n}\n\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\nexport function _mergerIf(key: string, target: AnyObject, source: AnyObject) {\n if (!isValidKey(key)) {\n return;\n }\n\n const tval = target[key];\n const sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n\n/**\n * @private\n */\nexport function _deprecated(scope: string, value: unknown, previous: string, current: string) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous +\n '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': v => v,\n // default resolvers\n x: o => o.x,\n y: o => o.y\n};\n\n/**\n * @private\n */\nexport function _splitKey(key: string) {\n const parts = key.split('.');\n const keys: string[] = [];\n let tmp = '';\n for (const part of parts) {\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\n\nfunction _getKeyResolver(key: string) {\n const keys = _splitKey(key);\n return obj => {\n for (const k of keys) {\n if (k === '') {\n // For backward compatibility:\n // Chart.helpers.core resolveObjectKey should break at empty key\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\n\nexport function resolveObjectKey(obj: AnyObject, key: string): any {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n\n/**\n * @private\n */\nexport function _capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nexport const defined = (value: unknown) => typeof value !== 'undefined';\n\nexport const isFunction = (value: unknown): value is (...args: any[]) => any => typeof value === 'function';\n\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nexport const setsEqual = <T>(a: Set<T>, b: Set<T>) => {\n if (a.size !== b.size) {\n return false;\n }\n\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * @param e - The event\n * @private\n */\nexport function _isClickEvent(e: ChartEvent) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n","import type {Point} from '../types/geometric.js';\nimport {isFinite as isFiniteNumber} from './helpers.core.js';\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\n\nexport const PI = Math.PI;\nexport const TAU = 2 * PI;\nexport const PITAU = TAU + PI;\nexport const INFINITY = Number.POSITIVE_INFINITY;\nexport const RAD_PER_DEG = PI / 180;\nexport const HALF_PI = PI / 2;\nexport const QUARTER_PI = PI / 4;\nexport const TWO_THIRDS_PI = PI * 2 / 3;\n\nexport const log10 = Math.log10;\nexport const sign = Math.sign;\n\nexport function almostEquals(x: number, y: number, epsilon: number) {\n return Math.abs(x - y) < epsilon;\n}\n\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\nexport function niceNum(range: number) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\nexport function _factorize(value: number) {\n const result: number[] = [];\n const sqrt = Math.sqrt(value);\n let i: number;\n\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) { // if value is a square number\n result.push(sqrt);\n }\n\n result.sort((a, b) => a - b).pop();\n return result;\n}\n\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */\nfunction isNonPrimitive(n: unknown) {\n return typeof n === 'symbol' || (typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n));\n}\n\nexport function isNumber(n: unknown): n is number {\n return !isNonPrimitive(n) && !isNaN(parseFloat(n as string)) && isFinite(n as number);\n}\n\nexport function almostWhole(x: number, epsilon: number) {\n const rounded = Math.round(x);\n return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\n\n/**\n * @private\n */\nexport function _setMinAndMaxByKey(\n array: Record<string, number>[],\n target: { min: number, max: number },\n property: string\n) {\n let i: number, ilen: number, value: number;\n\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\n\nexport function toRadians(degrees: number) {\n return degrees * (PI / 180);\n}\n\nexport function toDegrees(radians: number) {\n return radians * (180 / PI);\n}\n\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */\nexport function _decimalPlaces(x: number) {\n if (!isFiniteNumber(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n return p;\n}\n\n// Gets the angle from vertical upright to the point about a centre.\nexport function getAngleFromPoint(\n centrePoint: Point,\n anglePoint: Point\n) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n if (angle < (-0.5 * PI)) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\n\nexport function distanceBetweenPoints(pt1: Point, pt2: Point) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\nexport function _angleDiff(a: number, b: number) {\n return (a - b + PITAU) % TAU - PI;\n}\n\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\nexport function _normalizeAngle(a: number) {\n return (a % TAU + TAU) % TAU;\n}\n\n/**\n * @private\n */\nexport function _angleBetween(angle: number, start: number, end: number, sameAngleIsFullCircle?: boolean) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || (sameAngleIsFullCircle && s === e)\n || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\n\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\nexport function _limitValue(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n}\n\n/**\n * @param {number} value\n * @private\n */\nexport function _int16Range(value: number) {\n return _limitValue(value, -32768, 32767);\n}\n\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\nexport function _isBetween(value: number, start: number, end: number, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n","import {_capitalize} from './helpers.core.js';\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param value - value to find\n * @param cmp\n * @private\n */\nexport function _lookup(\n table: number[],\n value: number,\n cmp?: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup<T>(\n table: T[],\n value: number,\n cmp: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n table: unknown[],\n value: number,\n cmp?: (value: number) => boolean\n) {\n cmp = cmp || ((index) => table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid: number;\n\n while (hi - lo > 1) {\n mid = (lo + hi) >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n\n return {lo, hi};\n}\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */\nexport const _lookupByKey = (\n table: Record<string, number>[],\n key: string,\n value: number,\n last?: boolean\n) =>\n _lookup(table, value, last\n ? index => {\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n }\n : index => table[index][key] < value);\n\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */\nexport const _rlookupByKey = (\n table: Record<string, number>[],\n key: string,\n value: number\n) =>\n _lookup(table, value, index => table[index][key] >= value);\n\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */\nexport function _filterBetween(values: number[], min: number, max: number) {\n let start = 0;\n let end = values.length;\n\n while (start < end && values[start] < min) {\n start++;\n }\n while (end > start && values[end - 1] > max) {\n end--;\n }\n\n return start > 0 || end < values.length\n ? values.slice(start, end)\n : values;\n}\n\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'] as const;\n\nexport interface ArrayListener<T> {\n _onDataPush?(...item: T[]): void;\n _onDataPop?(): void;\n _onDataShift?(): void;\n _onDataSplice?(index: number, deleteCount: number, ...items: T[]): void;\n _onDataUnshift?(...item: T[]): void;\n}\n\n/**\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n * called on the '_onData*' callbacks (e.g. _onDataPush, etc.) with same arguments.\n */\nexport function listenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n\n arrayEvents.forEach((key) => {\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value(...args) {\n const res = base.apply(this, args);\n\n array._chartjs.listeners.forEach((object) => {\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n\n return res;\n }\n });\n });\n}\n\n\n/**\n * Removes the given array event listener and cleanup extra attached properties (such as\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n */\nexport function unlistenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n\n if (listeners.length > 0) {\n return;\n }\n\n arrayEvents.forEach((key) => {\n delete array[key];\n });\n\n delete array._chartjs;\n}\n\n/**\n * @param items\n */\nexport function _arrayUnique<T>(items: T[]) {\n const set = new Set<T>(items);\n\n if (set.size === items.length) {\n return items;\n }\n\n return Array.from(set);\n}\n","import type {ChartMeta, PointElement} from '../types/index.js';\n\nimport {_limitValue} from './helpers.math.js';\nimport {_lookupByKey} from './helpers.collection.js';\nimport {isNullOrUndef} from './helpers.core.js';\n\nexport function fontString(pixelSize: number, fontStyle: string, fontFamily: string) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n\n/**\n* Request animation polyfill\n*/\nexport const requestAnimFrame = (function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}());\n\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\nexport function throttled<TArgs extends Array<any>>(\n fn: (...args: TArgs) => void,\n thisArg: any,\n) {\n let argsToUse = [] as TArgs;\n let ticking = false;\n\n return function(...args: TArgs) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n\n/**\n * Debounces calling `fn` for `delay` ms\n */\nexport function debounce<TArgs extends Array<any>>(fn: (...args: TArgs) => void, delay: number) {\n let timeout;\n return function(...args: TArgs) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\nexport const _toLeftRightCenter = (align: 'start' | 'end' | 'center') => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */\nexport const _alignStartEnd = (align: 'start' | 'end' | 'center', start: number, end: number) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */\nexport const _textX = (align: 'left' | 'right' | 'center', left: number, right: number, rtl: boolean) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\n/**\n * Return start and count of visible points.\n * @private\n */\nexport function _getStartAndCountOfVisiblePoints(meta: ChartMeta<'line' | 'scatter'>, points: PointElement[], animationsDisabled: boolean) {\n const pointCount = points.length;\n\n let start = 0;\n let count = pointCount;\n\n if (meta._sorted) {\n const {iScale, vScale, _parsed} = meta;\n const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n const axis = iScale.axis;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n if (minDefined) {\n start = Math.min(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n if (spanGaps) {\n const distanceToDefinedLo = (_parsed\n .slice(0, start + 1)\n .reverse()\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n start -= Math.max(0, distanceToDefinedLo);\n }\n start = _limitValue(start, 0, pointCount - 1);\n }\n if (maxDefined) {\n let end = Math.max(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n if (spanGaps) {\n const distanceToDefinedHi = (_parsed\n .slice(end - 1)\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n end += Math.max(0, distanceToDefinedHi);\n }\n count = _limitValue(end, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n\n return {start, count};\n}\n\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\nexport function _scaleRangesChanged(meta) {\n const {xScale, yScale, _scaleRanges} = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n","import {PI, TAU, HALF_PI} from './helpers.math.js';\n\nconst atEdge = (t: number) => t === 0 || t === 1;\nconst elasticIn = (t: number, s: number, p: number) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t: number, s: number, p: number) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */\nconst effects = {\n linear: (t: number) => t,\n\n easeInQuad: (t: number) => t * t,\n\n easeOutQuad: (t: number) => -t * (t - 2),\n\n easeInOutQuad: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t\n : -0.5 * ((--t) * (t - 2) - 1),\n\n easeInCubic: (t: number) => t * t * t,\n\n easeOutCubic: (t: number) => (t -= 1) * t * t + 1,\n\n easeInOutCubic: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t\n : 0.5 * ((t -= 2) * t * t + 2),\n\n easeInQuart: (t: number) => t * t * t * t,\n\n easeOutQuart: (t: number) => -((t -= 1) * t * t * t - 1),\n\n easeInOutQuart: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t\n : -0.5 * ((t -= 2) * t * t * t - 2),\n\n easeInQuint: (t: number) => t * t * t * t * t,\n\n easeOutQuint: (t: number) => (t -= 1) * t * t * t * t + 1,\n\n easeInOutQuint: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t * t\n : 0.5 * ((t -= 2) * t * t * t * t + 2),\n\n easeInSine: (t: number) => -Math.cos(t * HALF_PI) + 1,\n\n easeOutSine: (t: number) => Math.sin(t * HALF_PI),\n\n easeInOutSine: (t: number) => -0.5 * (Math.cos(PI * t) - 1),\n\n easeInExpo: (t: number) => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n\n easeOutExpo: (t: number) => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n\n easeInOutExpo: (t: number) => atEdge(t) ? t : t < 0.5\n ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n\n easeInCirc: (t: number) => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n\n easeOutCirc: (t: number) => Math.sqrt(1 - (t -= 1) * t),\n\n easeInOutCirc: (t: number) => ((t /= 0.5) < 1)\n ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n\n easeInElastic: (t: number) => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n\n easeOutElastic: (t: number) => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n\n easeInOutElastic(t: number) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t :\n t < 0.5\n ? 0.5 * elasticIn(t * 2, s, p)\n : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n\n easeInBack(t: number) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n\n easeOutBack(t: number) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n\n easeInOutBack(t: number) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n },\n\n easeInBounce: (t: number) => 1 - effects.easeOutBounce(1 - t),\n\n easeOutBounce(t: number) {\n const m = 7.5625;\n const d = 2.75;\n if (t < (1 / d)) {\n return m * t * t;\n }\n if (t < (2 / d)) {\n return m * (t -= (1.5 / d)) * t + 0.75;\n }\n if (t < (2.5 / d)) {\n return m * (t -= (2.25 / d)) * t + 0.9375;\n }\n return m * (t -= (2.625 / d)) * t + 0.984375;\n },\n\n easeInOutBounce: (t: number) => (t < 0.5)\n ? effects.easeInBounce(t * 2) * 0.5\n : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n} as const;\n\nexport type EasingFunction = keyof typeof effects\n\nexport default effects;\n","import {Color} from '@kurkle/color';\n\nexport function isPatternOrGradient(value: unknown): value is CanvasPattern | CanvasGradient {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n\n return false;\n}\n\nexport function color(value: CanvasGradient): CanvasGradient;\nexport function color(value: CanvasPattern): CanvasPattern;\nexport function color(\n value:\n | string\n | { r: number; g: number; b: number; a: number }\n | [number, number, number]\n | [number, number, number, number]\n): Color;\nexport function color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\n\nexport function getHoverColor(value: CanvasGradient): CanvasGradient;\nexport function getHoverColor(value: CanvasPattern): CanvasPattern;\nexport function getHoverColor(value: string): string;\nexport function getHoverColor(value) {\n return isPatternOrGradient(value)\n ? value\n : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n","const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\n\nexport function applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined,\n });\n\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n });\n\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n },\n });\n\n defaults.describe('animations', {\n _fallback: 'animation',\n });\n\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0 // show immediately\n },\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: v => v | 0 // for keeping the dataset visible all the way through the animation\n },\n }\n }\n });\n}\n","\nconst intlCache = new Map<string, Intl.NumberFormat>();\n\nfunction getNumberFormat(locale: string, options?: Intl.NumberFormatOptions) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\n\nexport function formatNumber(num: number, locale: string, options?: Intl.NumberFormatOptions) {\n return getNumberFormat(locale, options).format(num);\n}\n","import {isArray} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {log10} from '../helpers/helpers.math.js';\n\n/**\n * Namespace to hold formatters for different types of ticks\n * @namespace Chart.Ticks.formatters\n */\nconst formatters = {\n /**\n * Formatter for value labels\n * @method Chart.Ticks.formatters.values\n * @param value the value to display\n * @return {string|string[]} the label to display\n */\n values(value) {\n return isArray(value) ? /** @type {string[]} */ (value) : '' + value;\n },\n\n /**\n * Formatter for numeric ticks\n * @method Chart.Ticks.formatters.numeric\n * @param tickValue {number} the value to be formatted\n * @param index {number} the position of the tickValue parameter in the ticks array\n * @param ticks {object[]} the list of ticks being converted\n * @return {string} string representation of the tickValue parameter\n */\n numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0'; // never show decimal places for 0\n }\n\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue; // This is used when there are less than 2 ticks as the tick interval.\n\n if (ticks.length > 1) {\n // all ticks are small or there huge numbers; use scientific notation\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n\n delta = calculateDelta(tickValue, ticks);\n }\n\n const logDelta = log10(Math.abs(delta));\n\n // When datasets have values approaching Number.MAX_VALUE, the tick calculations might result in\n // infinity and eventually NaN. Passing NaN for minimumFractionDigits or maximumFractionDigits\n // will make the number formatter throw. So instead we check for isNaN and use a fallback value.\n //\n // toFixed has a max of 20 decimal places\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n\n const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n Object.assign(options, this.options.ticks.format);\n\n return formatNumber(tickValue, locale, options);\n },\n\n\n /**\n * Formatter for logarithmic ticks\n * @method Chart.Ticks.formatters.logarithmic\n * @param tickValue {number} the value to be formatted\n * @param index {number} the position of the tickValue parameter in the ticks array\n * @param ticks {object[]} the list of ticks being converted\n * @return {string} string representation of the tickValue parameter\n */\n logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || (tickValue / (Math.pow(10, Math.floor(log10(tickValue)))));\n if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n\n};\n\n\nfunction calculateDelta(tickValue, ticks) {\n // Figure out how many digits to show\n // The space between the first two ticks might be smaller than normal spacing\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n // not an integer\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nexport default {formatters};\n","import {getHoverColor} from '../helpers/helpers.color.js';\nimport {isObject, merge, valueOrDefault} from '../helpers/helpers.core.js';\nimport {applyAnimationsDefaults} from './core.animations.defaults.js';\nimport {applyLayoutsDefaults} from './core.layouts.defaults.js';\nimport {applyScaleDefaults} from './core.scale.defaults.js';\n\nexport const overrides = Object.create(null);\nexport const descriptors = Object.create(null);\n\n/**\n * @param {object} node\n * @param {string} key\n * @return {object}\n */\nfunction getScope(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for (let i = 0, n = keys.length; i < n; ++i) {\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\n\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope(root, scope), values);\n }\n return merge(getScope(root, ''), scope);\n}\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Defaults {\n constructor(_descriptors, _appliers) {\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options) => getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n\n /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n set(scope, values) {\n return set(this, scope, values);\n }\n\n /**\n\t * @param {string} scope\n\t */\n get(scope) {\n return getScope(this, scope);\n }\n\n /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n\n override(scope, values) {\n return set(overrides, scope, values);\n }\n\n /**\n\t * Routes the named defaults to fallback to another scope/name.\n\t * This routing is useful when those target values, like defaults.color, are changed runtime.\n\t * If the values would be copied, the runtime change would not take effect. By routing, the\n\t * fallback is evaluated at each access, so its always up to date.\n\t *\n\t * Example:\n\t *\n\t * \tdefaults.route('elements.arc', 'backgroundColor', '', 'color')\n\t * - reads the backgroundColor from defaults.color when undefined locally\n\t *\n\t * @param {string} scope Scope this route applies to.\n\t * @param {string} name Property name that should be routed to different namespace when not defined here.\n\t * @param {string} targetScope The namespace where those properties should be routed to.\n\t * Empty string ('') is the root of defaults.\n\t * @param {string} targetName The target name in the target scope the property should be routed to.\n\t */\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope(this, scope);\n const targetScopeObject = getScope(this, targetScope);\n const privateName = '_' + name;\n\n Object.defineProperties(scopeObject, {\n // A private property is defined to hold the actual value, when this property is set in its scope (set in the setter)\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n // The actual property is defined as getter/setter so we can do the routing when value is not locally set.\n [name]: {\n enumerable: true,\n get() {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set(value) {\n this[privateName] = value;\n }\n }\n });\n }\n\n apply(appliers) {\n appliers.forEach((apply) => apply(this));\n }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Defaults({\n _scriptable: (name) => !name.startsWith('on'),\n _indexable: (name) => name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false,\n }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\n","export function applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\n","import Ticks from './core.ticks.js';\n\nexport function applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n\n /**\n * Scale boundary strategy (bypassed by min/max time options)\n * - `data`: make sure data are fully visible, ticks outside are removed\n * - `ticks`: make sure ticks are fully visible, data outside are truncated\n * @see https://github.com/chartjs/Chart.js/pull/4556\n * @since 3.0.0\n */\n bounds: 'ticks',\n\n clip: true,\n\n /**\n * Addition grace added to max and reduced from min data value.\n * @since 3.0.0\n */\n grace: 0,\n\n // grid line settings\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options) => options.lineWidth,\n tickColor: (_ctx, options) => options.color,\n offset: false,\n },\n\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n\n // scale title\n title: {\n // display property\n display: false,\n\n // actual label\n text: '',\n\n // top/bottom padding\n padding: {\n top: 4,\n bottom: 4\n }\n },\n\n // label settings\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2,\n }\n });\n\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash',\n });\n\n defaults.describe('scales', {\n _fallback: 'scale',\n });\n\n defaults.describe('scale.ticks', {\n _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name) => name !== 'backdropPadding',\n });\n}\n","import type {\n Chart,\n Point,\n FontSpec,\n CanvasFontSpec,\n PointStyle,\n RenderTextOpts,\n BackdropOptions\n} from '../types/index.js';\nimport type {\n TRBL,\n SplinePoint,\n RoundedRect,\n TRBLCorners\n} from '../types/geometric.js';\nimport {isArray, isNullOrUndef} from './helpers.core.js';\nimport {PI, TAU, HALF_PI, QUARTER_PI, TWO_THIRDS_PI, RAD_PER_DEG} from './helpers.math.js';\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nexport function toFontString(font: FontSpec) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n\n return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\n\n/**\n * @private\n */\nexport function _measureText(\n ctx: CanvasRenderingContext2D,\n data: Record<string, number>,\n gc: string[],\n longest: number,\n string: string\n) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n\ntype Thing = string | undefined | null\ntype Things = (Thing | Thing[])[]\n\n/**\n * @private\n */\n// eslint-disable-next-line complexity\nexport function _longestText(\n ctx: CanvasRenderingContext2D,\n font: string,\n arrayOfThings: Things,\n cache?: {data?: Record<string, number>, garbageCollect?: string[], font?: string}\n) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n\n ctx.save();\n\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i: number, j: number, jlen: number, thing: Thing | Thing[], nestedThing: Thing | Thing[];\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && !isArray(thing)) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n\n ctx.restore();\n\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */\nexport function _alignPixel(chart: Chart, pixel: number, width: number) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n\n/**\n * Clears the entire canvas.\n */\nexport function clearCanvas(canvas?: HTMLCanvasElement, ctx?: CanvasRenderingContext2D) {\n if (!ctx && !canvas) {\n return;\n }\n\n ctx = ctx || canvas.getContext('2d');\n\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\n\nexport interface DrawPointOptions {\n pointStyle: PointStyle;\n rotation?: number;\n radius: number;\n borderWidth: number;\n}\n\nexport function drawPoint(\n ctx: CanvasRenderingContext2D,\n options: DrawPointOptions,\n x: number,\n y: number\n) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n\n// eslint-disable-next-line complexity\nexport function drawPointLegend(\n ctx: CanvasRenderingContext2D,\n options: DrawPointOptions,\n x: number,\n y: number,\n w: number\n) {\n let type: string, xOffset: number, yOffset: number, size: number, cornerRadius: number, width: number, xOffsetW: number, yOffsetW: number;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n\n ctx.beginPath();\n\n switch (style) {\n // Default includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */\n case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */\n case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */\nexport function _isPointInArea(\n point: Point,\n area: TRBL,\n margin?: number\n) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n\n return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\n\nexport function clipArea(ctx: CanvasRenderingContext2D, area: TRBL) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\n\nexport function unclipArea(ctx: CanvasRenderingContext2D) {\n ctx.restore();\n}\n\n/**\n * @private\n */\nexport function _steppedLineTo(\n ctx: CanvasRenderingContext2D,\n previous: Point,\n target: Point,\n flip?: boolean,\n mode?: string\n) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @private\n */\nexport function _bezierCurveTo(\n ctx: CanvasRenderingContext2D,\n previous: SplinePoint,\n target: SplinePoint,\n flip?: boolean\n) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(\n flip ? previous.cp1x : previous.cp2x,\n flip ? previous.cp1y : previous.cp2y,\n flip ? target.cp2x : target.cp1x,\n flip ? target.cp2y : target.cp1y,\n target.x,\n target.y);\n}\n\nfunction setRenderOpts(ctx: CanvasRenderingContext2D, opts: RenderTextOpts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\n\nfunction decorateText(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n line: string,\n opts: RenderTextOpts\n) {\n if (opts.strikethrough || opts.underline) {\n /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n */\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\n\nfunction drawBackdrop(ctx: CanvasRenderingContext2D, opts: BackdropOptions) {\n const oldColor = ctx.fillStyle;\n\n ctx.fillStyle = opts.color as string;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n\n/**\n * Render text onto the canvas\n */\nexport function renderText(\n ctx: CanvasRenderingContext2D,\n text: string | string[],\n x: number,\n y: number,\n font: CanvasFontSpec,\n opts: RenderTextOpts = {}\n) {\n const lines = isArray(text) ? text : [text];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i: number, line: string;\n\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n\n y += Number(font.lineHeight);\n }\n\n ctx.restore();\n}\n\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */\nexport function addRoundedRectPath(\n ctx: CanvasRenderingContext2D,\n rect: RoundedRect & { radius: TRBLCorners }\n) {\n const {x, y, w, h, radius} = rect;\n\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\n","import defaults from '../core/core.defaults.js';\nimport {isArray, isObject, toDimension, valueOrDefault} from './helpers.core.js';\nimport {toFontString} from './helpers.canvas.js';\nimport type {ChartArea, FontSpec, Point} from '../types/index.js';\nimport type {TRBL, TRBLCorners} from '../types/geometric.js';\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\n/**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\nexport function toLineHeight(value: number | string, size: number): number {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n\n value = +matches[2];\n\n switch (matches[3]) {\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n default:\n break;\n }\n\n return size * value;\n}\n\nconst numberOrZero = (v: unknown) => +v || 0;\n\n/**\n * @param value\n * @param props\n */\nexport function _readValueToProps<K extends string>(value: number | Record<K, number>, props: K[]): Record<K, number>;\nexport function _readValueToProps<K extends string, T extends string>(value: number | Record<K & T, number>, props: Record<T, K>): Record<T, number>;\nexport function _readValueToProps(value: number | Record<string, number>, props: string[] | Record<string, string>) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value)\n ? objProps\n ? prop => valueOrDefault(value[prop], value[props[prop]])\n : prop => value[prop]\n : () => value;\n\n for (const prop of keys) {\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */\nexport function toTRBL(value: number | TRBL | Point) {\n return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\n\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */\nexport function toTRBLCorners(value: number | TRBLCorners) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\nexport function toPadding(value?: number | TRBL): ChartArea {\n const obj = toTRBL(value) as ChartArea;\n\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n\n return obj;\n}\n\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */\n\nexport function toFont(options: Partial<FontSpec>, fallback?: Partial<FontSpec>) {\n options = options || {};\n fallback = fallback || defaults.font as FontSpec;\n\n let size = valueOrDefault(options.size, fallback.size);\n\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n\n font.string = toFontString(font);\n return font;\n}\n\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */\nexport function resolve(inputs: Array<unknown>, context?: object, index?: number, info?: { cacheable: boolean }) {\n let cacheable = true;\n let i: number, ilen: number, value: unknown;\n\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\nexport function _addGrace(minmax: { min: number; max: number; }, grace: number | string, beginAtZero: boolean) {\n const {min, max} = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value: number, add: number) => beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\n\n/**\n * Create a context inheriting parentContext\n * @param parentContext\n * @param context\n * @returns\n */\nexport function createContext<T extends object>(parentContext: null, context: T): T;\nexport function createContext<T extends object, P extends T>(parentContext: P, context: T): P & T;\nexport function createContext(parentContext: object, context: object) {\n return Object.assign(Object.create(parentContext), context);\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartMeta} from '../types/index.js';\nimport type {\n ResolverObjectKey,\n ResolverCache,\n ResolverProxy,\n DescriptorDefaults,\n Descriptor,\n ContextCache,\n ContextProxy\n} from './helpers.config.types.js';\nimport {isArray, isFunction, isObject, resolveObjectKey, _capitalize} from './helpers.core.js';\n\nexport * from './helpers.config.types.js';\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */\nexport function _createResolver<\n T extends AnyObject[] = AnyObject[],\n R extends AnyObject[] = T\n>(\n scopes: T,\n prefixes = [''],\n rootScopes?: R,\n fallback?: ResolverObjectKey,\n getTarget = () => scopes[0]\n) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache: ResolverCache<T, R> = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope: AnyObject) => _createResolver([scope, ...scopes], prefixes, finalRootScopes, fallback),\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop: string) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n\n /**\n * A trap for getting property values.\n */\n get(target, prop: string) {\n return _cached(target, prop,\n () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n\n /**\n * A trap for the in operator.\n */\n has(target, prop: string) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n\n /**\n * A trap for setting property values.\n */\n set(target, prop: string, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n }) as ResolverProxy<T, R>;\n}\n\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */\nexport function _attachContext<\n T extends AnyObject[] = AnyObject[],\n R extends AnyObject[] = T\n>(\n proxy: ResolverProxy<T, R>,\n context: AnyObject,\n subProxy?: ResolverProxy<T, R>,\n descriptorDefaults?: DescriptorDefaults\n) {\n const cache: ContextCache<T, R> = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx: AnyObject) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope: AnyObject) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n\n /**\n * A trap for getting property values.\n */\n get(target, prop: string, receiver) {\n return _cached(target, prop,\n () => _resolveWithContext(target, prop, receiver));\n },\n\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys\n ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n\n /**\n * A trap for the in operator.\n */\n has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n\n /**\n * A trap for setting property values.\n */\n set(target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n }) as ContextProxy<T, R>;\n}\n\n/**\n * @private\n */\nexport function _descriptors(\n proxy: ResolverCache,\n defaults: DescriptorDefaults = {scriptable: true, indexable: true}\n): Descriptor {\n const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n };\n}\n\nconst readKey = (prefix: string, name: string) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop: string, value: unknown) => isObject(value) && prop !== 'adapters' &&\n (Object.getPrototypeOf(value) === null || value.constructor === Object);\n\nfunction _cached(\n target: AnyObject,\n prop: string,\n resolve: () => unknown\n) {\n if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n return target[prop];\n }\n\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\n\nfunction _resolveWithContext(\n target: ContextCache,\n prop: string,\n receiver: AnyObject\n) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n let value = _proxy[prop]; // resolve from proxy\n\n // resolve with context\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\n\nfunction _resolveScriptable(\n prop: string,\n getValue: (ctx: AnyObject, sub: AnyObject) => unknown,\n target: ContextCache,\n receiver: AnyObject\n) {\n const {_proxy, _context, _subProxy, _stack} = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n let value = getValue(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\n\nfunction _resolveArray(\n prop: string,\n value: unknown[],\n target: ContextCache,\n isIndexable: (key: string) => boolean\n) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n\n if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n return value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\n const arr = value;\n const scopes = _proxy._scopes.filter(s => s !== arr);\n value = [];\n for (const item of arr) {\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\n\nfunction resolveFallback(\n fallback: ResolverObjectKey | ((prop: ResolverObjectKey, value: unknown) => ResolverObjectKey),\n prop: ResolverObjectKey,\n value: unknown\n) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nconst getScope = (key: ResolverObjectKey, parent: AnyObject) => key === true ? parent\n : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n\nfunction addScopes(\n set: Set<AnyObject>,\n parentScopes: AnyObject[],\n key: ResolverObjectKey,\n parentFallback: ResolverObjectKey,\n value: unknown\n) {\n for (const parent of parentScopes) {\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n return null;\n }\n }\n return false;\n}\n\nfunction createSubResolver(\n parentScopes: AnyObject[],\n resolver: ResolverCache,\n prop: ResolverObjectKey,\n value: unknown\n) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [...parentScopes, ...rootScopes];\n const set = new Set<AnyObject>();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (typeof fallback !== 'undefined' && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [''], rootScopes, fallback,\n () => subGetTarget(resolver, prop as string, value));\n}\n\nfunction addScopesFromKey(\n set: Set<AnyObject>,\n allScopes: AnyObject[],\n key: ResolverObjectKey,\n fallback: ResolverObjectKey,\n item: unknown\n) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\n\nfunction subGetTarget(\n resolver: ResolverCache,\n prop: string,\n value: unknown\n) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\n return value;\n }\n return target || {};\n}\n\nfunction _resolveWithPrefixes(\n prop: string,\n prefixes: string[],\n scopes: AnyObject[],\n proxy: ResolverProxy\n) {\n let value: unknown;\n for (const prefix of prefixes) {\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value)\n ? createSubResolver(scopes, proxy, prop, value)\n : value;\n }\n }\n}\n\nfunction _resolve(key: string, scopes: AnyObject[]) {\n for (const scope of scopes) {\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (typeof value !== 'undefined') {\n return value;\n }\n }\n}\n\nfunction getKeysFromAllScopes(target: ResolverCache) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes: AnyObject[]) {\n const set = new Set<string>();\n for (const scope of scopes) {\n for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n set.add(key);\n }\n }\n return Array.from(set);\n}\n\nexport function _parseObjectDataRadialScale(\n meta: ChartMeta<'line' | 'scatter'>,\n data: AnyObject[],\n start: number,\n count: number\n) {\n const {iScale} = meta;\n const {key = 'r'} = this._parsing;\n const parsed = new Array<{r: unknown}>(count);\n let i: number, ilen: number, index: number, item: AnyObject;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n","import {almostEquals, distanceBetweenPoints, sign} from './helpers.math.js';\nimport {_isPointInArea} from './helpers.canvas.js';\nimport type {ChartArea} from '../types/index.js';\nimport type {SplinePoint} from '../types/geometric.js';\n\nconst EPSILON = Number.EPSILON || 1e-14;\n\ntype OptionalSplinePoint = SplinePoint | false\nconst getPoint = (points: SplinePoint[], i: number): OptionalSplinePoint => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis: 'x' | 'y') => indexAxis === 'x' ? 'y' : 'x';\n\nexport function splineCurve(\n firstPoint: SplinePoint,\n middlePoint: SplinePoint,\n afterPoint: SplinePoint,\n t: number\n): {\n previous: SplinePoint\n next: SplinePoint\n } {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n // This function must also respect \"skipped\" points\n\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n\n/**\n * Adjust tangents to ensure monotonic properties\n */\nfunction monotoneAdjust(points: SplinePoint[], deltaK: number[], mK: number[]) {\n const pointsLen = points.length;\n\n let alphaK: number, betaK: number, tauK: number, squaredMagnitude: number, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\n\nfunction monotoneCompute(points: SplinePoint[], mK: number[], indexAxis: 'x' | 'y' = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta: number, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n\n for (let i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */\nexport function splineCurveMonotone(points: SplinePoint[], indexAxis: 'x' | 'y' = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK: number[] = Array(pointsLen).fill(0);\n const mK: number[] = Array(pointsLen);\n\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i]\n : !pointAfter ? deltaK[i - 1]\n : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n\n monotoneAdjust(points, deltaK, mK);\n\n monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt: number, min: number, max: number) {\n return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points: SplinePoint[], area: ChartArea) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n\n/**\n * @private\n */\nexport function _updateBezierControlPoints(\n points: SplinePoint[],\n options,\n area: ChartArea,\n loop: boolean,\n indexAxis: 'x' | 'y'\n) {\n let i: number, ilen: number, point: SplinePoint, controlPoints: ReturnType<typeof splineCurve>;\n\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter((pt) => !pt.skip);\n }\n\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(\n prev,\n point,\n points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n options.tension\n );\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n","import type {ChartArea, Scale} from '../types/index.js';\nimport type PrivateChart from '../core/core.controller.js';\nimport type {Chart, ChartEvent} from '../types.js';\nimport {INFINITY} from './helpers.math.js';\n\n/**\n * @private\n */\nexport function _isDomSupported(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * @private\n */\nexport function _getParentNode(domNode: HTMLCanvasElement): HTMLCanvasElement {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = (parent as ShadowRoot).host;\n }\n return parent as HTMLCanvasElement;\n}\n\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\n\nfunction parseMaxStyle(styleValue: string | number, node: HTMLElement, parentProperty: string) {\n let valueInPixels: number;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = (valueInPixels / 100) * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n\n return valueInPixels;\n}\n\nconst getComputedStyle = (element: HTMLElement): CSSStyleDeclaration =>\n element.ownerDocument.defaultView.getComputedStyle(element, null);\n\nexport function getStyle(el: HTMLElement, property: string): string {\n return getComputedStyle(el).getPropertyValue(property);\n}\n\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles: CSSStyleDeclaration, style: string, suffix?: string): ChartArea {\n const result = {} as ChartArea;\n suffix = suffix ? '-' + suffix : '';\n for (let i = 0; i < 4; i++) {\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\n\nconst useOffsetPos = (x: number, y: number, target: HTMLElement | EventTarget) =>\n (x > 0 || y > 0) && (!target || !(target as HTMLElement).shadowRoot);\n\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\nfunction getCanvasPosition(\n e: Event | TouchEvent | MouseEvent,\n canvas: HTMLCanvasElement\n): {\n x: number;\n y: number;\n box: boolean;\n } {\n const touches = (e as TouchEvent).touches;\n const source = (touches && touches.length ? touches[0] : e) as MouseEvent;\n const {offsetX, offsetY} = source as MouseEvent;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {x, y, box};\n}\n\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */\n\nexport function getRelativePosition(\n event: Event | ChartEvent | TouchEvent | MouseEvent,\n chart: Chart | PrivateChart\n): { x: number; y: number } {\n if ('native' in event) {\n return event;\n }\n\n const {canvas, currentDevicePixelRatio} = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const {x, y, box} = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n\n let {width, height} = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\n\nfunction getContainerSize(canvas: HTMLCanvasElement, width: number, height: number): Partial<Scale> {\n let maxWidth: number, maxHeight: number;\n\n if (width === undefined || height === undefined) {\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\n\nconst round1 = (v: number) => Math.round(v * 10) / 10;\n\n// eslint-disable-next-line complexity\nexport function getMaximumSize(\n canvas: HTMLCanvasElement,\n bbWidth?: number,\n bbHeight?: number,\n aspectRatio?: number\n): { width: number; height: number } {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let {width, height} = containerSize;\n\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n\n return {width, height};\n}\n\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */\nexport function retinaScale(\n chart: Chart | PrivateChart,\n forceRatio: number,\n forceStyle?: boolean\n): boolean | void {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n\n (chart as PrivateChart).height = Math.floor(chart.height);\n (chart as PrivateChart).width = Math.floor(chart.width);\n\n const canvas = chart.canvas;\n\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n\n if (chart.currentDevicePixelRatio !== pixelRatio\n || canvas.height !== deviceHeight\n || canvas.width !== deviceWidth) {\n (chart as PrivateChart).currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nexport const supportsEventListenerOptions = (function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive() { // This function will be called when the browser attempts to access the passive property.\n passiveSupported = true;\n return false;\n }\n } as EventListenerOptions;\n\n if (_isDomSupported()) {\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n }\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}());\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */\n\nexport function readUsedSize(\n element: HTMLElement,\n property: 'width' | 'height'\n): number | undefined {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n","import type {Point, SplinePoint} from '../types/geometric.js';\n\n/**\n * @private\n */\nexport function _pointInLine(p1: Point, p2: Point, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n\n/**\n * @private\n */\nexport function _steppedInterpolation(\n p1: Point,\n p2: Point,\n t: number, mode: 'middle' | 'after' | unknown\n) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n : mode === 'after' ? t < 1 ? p1.y : p2.y\n : t > 0 ? p2.y : p1.y\n };\n}\n\n/**\n * @private\n */\nexport function _bezierInterpolation(p1: SplinePoint, p2: SplinePoint, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n const cp1 = {x: p1.cp2x, y: p1.cp2y};\n const cp2 = {x: p2.cp1x, y: p2.cp1y};\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n","export interface RTLAdapter {\n x(x: number): number;\n setWidth(w: number): void;\n textAlign(align: 'center' | 'left' | 'right'): 'center' | 'left' | 'right';\n xPlus(x: number, value: number): number;\n leftForLtr(x: number, itemWidth: number): number;\n}\n\nconst getRightToLeftAdapter = function(rectX: number, width: number): RTLAdapter {\n return {\n x(x) {\n return rectX + rectX + width - x;\n },\n setWidth(w) {\n width = w;\n },\n textAlign(align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus(x, value) {\n return x - value;\n },\n leftForLtr(x, itemWidth) {\n return x - itemWidth;\n },\n };\n};\n\nconst getLeftToRightAdapter = function(): RTLAdapter {\n return {\n x(x) {\n return x;\n },\n setWidth(w) { // eslint-disable-line no-unused-vars\n },\n textAlign(align) {\n return align;\n },\n xPlus(x, value) {\n return x + value;\n },\n leftForLtr(x, _itemWidth) { // eslint-disable-line @typescript-eslint/no-unused-vars\n return x;\n },\n };\n};\n\nexport function getRtlAdapter(rtl: boolean, rectX: number, width: number) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nexport function overrideTextDirection(ctx: CanvasRenderingContext2D, direction: 'ltr' | 'rtl') {\n let style: CSSStyleDeclaration, original: [string, string];\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction'),\n ];\n\n style.setProperty('direction', direction, 'important');\n (ctx as { prevTextDirection?: [string, string] }).prevTextDirection = original;\n }\n}\n\nexport function restoreTextDirection(ctx: CanvasRenderingContext2D, original?: [string, string]) {\n if (original !== undefined) {\n delete (ctx as { prevTextDirection?: [string, string] }).prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n","import {_angleBetween, _angleDiff, _isBetween, _normalizeAngle} from './helpers.math.js';\nimport {createContext} from './helpers.options.js';\nimport {isPatternOrGradient} from './helpers.color.js';\n\n/**\n * @typedef { import('../elements/element.line.js').default } LineElement\n * @typedef { import('../elements/element.point.js').default } PointElement\n * @typedef {{start: number, end: number, loop: boolean, style?: any}} Segment\n */\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle,\n };\n }\n return {\n between: _isBetween,\n compare: (a, b) => a - b,\n normalize: x => x\n };\n}\n\nfunction normalizeSegment({start, end, count, loop, style}) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\n\nfunction getSegment(segment, points, bounds) {\n const {property, start: startBound, end: endBound} = bounds;\n const {between, normalize} = propertyFn(property);\n const count = points.length;\n // eslint-disable-next-line prefer-const\n let {start, end, loop} = segment;\n let i, ilen;\n\n if (loop) {\n start += count;\n end += count;\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n\n if (end < start) {\n end += count;\n }\n return {start, end, loop, style: segment.style};\n}\n\n/**\n * Returns the sub-segment(s) of a line segment that fall in the given bounds\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} [segment.style] - segment style\n * @param {PointElement[]} points - the points that this segment refers to\n * @param {object} [bounds]\n * @param {string} bounds.property - the property of a `PointElement` we are bounding. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the property\n * @param {number} bounds.end - end value of the property\n * @private\n **/\nexport function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n\n const {property, start: startBound, end: endBound} = bounds;\n const count = points.length;\n const {compare, between, normalize} = propertyFn(property);\n const {start, end, loop, style} = getSegment(segment, points, bounds);\n\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n\n const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = () => inside || startIsBefore();\n const shouldStop = () => !inside || endIsBefore();\n\n for (let i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n\n if (point.skip) {\n continue;\n }\n\n value = normalize(point[property]);\n\n if (value === prevValue) {\n continue;\n }\n\n inside = between(value, startBound, endBound);\n\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n\n if (subStart !== null) {\n result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n }\n\n return result;\n}\n\n\n/**\n * Returns the segments of the line that are inside given bounds\n * @param {LineElement} line\n * @param {object} [bounds]\n * @param {string} bounds.property - the property we are bounding with. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the `property`\n * @param {number} bounds.end - end value of the `property`\n * @private\n */\nexport function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n\n for (let i = 0; i < segments.length; i++) {\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\n\n/**\n * Find start and end index of a line.\n */\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n\n if (loop && !spanGaps) {\n // loop and not spanning gaps, first find a gap to start from\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n\n // find first non skipped point (after the first gap possibly)\n while (start < count && points[start].skip) {\n start++;\n }\n\n // if we looped to count, start needs to be 0\n start %= count;\n\n if (loop) {\n // loop will go past count, if start > 0\n end += start;\n }\n\n while (end > start && points[end % count].skip) {\n end--;\n }\n\n // end could be more than count, normalize\n end %= count;\n\n return {start, end};\n}\n\n/**\n * Compute solid segments from Points, when spanGaps === false\n * @param {PointElement[]} points - the points\n * @param {number} start - start index\n * @param {number} max - max index (can go past count on a loop)\n * @param {boolean} loop - boolean indicating that this would be a loop if no gaps are found\n */\nfunction solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n\n for (end = start + 1; end <= max; ++end) {\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({start: start % count, end: (end - 1) % count, loop});\n // @ts-ignore\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n\n if (last !== null) {\n result.push({start: start % count, end: last % count, loop});\n }\n\n return result;\n}\n\n/**\n * Compute the continuous segments that define the whole line\n * There can be skipped points within a segment, if spanGaps is true.\n * @param {LineElement} line\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n * @private\n */\nexport function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n\n if (!count) {\n return [];\n }\n\n const loop = !!line._loop;\n const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n\n if (spanGaps === true) {\n return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n }\n\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\n/**\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\n/**\n * @param {LineElement} line\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n // Style can not start/end on a skipped point, adjust indices accordingly\n s += count;\n while (points[s % count].skip) {\n s -= dir;\n }\n while (points[e % count].skip) {\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({start: s % count, end: e % count, loop: l, style: st});\n prevStyle = st;\n start = e % count;\n }\n }\n\n for (const segment of segments) {\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for (i = start + 1; i <= segment.end; i++) {\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n\n return result;\n}\n\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\n\nfunction styleChanged(style, prevStyle) {\n if (!prevStyle) {\n return false;\n }\n const cache = [];\n const replacer = function(key, value) {\n if (!isPatternOrGradient(value)) {\n return value;\n }\n if (!cache.includes(value)) {\n cache.push(value);\n }\n return cache.indexOf(value);\n };\n return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n","import {requestAnimFrame} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('./core.animation.js').default } Animation\n * @typedef { import('./core.controller.js').default } Chart\n */\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is export for typedoc\n */\nexport class Animator {\n constructor() {\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n\n /**\n\t * @private\n\t */\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n\n callbacks.forEach(fn => fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n\n /**\n\t * @private\n\t */\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n\n this._request = requestAnimFrame.call(window, () => {\n this._update();\n this._request = null;\n\n if (this._running) {\n this._refresh();\n }\n });\n }\n\n /**\n\t * @private\n\t */\n _update(date = Date.now()) {\n let remaining = 0;\n\n this._charts.forEach((anims, chart) => {\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n\n for (; i >= 0; --i) {\n item = items[i];\n\n if (item._active) {\n if (item._total > anims.duration) {\n // if the animation has been updated and its duration prolonged,\n // update to total duration of current animations run (for progress event)\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n // Remove the item by replacing it with last item and removing the last\n // A lot faster than splice.\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n\n remaining += items.length;\n });\n\n this._lastDate = date;\n\n if (remaining === 0) {\n this._running = false;\n }\n }\n\n /**\n\t * @private\n\t */\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n\n /**\n\t * @param {Chart} chart\n\t * @param {string} event - event name\n\t * @param {Function} cb - callback\n\t */\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n\n /**\n\t * Add animations\n\t * @param {Chart} chart\n\t * @param {Animation[]} items - animations\n\t */\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n\n /**\n\t * Counts number of active animations for the chart\n\t * @param {Chart} chart\n\t */\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n\n /**\n\t * Start animating (all charts)\n\t * @param {Chart} chart\n\t */\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n\n /**\n\t * Stop all animations for the chart\n\t * @param {Chart} chart\n\t */\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n\n /**\n\t * Remove chart from Animator\n\t * @param {Chart} chart\n\t */\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Animator();\n","import effects from '../helpers/helpers.easing.js';\nimport {resolve} from '../helpers/helpers.options.js';\nimport {color as helpersColor} from '../helpers/helpers.color.js';\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n /**\n * @param {string} from\n * @param {string} to\n * @param {number} factor\n */\n color(from, to, factor) {\n const c0 = helpersColor(from || transparent);\n const c1 = c0.valid && helpersColor(to || transparent);\n return c1 && c1.valid\n ? c1.mix(c0, factor).hexString()\n : to;\n },\n number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\n\nexport default class Animation {\n constructor(cfg, target, prop, to) {\n const currentValue = target[prop];\n\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n const from = resolve([cfg.from, currentValue, to]);\n\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n\n active() {\n return this._active;\n }\n\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n\n cancel() {\n if (this._active) {\n // update current evaluated value, for smoother animations\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n\n this._active = from !== to && (loop || (elapsed < duration));\n\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n\n factor = (elapsed / duration) % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n\n this._target[prop] = this._fn(from, to, factor);\n }\n\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej) => {\n promises.push({res, rej});\n });\n }\n\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for (let i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n}\n","import animator from './core.animator.js';\nimport Animation from './core.animation.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isObject} from '../helpers/helpers.core.js';\n\nexport default class Animations {\n constructor(chart, config) {\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n\n Object.getOwnPropertyNames(config).forEach(key => {\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions) {\n resolved[option] = cfg[option];\n }\n\n (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n\n /**\n\t * Utility to handle animation of `options`.\n\t * @private\n\t */\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n // Going to shared options:\n // After all animations are done, assign the shared options object to the element\n // So any new updates to the shared options are observed\n awaitAll(target.options.$animations, newOptions).then(() => {\n target.options = newOptions;\n }, () => {\n // rejected, noop\n });\n }\n\n return animations;\n }\n\n /**\n\t * @private\n\t */\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n\n for (i = props.length - 1; i >= 0; --i) {\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n\n if (animation) {\n if (cfg && animation.active()) {\n // There is an existing active animation, let's update that\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n // not animated, set directly to new value\n target[prop] = value;\n continue;\n }\n\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n\n\n /**\n\t * Update `target` properties to new values, using configured animations\n\t * @param {object} target - object to update\n\t * @param {object} values - new target properties\n\t * @returns {boolean|undefined} - `true` if animations were started\n\t **/\n update(target, values) {\n if (this._properties.size === 0) {\n // Nothing is animated, just apply the new values.\n Object.assign(target, values);\n return;\n }\n\n const animations = this._createAnimations(target, values);\n\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\n\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for (let i = 0; i < keys.length; i++) {\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n // @ts-ignore\n return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n // Going from shared options to distinct one:\n // Create new options object containing the old shared values and start updating that.\n target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n }\n return options;\n}\n","import Animations from './core.animations.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isFinite, isObject, valueOrDefault, resolveObjectKey, defined} from '../helpers/helpers.core.js';\nimport {listenArrayEvents, unlistenArrayEvents} from '../helpers/helpers.collection.js';\nimport {createContext, sign} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('./core.scale.js').default } Scale\n */\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\n\nfunction toClip(value) {\n let t, r, b, l;\n\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n return keys;\n}\n\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n\n if (value === null) {\n return;\n }\n\n let found = false;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n found = true;\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n value += otherValue;\n }\n }\n\n if (!found && !options.all) {\n return 0;\n }\n\n return value;\n}\n\nfunction convertObjectDataToArray(data, meta) {\n const {iScale, vScale} = meta;\n const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n [iAxisKey]: key,\n [vAxisKey]: data[key]\n };\n }\n return adata;\n}\n\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || (stacked === undefined && meta.stack !== undefined);\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\n\nfunction getUserBounds(scale) {\n const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n const value = stack[meta.index];\n if ((positive && value > 0) || (!positive && value < 0)) {\n return meta.index;\n }\n }\n\n return null;\n}\n\nfunction updateStacks(controller, parsed) {\n const {chart, _cachedMeta: meta} = controller;\n const stacks = chart._stacks || (chart._stacks = {}); // map structure is {stackKey: {datasetIndex: value}}\n const {iScale, vScale, index: datasetIndex} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n\n for (let i = 0; i < ilen; ++i) {\n const item = parsed[i];\n const {[iAxis]: index, [vAxis]: value} = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\n\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n return createContext(parent,\n {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n }\n );\n}\n\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\n\nfunction clearStacks(meta, items) {\n // Not using meta.index here, because it might be already updated if the dataset changed location\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n\n items = items || meta._parsed;\n for (const parsed of items) {\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\n\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n && {keys: getSortedDatasetIndices(chart, true), values: null};\n\nexport default class DatasetController {\n\n /**\n * @type {any}\n */\n static defaults = {};\n\n /**\n * Element type used to generate a meta dataset (e.g. Chart.element.LineElement).\n */\n static datasetElementType = null;\n\n /**\n * Element type used to generate a meta data (e.g. Chart.element.PointElement).\n */\n static dataElementType = null;\n\n /**\n\t * @param {Chart} chart\n\t * @param {number} datasetIndex\n\t */\n constructor(chart, datasetIndex) {\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n /** @type {boolean | object} */\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n\n this.initialize();\n }\n\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n\n const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n\n /**\n\t * @param {string} scaleID\n\t * @return {Scale}\n\t */\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n\n /**\n\t * @private\n\t */\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale\n ? meta.vScale\n : meta.iScale;\n }\n\n reset() {\n this._update('reset');\n }\n\n /**\n\t * @private\n\t */\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n\n /**\n\t * @private\n\t */\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n\n // In order to correctly handle data addition/deletion animation (and thus simulate\n // real-time charts), we need to monitor these data modifications and synchronize\n // the internal metadata accordingly.\n\n if (isObject(data)) {\n const meta = this._cachedMeta;\n this._data = convertObjectDataToArray(data, meta);\n } else if (_data !== data) {\n if (_data) {\n // This case happens when the user replaced the data array instance.\n unlistenArrayEvents(_data, this);\n // Discard old parsed data and stacks\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n\n addElements() {\n const meta = this._cachedMeta;\n\n this._dataCheck();\n\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n\n this._dataCheck();\n\n // make sure cached _stacked status is current\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n\n // detect change in stack option\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n // remove values from old stack\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n\n // Re-sync meta data in case the user replaced the data array or if we missed\n // any updates and so make sure that we handle number of datapoints changing.\n this._resyncElements(resetNewElements);\n\n // if stack changed, update stack values for the whole dataset\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n meta._stacked = isStacked(meta.vScale, meta);\n }\n }\n\n /**\n\t * Merges user-supplied and default dataset-level options\n\t * @private\n\t */\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n\n /**\n\t * @param {number} start\n\t * @param {number} count\n\t */\n parse(start, count) {\n const {_cachedMeta: meta, _data: data} = this;\n const {iScale, _stacked} = meta;\n const iAxis = iScale.axis;\n\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n\n const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n\n /**\n\t * Parse array of primitive values\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [1,3,4]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {xScale0: 0, yScale0: 1}\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n\n /**\n\t * Parse array of arrays\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [[1,2],[3,4]]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {x: 0, y: 1}\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n\n /**\n\t * Parse array of objects\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [{x:1, y:5}, {x:2, y:10}]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id. _custom is optional\n\t * Example: {xScale0: 0, yScale0: 1, _custom: {r: 10, foo: 'bar'}}\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n\n /**\n\t * @protected\n\t */\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n\n /**\n\t * @protected\n\t */\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {mode});\n }\n\n /**\n\t * @protected\n\t */\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n\n /**\n\t * @protected\n\t */\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n let i, parsed;\n\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n // if the data is sorted, we don't need to check further from this end of array\n break;\n }\n }\n if (sorted) {\n // in the sorted case, find first non-skipped value from other end of array\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n if (isFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n\n /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n getMaxOverflow() {\n return false;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n\n /**\n\t * @private\n\t */\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n\n /**\n\t * @param {string} mode\n\t */\n update(mode) {} // eslint-disable-line no-unused-vars\n\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || (elements.length - start);\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n\n for (i = start; i < start + count; ++i) {\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n\n /**\n\t * Returns a set of predefined style properties that should be used to represent the dataset\n\t * or the data if the index is specified\n\t * @param {number} index - data index\n\t * @param {boolean} [active] - true if hover\n\t * @return {object} style object\n\t */\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset\n ? this.resolveDatasetElementOptions(mode)\n : this.resolveDataElementOptions(index || 0, mode);\n }\n\n /**\n\t * @protected\n\t */\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context ||\n (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context ||\n (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n\n /**\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n\n /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n\n /**\n\t * @private\n\t */\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n // context is provided as a function, and is called only if needed,\n // so we don't create a context for each element if not needed.\n const context = () => this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n if (values.$shared) {\n // `$shared` indicates this set of options can be shared between multiple elements.\n // Sharing is used to reduce number of properties to change during animation.\n values.$shared = sharing;\n\n // We cache options by `mode`, which can be 'active' for example. This enables us\n // to have the 'active' element options and 'default' options to switch between\n // when interacting.\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n\n return values;\n }\n\n\n /**\n\t * @private\n\t */\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n\n /**\n\t * Utility for getting the options object shared between elements\n\t * @protected\n\t */\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n\n /**\n\t * Utility for determining if `options` should be included in the updated properties\n\t * @protected\n\t */\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n\n /**\n * @todo v4, rename to getSharedOptions and remove excess functions\n */\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {sharedOptions, includeOptions};\n }\n\n /**\n\t * Utility for updating an element with new properties, using animations when appropriate.\n\t * @protected\n\t */\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n\n /**\n\t * Utility to animate the shared options, that are potentially affecting multiple elements.\n\t * @protected\n\t */\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n\n /**\n\t * @private\n\t */\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n // When going from active to inactive, we need to update to the shared options.\n // This way the once hovered element will end up with the same original shared options instance, after animation.\n options: (!active && this.getSharedOptions(options)) || options\n });\n }\n\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n\n /**\n\t * @private\n\t */\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n\n /**\n\t * @private\n\t */\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n\n /**\n\t * @private\n\t */\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n\n // Apply changes detected through array listeners\n for (const [method, arg1, arg2] of this._syncList) {\n this[method](arg1, arg2);\n }\n this._syncList = [];\n\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n\n if (count) {\n // TODO: It is not optimal to always parse the old data\n // This is done because we are not detecting direct assignments:\n // chart.data.datasets[0].data[5] = 10;\n // chart.data.datasets[0].data[5].y = 10;\n this.parse(0, count);\n }\n\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n\n /**\n\t * @private\n\t */\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n\n const move = (arr) => {\n arr.length += count;\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n move(data);\n\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n\n updateElements(element, start, count, mode) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * @private\n\t */\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n\n /**\n\t * @private\n */\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([this.index, ...args]);\n }\n\n _onDataPush() {\n const count = arguments.length;\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n\n _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n\n _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n\n _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n\n _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {\n _arrayUnique, isArray, isNullOrUndef,\n valueOrDefault, resolveObjectKey, sign, defined\n} from '../helpers/index.js';\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n\n for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n }\n return scale._cache.$bar;\n}\n\n/**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\nfunction computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = () => {\n if (curr === 32767 || curr === -32768) {\n // Ignore truncated pixels\n return;\n }\n if (defined(prev)) {\n // curr - prev === 0 is ignored\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n\n prev = undefined;\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n\n return min;\n}\n\n/**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n // When bar thickness is enforced, category and bar percentages are ignored.\n // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n // and deprecate barPercentage since this value is ignored when thickness is absolute.\n size = thickness * stackCount;\n ratio = 1;\n }\n\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - (size / 2)\n };\n}\n\n/**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n\n if (prev === null) {\n // first data: its size is double based on the next point or,\n // if it's also the last data, we use the scale size.\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n\n if (next === null) {\n // last data: its size is also double based on the previous point.\n next = curr + curr - prev;\n }\n\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n\n // Store `barEnd` (furthest away from origin) as parsed value,\n // to make stacking straight forward\n item[vScale.axis] = barEnd;\n\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\n\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {start, end, reverse, top, bottom};\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n\n if (edge === true) {\n properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n return;\n }\n\n const {start, end, reverse, top, bottom} = borderProps(properties);\n\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\n\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n properties.inflateAmount = inflateAmount === 'auto'\n ? ratio === 1 ? 0.33 : 0\n : inflateAmount;\n}\n\nexport default class BarController extends DatasetController {\n\n static id = 'bar';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true,\n }\n }\n };\n\n\n /**\n\t * Overriding primitive data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n\n /**\n\t * Overriding array data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n\n /**\n\t * Overriding object data parsing since we support mixed primitive/array\n\t * value-scale data for float bars\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n // float bar: only one end of the bar is considered by `super`\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n\n /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n getMaxOverflow() {\n return 0;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {iScale, vScale} = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom)\n ? '[' + custom.start + ', ' + custom.end + ']'\n : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n\n initialize() {\n this.enableOptionSharing = true;\n\n super.initialize();\n\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const {index, _cachedMeta: {vScale}} = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n\n for (let i = start; i < start + count; i++) {\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n\n /**\n\t * Returns the stacks based on groups and bar visibility.\n\t * @param {number} [last] - The dataset index\n\t * @param {number} [dataIndex] - The data index of the ruler\n\t * @returns {string[]} The list of stack IDs\n\t * @private\n\t */\n _getStacks(last, dataIndex) {\n const {iScale} = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type)\n .filter(meta => meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n const iScaleValue = currentParsed && currentParsed[iScale.axis];\n\n const skipNull = (meta) => {\n const parsed = meta._parsed.find(item => item[iScale.axis] === iScaleValue);\n const val = parsed && parsed[meta.vScale.axis];\n\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n\n for (const meta of metasets) {\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n\n // stacked | meta.stack\n // | found | not found | undefined\n // false | x | x | x\n // true | | x |\n // undefined | | x | x\n if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n\n // No stacks? that means there is no visible data. Let's still initialize an `undefined`\n // stack where possible invisible bars will be located.\n // https://github.com/chartjs/Chart.js/issues/6368\n if (!stacks.length) {\n stacks.push(undefined);\n }\n\n return stacks;\n }\n\n /**\n\t * Returns the effective number of stacks based on groups and bar visibility.\n\t * @private\n\t */\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n\n /**\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t * @param {number} [datasetIndex] - The dataset index\n\t * @param {string} [name] - The stack name to find\n * @param {number} [dataIndex]\n\t * @returns {number} The stack index\n\t * @private\n\t */\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = (name !== undefined)\n ? stacks.indexOf(name)\n : -1; // indexOf returns -1 if element is not present\n\n return (index === -1)\n ? stacks.length - 1\n : index;\n }\n\n /**\n\t * @private\n\t */\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n // bar thickness ratio used for non-grouped bars\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n\n /**\n\t * Note: pixel values are not clamped to the scale area.\n\t * @private\n\t */\n _calculateBarValuePixels(index) {\n const {_cachedMeta: {vScale, _stacked, index: datasetIndex}, options: {base: baseValue, minBarLength}} = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n\n if (length !== value) {\n start = length - value;\n length = value;\n }\n\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n // bars crossing origin are not stacked\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n // When not visible, no height\n head = base;\n }\n\n size = head - base;\n\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n\n if (_stacked && !floating) {\n // visual data coordinates after applying minBarLength\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n\n /**\n\t * @private\n\t */\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex'\n ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n : computeFitCategoryTraits(index, ruler, options, stackCount);\n\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n // For non-grouped bar charts, exact pixel values are used\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n rects[i].draw(this._ctx);\n }\n }\n }\n\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {valueOrDefault} from '../helpers/helpers.core.js';\n\nexport default class BubbleController extends DatasetController {\n\n static id = 'bubble';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n\n /**\n\t * Parse array of primitive values\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n\n /**\n\t * Parse array of arrays\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n\n /**\n\t * Parse array of objects\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n\n update(mode) {\n const points = this._cachedMeta.data;\n\n // Update Points\n this.updateElements(points, 0, points.length, mode);\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n if (reset) {\n properties.options.radius = 0;\n }\n }\n\n this.updateElement(point, i, properties, mode);\n }\n }\n\n /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n\n // In case values were cached (and thus frozen), we need to clone the values\n if (values.$shared) {\n values = Object.assign({}, values, {$shared: false});\n }\n\n // Custom radius resolution\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n\n return values;\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isObject, resolveObjectKey, toPercentage, toDimension, valueOrDefault} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {toRadians, PI, TAU, HALF_PI, _angleBetween} from '../helpers/helpers.math.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {ratioX, ratioY, offsetX, offsetY};\n}\n\nexport default class DoughnutController extends DatasetController {\n\n static id = 'doughnut';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n // Boolean - Whether we animate the rotation of the Doughnut\n animateRotate: true,\n // Boolean - Whether we animate scaling the Doughnut from the centre\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n },\n },\n // The percentage of the chart that we cut out of the middle.\n cutout: '50%',\n\n // The rotation of the chart, where the first data arc begins.\n rotation: 0,\n\n // The total circumference of the chart.\n circumference: 360,\n\n // The outer radius of the chart\n radius: '100%',\n\n // Spacing between arcs\n spacing: 0,\n\n indexAxis: 'r',\n };\n\n static descriptors = {\n _scriptable: (name) => name !== 'spacing',\n _indexable: (name) => name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash'),\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n // Need to override these to give a nice default\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle, color}} = chart.legend.options;\n\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n return [];\n }\n },\n\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n\n linkScales() {}\n\n /**\n\t * Override data parsing, since we are not using scales\n\t */\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i) => +data[i];\n\n if (isObject(data[start])) {\n const {key = 'value'} = this._parsing;\n getter = (i) => +resolveObjectKey(data[i], key);\n }\n\n let i, ilen;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n\n /**\n\t * @private\n\t */\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n\n /**\n\t * @private\n\t */\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n\n /**\n\t * Get the maximal rotation & circumference extents\n\t * across all visible datasets.\n\t */\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n\n for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n\n return {\n rotation: min,\n circumference: max - min,\n };\n }\n\n /**\n\t * @param {string} mode\n\t */\n update(mode) {\n const chart = this.chart;\n const {chartArea} = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n\n // Compute the maximal rotation & circumference limits.\n // If we only consider our dataset, this can cause problems when two datasets\n // are both less than a circle with different rotations (starting angles)\n const {circumference, rotation} = this._getRotationExtents();\n const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n\n meta.total = this.calculateTotal();\n\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n\n /**\n * @private\n */\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n\n for (i = start; i < start + count; ++i) {\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n\n this.updateElement(arc, i, properties, mode);\n }\n }\n\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n\n for (i = 0; i < metaData.length; i++) {\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n\n return total;\n }\n\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n\n return {\n label: labels[index] || '',\n value,\n };\n }\n\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n\n if (!arcs) {\n // Find the outmost visible dataset\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n\n if (!arcs) {\n return 0;\n }\n\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n\n getMaxOffset(arcs) {\n let max = 0;\n\n for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n\n /**\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n\t * @private\n\t */\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n\n for (let i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n\n return ringWeightOffset;\n }\n\n /**\n\t * @private\n\t */\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n\n /**\n\t * Returns the sum of all visible data set weights.\n\t * @private\n\t */\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class LineController extends DatasetController {\n\n static id = 'line';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n\n showLine: true,\n spanGaps: false,\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n },\n _value_: {\n type: 'linear',\n },\n }\n };\n\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const {dataset: line, data: points = [], _dataset} = meta;\n // @ts-ignore\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n // Update Line\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n\n // Update Points\n this.updateElements(points, start, count, mode);\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (let i = 0; i < pointsCount; ++i) {\n const point = points[i];\n const properties = directUpdate ? point : {};\n\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {toRadians, PI, formatNumber, _parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class PolarAreaController extends DatasetController {\n\n static id = 'polarArea';\n\n /**\n * @type {any}\n */\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n },\n },\n indexAxis: 'r',\n startAngle: 0,\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle, color}} = chart.legend.options;\n\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n return [];\n }\n },\n\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n\n return {\n label: labels[index] || '',\n value,\n };\n }\n\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n\n update(mode) {\n const arcs = this._cachedMeta.data;\n\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n\n /**\n * @protected\n */\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n\n meta.data.forEach((element, index) => {\n const parsed = this.getParsed(index).r;\n\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n\n return range;\n }\n\n /**\n\t * @private\n\t */\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n\n this.outerRadius = outerRadius - (radiusLength * this.index);\n this.innerRadius = this.outerRadius - radiusLength;\n }\n\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n\n const defaultAngle = 360 / this.countVisibleElements();\n\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for (i = start; i < start + count; i++) {\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n\n this.updateElement(arc, i, properties, mode);\n }\n }\n\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n\n meta.data.forEach((element, index) => {\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n\n return count;\n }\n\n /**\n\t * @private\n\t */\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index)\n ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n : 0;\n }\n}\n","import DoughnutController from './controller.doughnut.js';\n\n// Pie charts are Doughnut chart with different defaults\nexport default class PieController extends DoughnutController {\n\n static id = 'pie';\n\n /**\n * @type {any}\n */\n static defaults = {\n // The percentage of the chart that we cut out of the middle.\n cutout: 0,\n\n // The rotation of the chart, where the first data arc begins.\n rotation: 0,\n\n // The total circumference of the chart.\n circumference: 360,\n\n // The outer radius of the chart\n radius: '100%'\n };\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {_parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class RadarController extends DatasetController {\n\n static id = 'radar';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n },\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n scales: {\n r: {\n type: 'radialLinear',\n }\n }\n };\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n\n // Update Line\n line.points = points;\n // In resize mode only point locations change, so no need to set the points or options.\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n\n this.updateElement(line, undefined, properties, mode);\n }\n\n // Update Points\n this.updateElements(points, 0, points.length, mode);\n }\n\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class ScatterController extends DatasetController {\n\n static id = 'scatter';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n\n interaction: {\n mode: 'point'\n },\n\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const {data: points = []} = meta;\n // @ts-ignore\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n if (this.options.showLine) {\n\n // https://github.com/chartjs/Chart.js/issues/11333\n if (!this.datasetElementType) {\n this.addElements();\n }\n const {dataset: line, _dataset} = meta;\n\n // Update Line\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n } else if (this.datasetElementType) {\n // https://github.com/chartjs/Chart.js/issues/11333\n delete meta.dataset;\n this.datasetElementType = false;\n }\n\n // Update Points\n this.updateElements(points, start, count, mode);\n }\n\n addElements() {\n const {showLine} = this.options;\n\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n\n super.addElements();\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n\n if (!this.options.showLine) {\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n\n if (!data.length) {\n return border;\n }\n\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\n","/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartOptions} from '../types/index.js';\n\nexport type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface DateAdapter<T extends AnyObject = AnyObject> {\n readonly options: T;\n /**\n * Will called with chart options after adapter creation.\n */\n init(this: DateAdapter<T>, chartOptions: ChartOptions): void;\n /**\n * Returns a map of time formats for the supported formatting units defined\n * in Unit as well as 'datetime' representing a detailed date/time string.\n */\n formats(this: DateAdapter<T>): Record<TimeUnit | 'datetime', string>;\n /**\n * Parses the given `value` and return the associated timestamp.\n * @param value - the value to parse (usually comes from the data)\n * @param [format] - the expected data format\n */\n parse(this: DateAdapter<T>, value: unknown, format?: string): number | null;\n /**\n * Returns the formatted date in the specified `format` for a given `timestamp`.\n * @param timestamp - the timestamp to format\n * @param format - the date/time token\n */\n format(this: DateAdapter<T>, timestamp: number, format: string): string;\n /**\n * Adds the specified `amount` of `unit` to the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param amount - the amount to add\n * @param unit - the unit as string\n */\n add(this: DateAdapter<T>, timestamp: number, amount: number, unit: TimeUnit): number;\n /**\n * Returns the number of `unit` between the given timestamps.\n * @param a - the input timestamp (reference)\n * @param b - the timestamp to subtract\n * @param unit - the unit as string\n */\n diff(this: DateAdapter<T>, a: number, b: number, unit: TimeUnit): number;\n /**\n * Returns start of `unit` for the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param unit - the unit as string\n * @param [weekday] - the ISO day of the week with 1 being Monday\n * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n */\n startOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number | boolean): number;\n /**\n * Returns end of `unit` for the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param unit - the unit as string\n */\n endOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit): number;\n}\n\nfunction abstract<T = void>(): T {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\nclass DateAdapterBase implements DateAdapter {\n\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */\n static override<T extends AnyObject = AnyObject>(\n members: Partial<Omit<DateAdapter<T>, 'options'>>\n ) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n\n readonly options: AnyObject;\n\n constructor(options?: AnyObject) {\n this.options = options || {};\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n\n formats(): Record<TimeUnit | 'datetime', string> {\n return abstract();\n }\n\n parse(): number | null {\n return abstract();\n }\n\n format(): string {\n return abstract();\n }\n\n add(): number {\n return abstract();\n }\n\n diff(): number {\n return abstract();\n }\n\n startOf(): number {\n return abstract();\n }\n\n endOf(): number {\n return abstract();\n }\n}\n\nexport default {\n _date: DateAdapterBase as {\n new (options?: AnyObject): DateAdapter;\n override<T extends AnyObject = AnyObject>(\n members: Partial<Omit<DateAdapter<T>, 'options'>>\n ): void;\n }\n};\n","import {_lookupByKey, _rlookupByKey} from '../helpers/helpers.collection.js';\nimport {getRelativePosition} from '../helpers/helpers.dom.js';\nimport {_angleBetween, getAngleFromPoint} from '../helpers/helpers.math.js';\nimport {_isPointInArea, isNullOrUndef} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef {{axis?: string, intersect?: boolean, includeInvisible?: boolean}} InteractionOptions\n * @typedef {{datasetIndex: number, index: number, element: import('./core.element.js').default}} InteractionItem\n * @typedef { import('../types/index.js').Point } Point\n */\n\n/**\n * Helper function to do binary search when possible\n * @param {object} metaset - the dataset meta\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {number} value - the value to find\n * @param {boolean} [intersect] - should the element intersect\n * @returns {{lo:number, hi:number}} indices to search data array between\n */\nfunction binarySearch(metaset, axis, value, intersect) {\n const {controller, data, _sorted} = metaset;\n const iScale = controller._cachedMeta.iScale;\n const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n const result = lookupMethod(data, axis, value);\n if (spanGaps) {\n const {vScale} = controller._cachedMeta;\n const {_parsed} = metaset;\n\n const distanceToDefinedLo = (_parsed\n .slice(0, result.lo + 1)\n .reverse()\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n result.lo -= Math.max(0, distanceToDefinedLo);\n\n const distanceToDefinedHi = (_parsed\n .slice(result.hi)\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n result.hi += Math.max(0, distanceToDefinedHi);\n }\n return result;\n } else if (controller._sharedOptions) {\n // _sharedOptions indicates that each element has equal options -> equal proportions\n // So we can do a ranged binary search based on the range of first element and\n // be confident to get the full range of indices that can intersect with the value.\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {lo: start.lo, hi: end.hi};\n }\n }\n }\n // Default to all elements, when binary search can not be used.\n return {lo: 0, hi: data.length - 1};\n}\n\n/**\n * Helper function to select candidate elements for interaction\n * @param {Chart} chart - the chart\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {function} handler - the callback to execute for each visible item\n * @param {boolean} [intersect] - consider intersecting items\n */\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n const {index, data} = metasets[i];\n const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n for (let j = lo; j <= hi; ++j) {\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {string} axis - the axis mode. x|y|xy|r\n */\nfunction getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param {Chart} chart - the chart\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n };\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a radial chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n\n function evaluationFunc(element, datasetIndex, index) {\n const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({element, datasetIndex, index});\n }\n }\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a cartesian chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [{element, datasetIndex, index}];\n minDistance = distance;\n } else if (distance === minDistance) {\n // Can have multiple items at the same distance in which case we sort by size\n items.push({element, datasetIndex, index});\n }\n }\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in the chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n\n return axis === 'r' && !intersect\n ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\n/**\n * Helper function to get the items matching along the given X or Y axis\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis to match\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({element, datasetIndex, index});\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n\n // If we want to trigger on an intersect and we don't have any items\n // that intersect the position, return nothing\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nexport default {\n // Part of the public API to facilitate developers creating their own modes\n evaluateInteractionItems,\n\n // Helper function for different modes\n modes: {\n /**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n // Default axis for index mode is 'x' to match old behaviour\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n\n if (!items.length) {\n return [];\n }\n\n chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n const index = items[0].index;\n const element = meta.data[index];\n\n // don't count items that are skipped (null data)\n if (element && !element.skip) {\n elements.push({element, datasetIndex: meta.index, index});\n }\n });\n\n return elements;\n },\n\n /**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n dataset(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for (let i = 0; i < data.length; ++i) {\n items.push({element: data[i], datasetIndex, index: i});\n }\n }\n\n return items;\n },\n\n /**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n point(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n\n /**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n\n /**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n x(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n\n /**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n y(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n","import {defined, each, isObject} from '../helpers/helpers.core.js';\nimport {toPadding} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n */\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n return array.filter(v => v.pos === position);\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\n\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b) => {\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ?\n v0.index - v1.index :\n v0.weight - v1.weight;\n });\n}\n\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n ({position: pos, options: {stack, stackWeight = 1}} = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && (pos + stack),\n stackWeight\n });\n }\n return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts) {\n const {stack, pos, stackWeight} = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n\n/**\n * store dimensions used instead of available chartArea in fitBoxes\n **/\nfunction setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const {vBoxMaxWidth, hBoxMaxHeight} = params;\n let i, ilen, layout;\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n const {fullSize} = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n const {pos, box} = layout;\n const maxPadding = chartArea.maxPadding;\n\n // dynamically placed boxes size is not considered\n if (!isObject(pos)) {\n if (layout.size) {\n // this layout was already counted for, lets first reduce old size\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {size: 0, count: 1};\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n\n // return booleans on the changes per direction\n return layout.horizontal\n ? {same: widthChanged, other: heightChanged}\n : {same: heightChanged, other: widthChanged};\n}\n\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n\n function marginForPositions(positions) {\n const margin = {left: 0, top: 0, right: 0, bottom: 0};\n positions.forEach((pos) => {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n\n return horizontal\n ? marginForPositions(['left', 'right'])\n : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n\n box.update(\n layout.width || chartArea.w,\n layout.height || chartArea.h,\n getMargins(layout.horizontal, chartArea)\n );\n const {same, other} = updateDims(chartArea, params, layout, stacks);\n\n // Dimensions changed and there were non full width boxes before this\n // -> we have to refit those\n refit |= same && refitBoxes.length;\n\n // Chart area changed in the opposite direction\n changed = changed || other;\n\n if (!box.fullSize) { // fullSize boxes don't need to be re-fitted in any case\n refitBoxes.push(layout);\n }\n }\n\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let {x, y} = chartArea;\n\n for (const layout of boxes) {\n const box = layout.box;\n const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n const weight = (layout.stackWeight / stack.weight) || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n\n chartArea.x = x;\n chartArea.y = y;\n}\n\n/**\n * @interface LayoutItem\n * @typedef {object} LayoutItem\n * @prop {string} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {boolean} fullSize - if true, and the item is horizontal, then push vertical boxes down\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\n * @prop {function} draw - Draws the element\n * @prop {function} [getPadding] - Returns an object with padding on the edges\n * @prop {number} width - Width of item. Must be valid after update()\n * @prop {number} height - Height of item. Must be valid after update()\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n\n// The layout service is very self explanatory. It's responsible for the layout within a chart.\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n// It is this service's responsibility of carrying out that layout.\nexport default {\n\n /**\n\t * Register a box to a chart.\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t * @param {Chart} chart - the chart to use\n\t * @param {LayoutItem} item - the item to add to be laid out\n\t */\n addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n\n // initialize item with default values\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n // @ts-ignore\n item._layers = item._layers || function() {\n return [{\n z: 0,\n draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n\n chart.boxes.push(item);\n },\n\n /**\n\t * Remove a layoutItem from a chart\n\t * @param {Chart} chart - the chart to remove the box from\n\t * @param {LayoutItem} layoutItem - the item to remove from the layout\n\t */\n removeBox(chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n\n /**\n\t * Sets (or updates) options on the given `item`.\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t * @param {LayoutItem} item - the item to configure with the given options\n\t * @param {object} options - the new item options.\n\t */\n configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n\n /**\n\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t * then running a fitting algorithm\n\t * @param {Chart} chart - the chart\n\t * @param {number} width - the width to fit into\n\t * @param {number} height - the height to fit into\n * @param {number} minPadding - minimum padding required for each side of chart area\n\t */\n update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n\n // Before any changes are made, notify boxes that an update is about to being\n // This is used to clear any cached data (e.g. scale limits)\n each(chart.boxes, box => {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n\n // Essentially we now have any number of boxes on each of the 4 sides.\n // Our canvas looks like the following.\n // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n // B1 is the bottom axis\n // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n // an error will be thrown.\n //\n // |----------------------------------------------------|\n // | T1 (Full Width) |\n // |----------------------------------------------------|\n // | | | T2 | |\n // | |----|-------------------------------------|----|\n // | | | C1 | | C2 | |\n // | | |----| |----| |\n // | | | | |\n // | L1 | L2 | ChartArea (C0) | R1 |\n // | | | | |\n // | | |----| |----| |\n // | | | C3 | | C4 | |\n // | |----|-------------------------------------|----|\n // | | | B1 | |\n // |----------------------------------------------------|\n // | B2 (Full Width) |\n // |----------------------------------------------------|\n //\n\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n\n // First fit the fullSize boxes, to reduce probability of re-fitting.\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n\n // Then fit vertical boxes\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n // Then fit horizontal boxes\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n // if the area changed, re-fit vertical boxes\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n\n handleMaxPadding(chartArea);\n\n // Finally place the boxes to correct coordinates\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n\n // Move to opposite side of chart\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w,\n };\n\n // Finally update boxes in chartArea (radial scale for example)\n each(boxes.chartArea, (layout) => {\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n });\n }\n};\n","\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\n/**\n * Abstract class that allows abstracting platform dependencies away from the chart.\n */\nexport default class BasePlatform {\n /**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific)\n\t * @param {number} [aspectRatio] - The chart options\n\t */\n acquireContext(canvas, aspectRatio) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {boolean} true if the method succeeded, else false\n\t */\n releaseContext(context) { // eslint-disable-line no-unused-vars\n return false;\n }\n\n /**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {string} type - The ({@link ChartEvent}) type to listen for\n\t * @param {function} listener - Receives a notification (an object that implements\n\t * the {@link ChartEvent} interface) when an event of the specified type occurs.\n\t */\n addEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart - Chart from which to remove the listener\n\t * @param {string} type - The ({@link ChartEvent}) type to remove\n\t * @param {function} listener - The listener function to remove from the event target.\n\t */\n removeEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * @returns {number} the current devicePixelRatio of the device this platform is connected to.\n\t */\n getDevicePixelRatio() {\n return 1;\n }\n\n /**\n\t * Returns the maximum size in pixels of given canvas element.\n\t * @param {HTMLCanvasElement} element\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @returns {boolean} true if the canvas is attached to the platform, false if not.\n\t */\n isAttached(canvas) { // eslint-disable-line no-unused-vars\n return true;\n }\n\n /**\n * Updates config with platform specific requirements\n * @param {import('../core/core.config.js').default} config\n */\n updateConfig(config) { // eslint-disable-line no-unused-vars\n // no-op\n }\n}\n","/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nimport BasePlatform from './platform.base.js';\n\n/**\n * Platform class for charts without access to the DOM or to many element properties\n * This platform is used by default for any chart passed an OffscreenCanvas.\n * @extends BasePlatform\n */\nexport default class BasicPlatform extends BasePlatform {\n acquireContext(item) {\n // To prevent canvas fingerprinting, some add-ons undefine the getContext\n // method, for example: https://github.com/kkapsner/CanvasBlocker\n // https://github.com/chartjs/Chart.js/issues/2807\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n","/**\n * Chart.Platform implementation for targeting a web browser\n */\n\nimport BasePlatform from './platform.base.js';\nimport {_getParentNode, getRelativePosition, supportsEventListenerOptions, readUsedSize, getMaximumSize} from '../helpers/helpers.dom.js';\nimport {throttled} from '../helpers/helpers.extras.js';\nimport {isNullOrUndef} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nconst EXPANDO_KEY = '$chartjs';\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nconst EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\n\nconst isNullOrEmpty = value => value === null || value === '';\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n * @param {HTMLCanvasElement} canvas\n * @param {number} [aspectRatio]\n */\nfunction initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n\n // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n // returns null or '' if no explicit value has been set to the canvas attribute.\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n\n // Chart.js modifies some canvas values that we want to restore on destroy\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n\n // Force canvas to display as block to avoid extra space caused by inline\n // elements, which would interfere with the responsive resize process.\n // https://github.com/chartjs/Chart.js/issues/2538\n style.display = style.display || 'block';\n // Include possible borders in the size\n style.boxSizing = style.boxSizing || 'border-box';\n\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n // If no explicit render height and style height, let's apply the aspect ratio,\n // which one can be specified by the user but also by charts as default option\n // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n\n return canvas;\n}\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addListener(node, type, listener) {\n if (node) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n}\n\nfunction removeListener(chart, type, listener) {\n if (chart && chart.canvas) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n }\n}\n\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const {x, y} = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null,\n };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList) {\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\n\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart) => {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height) => {\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n // If the container size shrank during chart resize, let's assume\n // scrollbar appeared. So we resize again with the scrollbar visible -\n // effectively making chart smaller and the scrollbar hidden again.\n // Because we are inside `throttled`, and currently `ticking`, scroll\n // events are ignored during this whole 2 resize process.\n // If we assumed wrong and something else happened, we are resizing\n // twice in a frame (potential performance issue)\n listener();\n }\n }, window);\n\n // @ts-ignore until https://github.com/microsoft/TypeScript/issues/37861 implemented\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n // When its container's display is set to 'none' the callback will be called with a\n // size of (0, 0), which will cause the chart to lose its original height, so skip\n // resizing in such case.\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n\n return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event) => {\n // This case can occur if the chart is destroyed while waiting\n // for the throttled function to occur. We prevent crashes by checking\n // for a destroyed chart\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n\n addListener(canvas, type, proxy);\n\n return proxy;\n}\n\n/**\n * Platform class for charts that can access the DOM and global window/document properties\n * @extends BasePlatform\n */\nexport default class DomPlatform extends BasePlatform {\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [aspectRatio]\n\t * @return {CanvasRenderingContext2D|null}\n\t */\n acquireContext(canvas, aspectRatio) {\n // To prevent canvas fingerprinting, some add-ons undefine the getContext\n // method, for example: https://github.com/kkapsner/CanvasBlocker\n // https://github.com/chartjs/Chart.js/issues/2807\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n\n // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the canvas is\n // inside an iframe or when running in a protected environment. We could guess the\n // types from their toString() value but let's keep things flexible and assume it's\n // a sufficient condition if the canvas has a context2D which has canvas as `canvas`.\n // https://github.com/chartjs/Chart.js/issues/3887\n // https://github.com/chartjs/Chart.js/issues/4102\n // https://github.com/chartjs/Chart.js/issues/4152\n if (context && context.canvas === canvas) {\n // Load platform resources on first chart creation, to make it possible to\n // import the library before setting platform options.\n initCanvas(canvas, aspectRatio);\n return context;\n }\n\n return null;\n }\n\n /**\n\t * @param {CanvasRenderingContext2D} context\n\t */\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n\n const initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach((prop) => {\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n\n const style = initial.style || {};\n Object.keys(style).forEach((key) => {\n canvas.style[key] = style[key];\n });\n\n // The canvas render size might have been changed (and thus the state stack discarded),\n // we can't use save() and restore() to restore the initial state. So make sure that at\n // least the canvas context is reset to the default state by setting the canvas width.\n // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n // eslint-disable-next-line no-self-assign\n canvas.width = canvas.width;\n\n delete canvas[EXPANDO_KEY];\n return true;\n }\n\n /**\n\t *\n\t * @param {Chart} chart\n\t * @param {string} type\n\t * @param {function} listener\n\t */\n addEventListener(chart, type, listener) {\n // Can have only one listener per type, so make sure previous is removed\n this.removeEventListener(chart, type);\n\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n\n\n /**\n\t * @param {Chart} chart\n\t * @param {string} type\n\t */\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n\n if (!proxy) {\n return;\n }\n\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t */\n isAttached(canvas) {\n const container = canvas && _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n","import type {AnyObject} from '../types/basic.js';\nimport type {Point} from '../types/geometric.js';\nimport type {Animation} from '../types/animation.js';\nimport {isNumber} from '../helpers/helpers.math.js';\n\nexport default class Element<T = AnyObject, O = AnyObject> {\n\n static defaults = {};\n static defaultRoutes = undefined;\n\n x: number;\n y: number;\n active = false;\n options: O;\n $animations: Record<keyof T, Animation>;\n\n tooltipPosition(useFinalPosition: boolean): Point {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y} as Point;\n }\n\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n\n /**\n * Gets the current or final value of each prop. Can return extra properties (whole object).\n * @param props - properties to get\n * @param [final] - get the final value (animation target)\n */\n getProps<P extends (keyof T)[]>(props: P, final?: boolean): Pick<T, P[number]>;\n getProps<P extends string>(props: P[], final?: boolean): Partial<Record<P, unknown>>;\n getProps(props: string[], final?: boolean): Partial<Record<string, unknown>> {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this as Record<string, unknown>;\n }\n const ret: Record<string, unknown> = {};\n props.forEach((prop) => {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop as string];\n });\n return ret;\n }\n}\n","import {isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\nimport {_factorize} from '../helpers/helpers.math.js';\n\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a subset of ticks to be plotted to avoid overlapping labels.\n * @param {import('./core.scale.js').default} scale\n * @param {Tick[]} ticks\n * @return {Tick[]}\n * @private\n */\nexport function autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n\n // If there are too many major ticks to display them all\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n\n/**\n * @param {number[]} majorIndices\n * @param {Tick[]} ticks\n * @param {number} ticksLimit\n */\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n\n // If the major ticks are evenly spaced apart, place the minor ticks\n // so that they divide the major ticks into even chunks\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n\n const factors = _factorize(evenMajorSpacing);\n for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\n\n/**\n * @param {Tick[]} ticks\n */\nfunction getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number[]} majorIndices\n * @param {number} spacing\n */\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n\n spacing = Math.ceil(spacing);\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number} spacing\n * @param {number} [majorStart]\n * @param {number} [majorEnd]\n */\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n\n next = start;\n\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n\n\n/**\n * @param {number[]} arr\n */\nfunction getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n\n if (len < 2) {\n return false;\n }\n\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n","import Element from './core.element.js';\nimport {_alignPixel, _measureText, renderText, clipArea, unclipArea} from '../helpers/helpers.canvas.js';\nimport {callback as call, each, finiteOrDefault, isArray, isFinite, isNullOrUndef, isObject, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toDegrees, toRadians, _int16Range, _limitValue, HALF_PI} from '../helpers/helpers.math.js';\nimport {_alignStartEnd, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {createContext, toFont, toPadding, _addGrace} from '../helpers/helpers.options.js';\nimport {autoSkip} from './core.scale.autoskip.js';\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);\n\n/**\n * @typedef { import('../types/index.js').Chart } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a new array containing numItems from arr\n * @param {any[]} arr\n * @param {number} numItems\n */\nfunction sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @param {boolean} offsetGridLines\n */\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n\n // Return undefined if the pixel is out of the range\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n\n/**\n * @param {object} caches\n * @param {number} length\n */\nfunction garbageCollect(caches, length) {\n each(caches, (cache) => {\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\n\n/**\n * @param {object} options\n */\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n\n/**\n * @param {object} options\n */\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n\n return (lines * font.lineHeight) + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\n\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\n\nfunction titleAlign(align, position, reverse) {\n /** @type {CanvasTextAlign} */\n let ret = _toLeftRightCenter(align);\n if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n ret = reverseAlign(ret);\n }\n return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n const {top, left, bottom, right, chart} = scale;\n const {chartArea, scales} = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {titleX, titleY, maxWidth, rotation};\n}\n\nexport default class Scale extends Element {\n\n // eslint-disable-next-line max-statements\n constructor(cfg) {\n super();\n\n /** @type {string} */\n this.id = cfg.id;\n /** @type {string} */\n this.type = cfg.type;\n /** @type {any} */\n this.options = undefined;\n /** @type {CanvasRenderingContext2D} */\n this.ctx = cfg.ctx;\n /** @type {Chart} */\n this.chart = cfg.chart;\n\n // implements box\n /** @type {number} */\n this.top = undefined;\n /** @type {number} */\n this.bottom = undefined;\n /** @type {number} */\n this.left = undefined;\n /** @type {number} */\n this.right = undefined;\n /** @type {number} */\n this.width = undefined;\n /** @type {number} */\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n /** @type {number} */\n this.maxWidth = undefined;\n /** @type {number} */\n this.maxHeight = undefined;\n /** @type {number} */\n this.paddingTop = undefined;\n /** @type {number} */\n this.paddingBottom = undefined;\n /** @type {number} */\n this.paddingLeft = undefined;\n /** @type {number} */\n this.paddingRight = undefined;\n\n // scale-specific properties\n /** @type {string=} */\n this.axis = undefined;\n /** @type {number=} */\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n /** @type {Tick[]} */\n this.ticks = [];\n /** @type {object[]|null} */\n this._gridLineItems = null;\n /** @type {object[]|null} */\n this._labelItems = null;\n /** @type {object|null} */\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n /** @type {number} */\n this._startPixel = undefined;\n /** @type {number} */\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n\n /**\n\t * @param {any} options\n\t * @since 3.0\n\t */\n init(options) {\n this.options = options.setContext(this.getContext());\n\n this.axis = options.axis;\n\n // parse min/max value, so we can properly determine min/max for other scales\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n\n /**\n\t * Parse a supported input value to internal representation.\n\t * @param {*} raw\n\t * @param {number} [index]\n\t * @since 3.0\n\t */\n parse(raw, index) { // eslint-disable-line no-unused-vars\n return raw;\n }\n\n /**\n\t * @return {{min: number, max: number, minDefined: boolean, maxDefined: boolean}}\n\t * @protected\n\t * @since 3.0\n\t */\n getUserBounds() {\n let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isFinite(_userMin),\n maxDefined: isFinite(_userMax)\n };\n }\n\n /**\n\t * @param {boolean} canStack\n\t * @return {{min: number, max: number}}\n\t * @protected\n\t * @since 3.0\n\t */\n getMinMax(canStack) {\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n let range;\n\n if (minDefined && maxDefined) {\n return {min, max};\n }\n\n const metas = this.getMatchingVisibleMetas();\n for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n\n // Make sure min <= max when only min or max is defined by user and the data is outside that range\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n\n /**\n\t * Get the padding needed for the scale\n\t * @return {{top: number, left: number, bottom: number, right: number}} the necessary padding\n\t * @private\n\t */\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n\n /**\n\t * Returns the scale tick objects\n\t * @return {Tick[]}\n\t * @since 2.7\n\t */\n getTicks() {\n return this.ticks;\n }\n\n /**\n\t * @return {string[]}\n\t */\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n\n /**\n * @return {import('../types.js').LabelItem[]}\n */\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n\n // When a new layout is created, reset the data limits cache\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n\n // These methods are ordered by lifecycle. Utilities then follow.\n // Any function defined here is inherited by all scale types.\n // Any function can be extended by the scale type\n\n beforeUpdate() {\n call(this.options.beforeUpdate, [this]);\n }\n\n /**\n\t * @param {number} maxWidth - the max width in pixels\n\t * @param {number} maxHeight - the max height in pixels\n\t * @param {{top: number, left: number, bottom: number, right: number}} margins - the space between the edge of the other scales and edge of the chart\n\t * This space comes from two sources:\n\t * - padding - space that's required to show the labels at the edges of the scale\n\t * - thickness of scales or legends in another orientation\n\t */\n update(maxWidth, maxHeight, margins) {\n const {beginAtZero, grace, ticks: tickOpts} = this.options;\n const sampleSize = tickOpts.sampleSize;\n\n // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n this.beforeUpdate();\n\n // Absorb the master measurements\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n\n // Dimensions\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n\n this._maxLength = this.isHorizontal()\n ? this.width + margins.left + margins.right\n : this.height + margins.top + margins.bottom;\n\n // Data min/max\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n\n this.beforeBuildTicks();\n\n this.ticks = this.buildTicks() || [];\n\n // Allow modification of ticks in callback.\n this.afterBuildTicks();\n\n // Compute tick rotation and fit using a sampled subset of labels\n // We generally don't need to compute the size of every single label for determining scale size\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n // configure is called twice, once here, once from core.controller.updateLayout.\n // Here we haven't been positioned yet, but dimensions are correct.\n // Variables set in configure are needed for calculateLabelRotation, and\n // it's ok that coordinates are not correct there, only dimensions matter.\n this.configure();\n\n // Tick Rotation\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation(); // Preconditions: number of ticks and sizes of largest labels must be calculated beforehand\n this.afterCalculateLabelRotation();\n\n // Auto-skip\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n\n if (samplingEnabled) {\n // Generate labels using all non-skipped ticks\n this._convertTicksToLabels(this.ticks);\n }\n\n this.beforeFit();\n this.fit(); // Preconditions: label rotation and label sizes must be calculated beforehand\n this.afterFit();\n\n // IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\n\n this.afterUpdate();\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n // by default vertical scales are from bottom to top, so pixels are reversed\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n\n afterUpdate() {\n call(this.options.afterUpdate, [this]);\n }\n\n //\n\n beforeSetDimensions() {\n call(this.options.beforeSetDimensions, [this]);\n }\n setDimensions() {\n // Set the unconstrained dimension before label rotation\n if (this.isHorizontal()) {\n // Reset position before calculating rotation\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n\n // Reset position before calculating rotation\n this.top = 0;\n this.bottom = this.height;\n }\n\n // Reset padding\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n call(this.options.afterSetDimensions, [this]);\n }\n\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n call(this.options[name], [this]);\n }\n\n // Data limits\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n\n //\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n /**\n\t * @return {object[]} the ticks\n\t */\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n\n beforeTickToLabelConversion() {\n call(this.options.beforeTickToLabelConversion, [this]);\n }\n /**\n\t * Convert ticks to label strings\n\t * @param {Tick[]} ticks\n\t */\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = call(tickOpts.callback, [tick.value, i, ticks], this);\n }\n }\n afterTickToLabelConversion() {\n call(this.options.afterTickToLabelConversion, [this]);\n }\n\n //\n\n beforeCalculateLabelRotation() {\n call(this.options.beforeCalculateLabelRotation, [this]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n\n // Estimate the width of each grid based on the canvas width, the maximum\n // label width and the number of tick intervals\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n // Allow 3 pixels x2 padding either side for label readability\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(\n Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n ));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n call(this.options.afterCalculateLabelRotation, [this]);\n }\n afterAutoSkip() {}\n\n //\n\n beforeFit() {\n call(this.options.beforeFit, [this]);\n }\n fit() {\n // Reset\n const minSize = {\n width: 0,\n height: 0\n };\n\n const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight; // fill all the height\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n\n // Don't bother fitting the ticks if we are not showing the labels\n if (tickOpts.display && this.ticks.length) {\n const {first, last, widest, highest} = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n\n if (isHorizontal) {\n // A horizontal axis is more constrained by the height.\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n // A vertical axis is more constrained by the width. Labels are the\n // dominant factor here, so get that length first and account for padding\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n\n this._handleMargins();\n\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n\n _calculatePadding(first, last, sin, cos) {\n const {ticks: {align, padding}, position} = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n\n // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n // which means that the right padding is dominated by the font height\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n\n // Adjust padding taking into account changes in offsets\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n\n /**\n\t * Handle margins and padding interactions\n\t * @private\n\t */\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n\n afterFit() {\n call(this.options.afterFit, [this]);\n }\n\n // Shared Methods\n /**\n\t * @return {boolean}\n\t */\n isHorizontal() {\n const {axis, position} = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n /**\n\t * @return {boolean}\n\t */\n isFullSize() {\n return this.options.fullSize;\n }\n\n /**\n\t * @param {Tick[]} ticks\n\t * @private\n\t */\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n\n this.generateTickLabels(ticks);\n\n // Ticks should be skipped when callback returns null or undef, so lets remove those.\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n\n this.afterTickToLabelConversion();\n }\n\n /**\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n\n return labelSizes;\n }\n\n /**\n\t * Returns {width, height, offset} objects for the first, last, widest, highest tick\n\t * labels where offset indicates the anchor point offset from the top in pixels.\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const {ctx, _longestTextCache: caches} = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n for (i = 0; i < length; i += increment) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n // Undefined labels and arrays should not be measured\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n // if it is an array let's measure each element\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = /** @type {string} */ (label[j]);\n // Undefined labels and arrays should not be measured\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n\n const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights,\n };\n }\n\n /**\n\t * Used to get the label to display in the tooltip for the given value\n\t * @param {*} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n return value;\n }\n\n /**\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {*} value\n\t * @param {number} [index]\n\t * @return {number}\n\t */\n getPixelForValue(value, index) { // eslint-disable-line no-unused-vars\n return NaN;\n }\n\n /**\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} pixel\n\t * @return {*}\n\t */\n getValueForPixel(pixel) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Returns the location of the tick at the given index\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} index\n\t * @return {number}\n\t */\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n\n /**\n\t * Utility for getting the pixel location of a percentage of scale\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} decimal\n\t * @return {number}\n\t */\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n\n /**\n\t * Returns the pixel for the minimum chart value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @return {number}\n\t */\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n\n /**\n\t * @return {number}\n\t */\n getBaseValue() {\n const {min, max} = this;\n\n return min < 0 && max < 0 ? max :\n min > 0 && max > 0 ? min :\n 0;\n }\n\n /**\n\t * @protected\n\t */\n getContext(index) {\n const ticks = this.ticks || [];\n\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n }\n\n /**\n\t * @return {number}\n\t * @private\n\t */\n _tickSize() {\n const optionTicks = this.options.ticks;\n\n // Calculate space needed by label in axis direction.\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n\n // Calculate space needed for 1 tick in axis direction.\n return this.isHorizontal()\n ? h * cos > w * sin ? w / cos : h / sin\n : h * sin < w * cos ? h / cos : w / sin;\n }\n\n /**\n\t * @return {boolean}\n\t * @private\n\t */\n _isVisible() {\n const display = this.options.display;\n\n if (display !== 'auto') {\n return !!display;\n }\n\n return this.getMatchingVisibleMetas().length > 0;\n }\n\n /**\n\t * @private\n\t */\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const {grid, position, border} = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for (i = 0; i < ticksLength; i += step) {\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n\n lineValue = getPixelForGridLine(this, i, offset);\n\n // Skip if the pixel is out of the range\n if (lineValue === undefined) {\n continue;\n }\n\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset,\n });\n }\n\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n\n return items;\n }\n\n /**\n\t * @private\n\t */\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const {position, ticks: optionTicks} = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const {align, crossAlign, padding, mirror} = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n\n const labelSizes = this._getLabelSizes();\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n\n if (isHorizontal) {\n x = pixel;\n\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += (lineHeight / 2) * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n\n let backdrop;\n\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n default:\n break;\n }\n\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n case 'inner':\n if (i === ilen - 1) {\n left -= width;\n } else if (i > 0) {\n left -= width / 2;\n }\n break;\n default:\n break;\n }\n\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n\n color: optsAtIndex.backdropColor,\n };\n }\n\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [x, y],\n backdrop,\n }\n });\n }\n\n return items;\n }\n\n _getXAxisLabelAlignment() {\n const {position, ticks} = this.options;\n const rotation = -toRadians(this.labelRotation);\n\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n\n let align = 'center';\n\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n\n return align;\n }\n\n _getYAxisLabelAlignment(tl) {\n const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n\n let textAlign;\n let x;\n\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += (widest / 2);\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n\n return {textAlign, x};\n }\n\n /**\n\t * @private\n\t */\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n\n const chart = this.chart;\n const position = this.options.position;\n\n if (position === 'left' || position === 'right') {\n return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n } if (position === 'top' || position === 'bottom') {\n return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n }\n }\n\n /**\n * @protected\n */\n drawBackground() {\n const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex(t => t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n\n /**\n\t * @protected\n\t */\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n\n const drawLine = (p1, p2, style) => {\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n\n if (grid.drawOnChartArea) {\n drawLine(\n {x: item.x1, y: item.y1},\n {x: item.x2, y: item.y2},\n item\n );\n }\n\n if (grid.drawTicks) {\n drawLine(\n {x: item.tx1, y: item.ty1},\n {x: item.tx2, y: item.ty2},\n {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n }\n );\n }\n }\n }\n }\n\n /**\n\t * @protected\n\t */\n drawBorder() {\n const {chart, ctx, options: {border, grid}} = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n\n ctx.restore();\n }\n\n /**\n\t * @protected\n\t */\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n\n if (!optionTicks.display) {\n return;\n }\n\n const ctx = this.ctx;\n\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n\n const items = this.getLabelItems(chartArea);\n for (const item of items) {\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n\n if (area) {\n unclipArea(ctx);\n }\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {\n const {ctx, options: {position, title, reverse}} = this;\n\n if (!title.display) {\n return;\n }\n\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n\n const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n\n /**\n\t * @return {object[]}\n\t * @private\n\t */\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n // backward compatibility: draw has been overridden by custom scale\n return [{\n z: tz,\n draw: (chartArea) => {\n this.draw(chartArea);\n }\n }];\n }\n\n return [{\n z: gz,\n draw: (chartArea) => {\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n }, {\n z: bz,\n draw: () => {\n this.drawBorder();\n }\n }, {\n z: tz,\n draw: (chartArea) => {\n this.drawLabels(chartArea);\n }\n }];\n }\n\n /**\n\t * Returns visible dataset metas that are attached to this scale\n\t * @param {string} [type] - if specified, also filter by dataset type\n\t * @return {object[]}\n\t */\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n\n /**\n\t * @param {number} index\n\t * @return {object}\n\t * @protected\n \t */\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n\n /**\n * @protected\n */\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n","import {merge} from '../helpers/index.js';\nimport defaults, {overrides} from './core.defaults.js';\n\n/**\n * @typedef {{id: string, defaults: any, overrides?: any, defaultRoutes: any}} IChartComponent\n */\n\nexport default class TypedRegistry {\n constructor(type, scope, override) {\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n\n /**\n\t * @param {IChartComponent} item\n\t * @returns {string} The scope where items defaults were registered to.\n\t */\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n\n if (isIChartComponent(proto)) {\n // Make sure the parent is registered and note the scope where its defaults are.\n parentScope = this.register(proto);\n }\n\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n\n if (id in items) {\n // already registered\n return scope;\n }\n\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n\n return scope;\n }\n\n /**\n\t * @param {string} id\n\t * @returns {object?}\n\t */\n get(id) {\n return this.items[id];\n }\n\n /**\n\t * @param {IChartComponent} item\n\t */\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n\n if (id in items) {\n delete items[id];\n }\n\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\n\nfunction registerDefaults(item, scope, parentScope) {\n // Inherit the parent's defaults and keep existing defaults\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n\n defaults.set(scope, itemDefaults);\n\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\n\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(property => {\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [scope].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\n\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n","import DatasetController from './core.datasetController.js';\nimport Element from './core.element.js';\nimport Scale from './core.scale.js';\nimport TypedRegistry from './core.typedRegistry.js';\nimport {each, callback as call, _capitalize} from '../helpers/helpers.core.js';\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Registry {\n constructor() {\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n // Order is important, Scale has Element in prototype chain,\n // so Scales must be before Elements. Plugins are a fallback, so not listed here.\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n\n /**\n\t * @param {...any} args\n\t */\n add(...args) {\n this._each('register', args);\n }\n\n remove(...args) {\n this._each('unregister', args);\n }\n\n /**\n\t * @param {...typeof DatasetController} args\n\t */\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n\n /**\n\t * @param {...typeof Element} args\n\t */\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n\n /**\n\t * @param {...any} args\n\t */\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n\n /**\n\t * @param {...typeof Scale} args\n\t */\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof DatasetController}\n\t */\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof Element}\n\t */\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {object}\n\t */\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof Scale}\n\t */\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n\n /**\n\t * @param {...typeof DatasetController} args\n\t */\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n\n /**\n\t * @param {...typeof Element} args\n\t */\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n\n /**\n\t * @param {...any} args\n\t */\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n\n /**\n\t * @param {...typeof Scale} args\n\t */\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n\n /**\n\t * @private\n\t */\n _each(method, args, typedRegistry) {\n [...args].forEach(arg => {\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n this._exec(method, reg, arg);\n } else {\n // Handle loopable args\n // Use case:\n // import * as plugins from './plugins.js';\n // Chart.register(plugins);\n each(arg, item => {\n // If there are mixed types in the loopable, make sure those are\n // registered in correct registry\n // Use case: (treemap exporting controller, elements etc)\n // import * as treemap from 'chartjs-chart-treemap.js';\n // Chart.register(treemap);\n\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n\n /**\n\t * @private\n\t */\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n call(component['before' + camelMethod], [], component); // beforeRegister / beforeUnregister\n registry[method](component);\n call(component['after' + camelMethod], [], component); // afterRegister / afterUnregister\n }\n\n /**\n\t * @private\n\t */\n _getRegistryForType(type) {\n for (let i = 0; i < this._typedRegistries.length; i++) {\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n // plugins is the fallback registry\n return this.plugins;\n }\n\n /**\n\t * @private\n\t */\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Registry();\n","import registry from './core.registry.js';\nimport {callback as callCallback, isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../plugins/plugin.tooltip.js').default } Tooltip\n */\n\n/**\n * @callback filterCallback\n * @param {{plugin: object, options: object}} value\n * @param {number} [index]\n * @param {array} [array]\n * @param {object} [thisArg]\n * @return {boolean}\n */\n\n\nexport default class PluginService {\n constructor() {\n this._init = [];\n }\n\n /**\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {object} [args] - Extra arguments to apply to the hook call.\n * @param {filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n\n /**\n\t * @private\n\t */\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors) {\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [chart, args, descriptor.options];\n if (callCallback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n\n return true;\n }\n\n invalidate() {\n // When plugins are registered, there is the possibility of a double\n // invalidate situation. In this case, we only want to invalidate once.\n // If we invalidate multiple times, the `_oldCache` is lost and all of the\n // plugins are restarted without being correctly stopped.\n // See https://github.com/chartjs/Chart.js/issues/8147\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n\n /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n\n const descriptors = this._cache = this._createDescriptors(chart);\n\n this._notifyStateChanges(chart);\n\n return descriptors;\n }\n\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n // options === false => all plugins are disabled\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n\n /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\n\n/**\n * @param {import('./core.config.js').default} config\n */\nfunction allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for (let i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n\n const local = config.plugins || [];\n for (let i = 0; i < local.length; i++) {\n const plugin = local[i];\n\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n\n return {plugins, localIds};\n}\n\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\n\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n const result = [];\n const context = chart.getContext();\n\n for (const plugin of plugins) {\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n });\n }\n\n return result;\n}\n\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n // make sure plugin defaults are in scopes for local (not registered) plugins\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [''], {\n // These are just defaults that plugins can override\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n","import defaults, {overrides, descriptors} from './core.defaults.js';\nimport {mergeIf, resolveObjectKey, isArray, isFunction, valueOrDefault, isObject} from '../helpers/helpers.core.js';\nimport {_attachContext, _createResolver, _descriptors} from '../helpers/helpers.config.js';\n\nexport function getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n}\n\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\n\nexport function determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions) {\n const axis = opts.axis\n || axisFromPosition(opts.position)\n || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n if (axis) {\n return axis;\n }\n }\n throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\n\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {axis};\n }\n}\n\nfunction retrieveAxisFromDatasets(id, config) {\n if (config.data && config.data.datasets) {\n const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id);\n if (boundDs.length) {\n return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n }\n }\n return {};\n}\n\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {scales: {}};\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n\n // First figure out first scale id's per axis.\n Object.keys(configScales).forEach(id => {\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n\n // Then merge dataset defaults to scale configs\n config.data.datasets.forEach(dataset => {\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(defaultID => {\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n\n // apply scale defaults, if not overridden by dataset defaults\n Object.keys(scales).forEach(key => {\n const scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n\n return scales;\n}\n\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\n\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n\n initOptions(config);\n\n return config;\n}\n\nconst keyCache = new Map();\nconst keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\n\nconst addIfFound = (set, obj, key) => {\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\n\nexport default class Config {\n constructor(config) {\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n\n get platform() {\n return this._config.platform;\n }\n\n get type() {\n return this._config.type;\n }\n\n set type(type) {\n this._config.type = type;\n }\n\n get data() {\n return this._config.data;\n }\n\n set data(data) {\n this._config.data = initData(data);\n }\n\n get options() {\n return this._config.options;\n }\n\n set options(options) {\n this._config.options = options;\n }\n\n get plugins() {\n return this._config.plugins;\n }\n\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n\n /**\n * Returns the option scope keys for resolving dataset options.\n * These keys do not include the dataset itself, because it is not under options.\n * @param {string} datasetType\n * @return {string[][]}\n */\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType,\n () => [[\n `datasets.${datasetType}`,\n ''\n ]]);\n }\n\n /**\n * Returns the option scope keys for resolving dataset animation options.\n * These keys do not include the dataset itself, because it is not under options.\n * @param {string} datasetType\n * @param {string} transition\n * @return {string[][]}\n */\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`,\n () => [\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`,\n ],\n // The following are used for looking up the `animations` and `animation` keys\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n\n /**\n * Returns the options scope keys for resolving element options that belong\n * to an dataset. These keys do not include the dataset itself, because it\n * is not under options.\n * @param {string} datasetType\n * @param {string} elementType\n * @return {string[][]}\n */\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`,\n () => [[\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]]);\n }\n\n /**\n * Returns the options scope keys for resolving plugin options.\n * @param {{id: string, additionalOptionScopes?: string[]}} plugin\n * @return {string[][]}\n */\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`,\n () => [[\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || [],\n ]]);\n }\n\n /**\n * @private\n */\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n\n /**\n * Resolves the objects from options and defaults for option value resolution.\n * @param {object} mainScope - The main scope object for options\n * @param {string[][]} keyLists - The arrays of keys in resolution order\n * @param {boolean} [resetCache] - reset the cache for this mainScope\n */\n getOptionScopes(mainScope, keyLists, resetCache) {\n const {options, type} = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n\n const scopes = new Set();\n\n keyLists.forEach(keys => {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(key => addIfFound(scopes, mainScope, key));\n }\n keys.forEach(key => addIfFound(scopes, options, key));\n keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach(key => addIfFound(scopes, defaults, key));\n keys.forEach(key => addIfFound(scopes, descriptors, key));\n });\n\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n\n /**\n * Returns the option scopes for resolving chart options\n * @return {object[]}\n */\n chartOptionScopes() {\n const {options, type} = this;\n\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {}, // https://github.com/chartjs/Chart.js/issues/8531\n {type},\n defaults,\n descriptors\n ];\n }\n\n /**\n * @param {object[]} scopes\n * @param {string[]} names\n * @param {function|object} context\n * @param {string[]} [prefixes]\n * @return {object}\n */\n resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n const result = {$shared: true};\n const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n // subResolver is passed to scriptable options. It should not resolve to hover options.\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n\n for (const prop of names) {\n result[prop] = options[prop];\n }\n return result;\n }\n\n /**\n * @param {object[]} scopes\n * @param {object} [context]\n * @param {string[]} [prefixes]\n * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults]\n */\n createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context)\n ? _attachContext(resolver, context, undefined, descriptorDefaults)\n : resolver;\n }\n}\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\n\nconst hasFunction = value => isObject(value)\n && Object.getOwnPropertyNames(value).some((key) => isFunction(value[key]));\n\nfunction needContext(proxy, names) {\n const {isScriptable, isIndexable} = _descriptors(proxy);\n\n for (const prop of names) {\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if ((scriptable && (isFunction(value) || hasFunction(value)))\n || (indexable && isArray(value))) {\n return true;\n }\n }\n return false;\n}\n","import animator from './core.animator.js';\nimport defaults, {overrides} from './core.defaults.js';\nimport Interaction from './core.interaction.js';\nimport layouts from './core.layouts.js';\nimport {_detectPlatform} from '../platform/index.js';\nimport PluginService from './core.plugins.js';\nimport registry from './core.registry.js';\nimport Config, {determineAxis, getIndexAxis} from './core.config.js';\nimport {retinaScale, _isDomSupported} from '../helpers/helpers.dom.js';\nimport {each, callback as callCallback, uid, valueOrDefault, _elementsEqual, isNullOrUndef, setsEqual, defined, isFunction, _isClickEvent} from '../helpers/helpers.core.js';\nimport {clearCanvas, clipArea, createContext, unclipArea, _isPointInArea} from '../helpers/index.js';\n// @ts-ignore\nimport {version} from '../../package.json';\nimport {debounce} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').Point } Point\n */\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\n\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1]\n ? a[l2] - b[l2]\n : a[l1] - b[l1];\n };\n}\n\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n\n chart.notifyPlugins('afterRender');\n callCallback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callCallback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\n/**\n * Chart.js can take a string id of a canvas element, a 2d context, or a canvas element itself.\n * Attempt to unwrap the item passed into the chart constructor so that it is a canvas element (if possible).\n */\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n // Support for array based queries (such as jQuery)\n item = item[0];\n }\n\n if (item && item.canvas) {\n // Support for any object associated to a canvas (including a context2d)\n item = item.canvas;\n }\n return item;\n}\n\nconst instances = {};\nconst getChart = (key) => {\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys) {\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n\n/**\n * @param {ChartEvent} e\n * @param {ChartEvent|null} lastEvent\n * @param {boolean} inChartArea\n * @param {boolean} isClick\n * @returns {ChartEvent|null}\n */\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\n\nfunction getSizeForArea(scale, chartArea, field) {\n return scale.options.clip ? scale[field] : chartArea[field];\n}\n\nfunction getDatasetArea(meta, chartArea) {\n const {xScale, yScale} = meta;\n if (xScale && yScale) {\n return {\n left: getSizeForArea(xScale, chartArea, 'left'),\n right: getSizeForArea(xScale, chartArea, 'right'),\n top: getSizeForArea(yScale, chartArea, 'top'),\n bottom: getSizeForArea(yScale, chartArea, 'bottom')\n };\n }\n return chartArea;\n}\n\nclass Chart {\n\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n\n // eslint-disable-next-line max-statements\n constructor(item, userConfig) {\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error(\n 'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n );\n }\n\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n // Store the previously used aspect ratio to determine if a resize\n // is needed during updates. Do this after _options is set since\n // aspectRatio uses a getter\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n /** @type {?{attach?: function, detach?: function, resize?: function}} */\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n\n // Add the chart instance to the global namespace\n instances[this.id] = this;\n\n if (!context || !canvas) {\n // The given item is not a compatible context2d element, let's return before finalizing\n // the chart initialization but after setting basic chart / controller properties that\n // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n // https://github.com/chartjs/Chart.js/issues/2807\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n\n get aspectRatio() {\n const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n if (!isNullOrUndef(aspectRatio)) {\n // If aspectRatio is defined in options, use that.\n return aspectRatio;\n }\n\n if (maintainAspectRatio && _aspectRatio) {\n // If maintainAspectRatio is truthly and we had previously determined _aspectRatio, use that\n return _aspectRatio;\n }\n\n // Calculate\n return height ? width / height : null;\n }\n\n get data() {\n return this.config.data;\n }\n\n set data(data) {\n this.config.data = data;\n }\n\n get options() {\n return this._options;\n }\n\n set options(options) {\n this.config.options = options;\n }\n\n get registry() {\n return registry;\n }\n\n /**\n\t * @private\n\t */\n _initialize() {\n // Before init plugin notification\n this.notifyPlugins('beforeInit');\n\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n\n this.bindEvents();\n\n // After init plugin notification\n this.notifyPlugins('afterInit');\n\n return this;\n }\n\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n\n stop() {\n animator.stop(this);\n return this;\n }\n\n /**\n\t * Resize the chart to its container or to explicit dimensions.\n\t * @param {number} [width]\n\t * @param {number} [height]\n\t */\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {width, height};\n }\n }\n\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n\n this.notifyPlugins('resize', {size: newSize});\n\n callCallback(options.onResize, [this, newSize], this);\n\n if (this.attached) {\n if (this._doResize(mode)) {\n // The resize update is delayed, only draw without updating.\n this.render();\n }\n }\n }\n\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n\n each(scalesOptions, (axisOptions, axisID) => {\n axisOptions.id = axisID;\n });\n }\n\n /**\n\t * Builds a map of scale ID to scale object for future lookup.\n\t */\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id) => {\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n\n if (scaleOpts) {\n items = items.concat(\n Object.keys(scaleOpts).map((id) => {\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n })\n );\n }\n\n each(items, (item) => {\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n\n scale.init(scaleOptions, options);\n });\n // clear up discarded scales\n each(updated, (hasUpdated, id) => {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n\n each(scales, (scale) => {\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n\n /**\n\t * @private\n\t */\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n\n metasets.sort((a, b) => a.index - b.index);\n if (numMeta > numData) {\n for (let i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n\n /**\n\t * @private\n\t */\n _removeUnreferencedMetasets() {\n const {_metasets: metasets, data: {datasets}} = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index) => {\n if (datasets.filter(x => x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n\n this._removeUnreferencedMetasets();\n\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const {datasetElementType, dataElementType} = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n\n this._updateMetasets();\n return newControllers;\n }\n\n /**\n\t * Reset the elements of all datasets\n\t * @private\n\t */\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex) => {\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n\n /**\n\t* Resets the chart back to its state before the initial animation\n\t*/\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n\n update(mode) {\n const config = this.config;\n\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n\n // plugins options references might have change, let's invalidate the cache\n // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n this._plugins.invalidate();\n\n if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n\n // Make sure dataset controllers are updated and new controllers are reset\n const newControllers = this.buildOrUpdateControllers();\n\n this.notifyPlugins('beforeElementsUpdate');\n\n // Make sure all dataset controllers have correct meta data counts\n let minPadding = 0;\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n const {controller} = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n // New controllers will be reset after the layout pass, so we only want to modify\n // elements added to new datasets\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n\n // Only reset the controllers if we have animations\n if (!animsDisabled) {\n // Can only reset the new controllers after the scales have been updated\n // Reset is done to get the starting point for the initial animation\n each(newControllers, (controller) => {\n controller.reset();\n });\n }\n\n this._updateDatasets(mode);\n\n // Do this before render so that any plugins that need final scale updates can use it\n this.notifyPlugins('afterUpdate', {mode});\n\n this._layers.sort(compare2Level('z', '_idx'));\n\n // Replay last event from before update, or set hover styles on active elements\n const {_active, _lastEvent} = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n\n this.render();\n }\n\n /**\n * @private\n */\n _updateScales() {\n each(this.scales, (scale) => {\n layouts.removeBox(this, scale);\n });\n\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n\n /**\n * @private\n */\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n // The configured events have changed. Rebind.\n this.unbindEvents();\n this.bindEvents();\n }\n }\n\n /**\n * @private\n */\n _updateHiddenIndices() {\n const {_hiddenIndices} = this;\n const changes = this._getUniformDataChanges() || [];\n for (const {method, start, count} of changes) {\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n\n /**\n * @private\n */\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx) => new Set(\n _dataChanges\n .filter(c => c[0] === idx)\n .map((c, i) => i + ',' + c.splice(1).join(','))\n );\n\n const changeSet = makeSet(0);\n for (let i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet)\n .map(c => c.split(','))\n .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n }\n\n /**\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t * @private\n\t */\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n return;\n }\n\n layouts.update(this, this.width, this.height, minPadding);\n\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n\n this._layers = [];\n each(this.boxes, (box) => {\n if (noArea && box.position === 'chartArea') {\n // Skip drawing and configuring chartArea boxes when chartArea is zero or negative\n return;\n }\n\n // configure is called twice, once in core.scale.update and once here.\n // Here the boxes are fully updated and at their final positions.\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n\n this._layers.forEach((item, index) => {\n item._idx = index;\n });\n\n this.notifyPlugins('afterLayout');\n }\n\n /**\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t * @private\n\t */\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n }\n\n this.notifyPlugins('afterDatasetsUpdate', {mode});\n }\n\n /**\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t * @private\n\t */\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {meta, index, mode, cancelable: true};\n\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n\n meta.controller._update(mode);\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n\n render() {\n if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n return;\n }\n\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({chart: this});\n }\n }\n\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const {width, height} = this._resizeBeforeDraw;\n // Unset pending resize request now to avoid possible recursion within _resize\n this._resizeBeforeDraw = null;\n this._resize(width, height);\n }\n this.clear();\n\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n\n if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n return;\n }\n\n // Because of plugin hooks (before/afterDatasetsDraw), datasets can't\n // currently be part of layers. Instead, we draw\n // layers <= 0 before(default, backward compat), and the rest after\n const layers = this._layers;\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this._drawDatasets();\n\n // Rest of layers\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this.notifyPlugins('afterDraw');\n }\n\n /**\n\t * @private\n\t */\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n\n return result;\n }\n\n /**\n\t * Gets the visible dataset metas in drawing order\n\t * @return {object[]}\n\t */\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n\n /**\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t * @private\n\t */\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n return;\n }\n\n const metasets = this.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n\n this.notifyPlugins('afterDatasetsDraw');\n }\n\n /**\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t * @private\n\t */\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = getDatasetArea(meta, this.chartArea);\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n\n meta.controller.draw();\n\n if (useClip) {\n unclipArea(ctx);\n }\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n\n /**\n * Checks whether the given point is in the chart area.\n * @param {Point} point - in relative coordinates (see, e.g., getRelativePosition)\n * @returns {boolean}\n */\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n\n return [];\n }\n\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\t\t\t// See isDatasetVisible() comment\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n\n return meta;\n }\n\n getContext() {\n return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n }\n\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n\n const meta = this.getDatasetMeta(datasetIndex);\n\n // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n\n /**\n\t * @private\n\t */\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n // Animate visible state, so hide animation can be seen. This could be handled better if update / updateDataset returned a Promise.\n anims.update(meta, {visible});\n this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n\n /**\n\t * @private\n\t */\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const {canvas, ctx} = this;\n\n this._stop();\n this.config.clearCache();\n\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n\n delete instances[this.id];\n\n this.notifyPlugins('afterDestroy');\n }\n\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n\n /**\n\t * @private\n\t */\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n\n /**\n * @private\n */\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n\n const listener = (e, x, y) => {\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n\n each(this.options.events, (type) => _add(type, listener));\n }\n\n /**\n * @private\n */\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener) => {\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n\n const listener = (width, height) => {\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n\n let detached; // eslint-disable-line prefer-const\n const attached = () => {\n _remove('attach', attached);\n\n this.attached = true;\n this.resize();\n\n _add('resize', listener);\n _add('detach', detached);\n };\n\n detached = () => {\n this.attached = false;\n\n _remove('resize', listener);\n\n // Stop animating and remove metasets, so when re-attached, the animations start from beginning.\n this._stop();\n this._resize(0, 0);\n\n _add('attach', attached);\n };\n\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n\n /**\n\t * @private\n\t */\n unbindEvents() {\n each(this._listeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n\n each(this._responsiveListeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n\n /**\n\t * Get active (hovered) elements\n\t * @returns array\n\t */\n getActiveElements() {\n return this._active || [];\n }\n\n /**\n\t * Set active (hovered) elements\n\t * @param {array} activeElements New active data points\n\t */\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n\n if (changed) {\n this._active = active;\n // Make sure we don't use the previous mouse event to override the active elements in update.\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n\n /**\n\t * Calls enabled plugins on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {Object} [args] - Extra arguments to apply to the hook call.\n * @param {import('./core.plugins.js').filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n\n /**\n * Check if a plugin with the specific ID is registered and enabled\n * @param {string} pluginId - The ID of the plugin of which to check if it is enabled\n * @returns {boolean}\n */\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter(p => p.plugin.id === pluginId).length === 1;\n }\n\n /**\n\t * @private\n\t */\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n\n /**\n\t * @private\n\t */\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n\n const changed = this._handleEvent(e, replay, args.inChartArea);\n\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n\n if (changed || args.changed) {\n this.render();\n }\n\n return this;\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e the event to handle\n\t * @param {boolean} [replay] - true if the event was replayed by `update`\n * @param {boolean} [inChartArea] - true if the event is inside chartArea\n\t * @return {boolean} true if the chart needs to re-render\n\t * @private\n\t */\n _handleEvent(e, replay, inChartArea) {\n const {_active: lastActive = [], options} = this;\n\n // If the event is replayed from `update`, we should evaluate with the final positions.\n //\n // The `replay`:\n // It's the last event (excluding click) that has occurred before `update`.\n // So mouse has not moved. It's also over the chart, because there is a `replay`.\n //\n // The why:\n // If animations are active, the elements haven't moved yet compared to state before update.\n // But if they will, we are activating the elements that would be active, if this check\n // was done after the animations have completed. => \"final positions\".\n // If there is no animations, the \"final\" and \"current\" positions are equal.\n // This is done so we do not have to evaluate the active elements each animation frame\n // - it would be expensive.\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n if (inChartArea) {\n // Set _lastEvent to null while we are processing the event handlers.\n // This prevents recursion if the handler calls chart.update()\n this._lastEvent = null;\n\n // Invoke onHover hook\n callCallback(options.onHover, [e, active, this], this);\n\n if (isClick) {\n callCallback(options.onClick, [e, active, this], this);\n }\n }\n\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n\n this._lastEvent = lastEvent;\n\n return changed;\n }\n\n /**\n * @param {ChartEvent} e - The event\n * @param {import('../types/index.js').ActiveElement[]} lastActive - Previously active elements\n * @param {boolean} inChartArea - Is the event inside chartArea\n * @param {boolean} useFinalPosition - Should the evaluation be done with current or final (after animation) element positions\n * @returns {import('../types/index.js').ActiveElement[]} - The active elements\n * @pravate\n */\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n // Let user control the active elements outside chartArea. Eg. using Legend.\n return lastActive;\n }\n\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\n\n// @ts-ignore\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart) => chart._plugins.invalidate());\n}\n\nexport default Chart;\n","import {_isDomSupported} from '../helpers/index.js';\nimport BasePlatform from './platform.base.js';\nimport BasicPlatform from './platform.basic.js';\nimport DomPlatform from './platform.dom.js';\n\nexport function _detectPlatform(canvas) {\n if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nexport {BasePlatform, BasicPlatform, DomPlatform};\n","import Element from '../core/core.element.js';\nimport {_angleBetween, getAngleFromPoint, TAU, HALF_PI, valueOrDefault} from '../helpers/index.js';\nimport {PI, _isBetween, _limitValue} from '../helpers/helpers.math.js';\nimport {_readValueToProps} from '../helpers/helpers.options.js';\nimport type {ArcOptions, Point} from '../types/index.js';\n\n\nfunction clipArc(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n let angleMargin = pixelMargin / outerRadius;\n\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\n/**\n * Parse border radius from the provided options\n */\nfunction parseBorderRadius(arc: ArcElement, innerRadius: number, outerRadius: number, angleDelta: number) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = (val) => {\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n };\n}\n\n/**\n * Convert (r, ðœƒ) to (x, y)\n */\nfunction rThetaToXY(r: number, theta: number, x: number, y: number) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta),\n };\n}\n\n\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */\nfunction pathArc(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n end: number,\n circular: boolean,\n) {\n const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n\n let spacingOffset = 0;\n const alpha = end - start;\n\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius(element, innerRadius, outerRadius, endAngle - startAngle);\n\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n\n ctx.beginPath();\n\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = ((endAngle - (innerEnd / innerRadius)) + (startAngle + (innerStart / innerRadius))) / 2;\n ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + (innerStart / innerRadius), true);\n\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n\n ctx.closePath();\n}\n\nfunction drawArc(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n circular: boolean,\n) {\n const {fullCircles, startAngle, circumference} = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\n\nfunction drawBorder(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n circular: boolean,\n) {\n const {fullCircles, startAngle, circumference, options} = element;\n const {borderWidth, borderJoinStyle, borderDash, borderDashOffset} = options;\n const inner = options.borderAlign === 'inner';\n\n if (!borderWidth) {\n return;\n }\n\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\n\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\n\nexport interface ArcProps extends Point {\n startAngle: number;\n endAngle: number;\n innerRadius: number;\n outerRadius: number;\n circumference: number;\n}\n\nexport default class ArcElement extends Element<ArcProps, ArcOptions> {\n\n static id = 'arc';\n\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true,\n };\n\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n\n static descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash'\n };\n\n circumference: number;\n endAngle: number;\n fullCircles: number;\n innerRadius: number;\n outerRadius: number;\n pixelMargin: number;\n startAngle: number;\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n inRange(chartX: number, chartY: number, useFinalPosition: boolean) {\n const point = this.getProps(['x', 'y'], useFinalPosition);\n const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n const betweenAngles = _circumference >= TAU || nonZeroBetween;\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n return (betweenAngles && withinRadius);\n }\n\n getCenterPoint(useFinalPosition: boolean) {\n const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ], useFinalPosition);\n const {offset, spacing} = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n\n tooltipPosition(useFinalPosition: boolean) {\n return this.getCenterPoint(useFinalPosition);\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n const {options, circumference} = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n\n ctx.save();\n\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n\n ctx.restore();\n }\n}\n","import Element from '../core/core.element.js';\nimport {_bezierInterpolation, _pointInLine, _steppedInterpolation} from '../helpers/helpers.interpolation.js';\nimport {_computeSegments, _boundSegments} from '../helpers/helpers.segment.js';\nimport {_steppedLineTo, _bezierCurveTo} from '../helpers/helpers.canvas.js';\nimport {_updateBezierControlPoints} from '../helpers/helpers.curve.js';\nimport {valueOrDefault} from '../helpers/index.js';\n\n/**\n * @typedef { import('./element.point.js').default } PointElement\n */\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @returns {any}\n */\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n\n return lineTo;\n}\n\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n const {start: segmentStart, end: segmentEnd} = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction pathSegment(ctx, line, segment, params) {\n const {points, options} = line;\n const {count, start, loop, ilen} = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n // eslint-disable-next-line prefer-const\n let {move = true, reverse} = params || {};\n let i, point, prev;\n\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n\n if (point.skip) {\n // If there is a skipped point inside a segment, spanGaps must be true\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n prev = point;\n }\n\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n return !!loop;\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {count, start, ilen} = pathVars(points, segment, params);\n const {move = true, reverse} = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n\n const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n // Draw line to maxY and minY, using the average x-coordinate\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n // Line to y-value of last point in group. So the line continues\n // from correct position. Not using move, to have solid path.\n ctx.lineTo(avgX, lastY);\n }\n };\n\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n\n if (point.skip) {\n // If there is a skipped point inside a segment, spanGaps must be true\n continue;\n }\n\n const x = point.x;\n const y = point.y;\n const truncX = x | 0; // truncated x-coordinate\n\n if (truncX === prevX) {\n // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n // For first point in group, countX is `0`, so average will be `x` / 1.\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n // Draw line to next x-position, using the first (or only)\n // y-value in that group\n ctx.lineTo(x, y);\n\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n // Keep track of the last y-value in group\n lastY = y;\n }\n drawX();\n}\n\n/**\n * @param {LineElement} line - the line\n * @returns {function}\n * @private\n */\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n\n/**\n * @private\n */\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n\n return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n const {segments, options} = line;\n const segmentMethod = _getSegmentMethod(line);\n\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\n\nconst usePath2D = typeof Path2D === 'function';\n\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\n\nexport default class LineElement extends Element {\n\n static id = 'line';\n\n /**\n * @type {any}\n */\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0,\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n\n static descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n };\n\n\n constructor(cfg) {\n super();\n\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n\n get points() {\n return this._points;\n }\n\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n\n /**\n\t * First non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n\n /**\n\t * Last non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n\n /**\n\t * Interpolate a point in this line at the same value on `property` as\n\t * the reference `point` provided\n\t * @param {PointElement} point - the reference point\n\t * @param {string} property - the property to match on\n\t * @returns {PointElement|undefined}\n\t */\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {property, start: value, end: value});\n\n if (!segments.length) {\n return;\n }\n\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {start, end} = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n\n /**\n\t * Append a segment of this line to current path.\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} segment\n\t * @param {number} segment.start - start index of the segment, referring the points array\n \t * @param {number} segment.end - end index of the segment, referring the points array\n \t * @param {boolean} segment.loop - indicates that the segment is a loop\n\t * @param {object} params\n\t * @param {boolean} params.move - move to starting point (vs line to it)\n\t * @param {boolean} params.reverse - path the segment from end to start\n\t * @param {number} params.start - limit segment to points starting from `start` index\n\t * @param {number} params.end - limit segment to points ending at `start` + `count` index\n\t * @returns {undefined|boolean} - true if the segment is a full loop (path should be closed)\n\t */\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n\n /**\n\t * Append all segments of this line to current path.\n\t * @param {CanvasRenderingContext2D|Path2D} ctx\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t * @returns {undefined|boolean} - true if line is a full loop (path should be closed)\n\t */\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n\n start = start || 0;\n count = count || (this.points.length - start);\n\n for (const segment of segments) {\n loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n }\n return !!loop;\n }\n\n /**\n\t * Draw\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} chartArea\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t */\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n\n if (points.length && options.borderWidth) {\n ctx.save();\n\n draw(ctx, this, start, count);\n\n ctx.restore();\n }\n\n if (this.animated) {\n // When line is animated, the control points and path are not cached.\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n","import Element from '../core/core.element.js';\nimport {drawPoint, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport type {\n CartesianParsedData,\n ChartArea,\n Point,\n PointHoverOptions,\n PointOptions,\n} from '../types/index.js';\n\nfunction inRange(el: PointElement, pos: number, axis: 'x' | 'y', useFinalPosition?: boolean) {\n const options = el.options;\n const {[axis]: value} = el.getProps([axis], useFinalPosition);\n\n return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\n\nexport type PointProps = Point\n\nexport default class PointElement extends Element<PointProps, PointOptions & PointHoverOptions> {\n\n static id = 'point';\n\n parsed: CartesianParsedData;\n skip?: boolean;\n stop?: boolean;\n\n /**\n * @type {any}\n */\n static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean) {\n const options = this.options;\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n }\n\n inXRange(mouseX: number, useFinalPosition?: boolean) {\n return inRange(this, mouseX, 'x', useFinalPosition);\n }\n\n inYRange(mouseY: number, useFinalPosition?: boolean) {\n return inRange(this, mouseY, 'y', useFinalPosition);\n }\n\n getCenterPoint(useFinalPosition?: boolean) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n\n size(options?: Partial<PointOptions & PointHoverOptions>) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n\n draw(ctx: CanvasRenderingContext2D, area: ChartArea) {\n const options = this.options;\n\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n","import Element from '../core/core.element.js';\nimport {isObject, _isBetween, _limitValue} from '../helpers/index.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {toTRBL, toTRBLCorners} from '../helpers/helpers.options.js';\n\n/** @typedef {{ x: number, y: number, base: number, horizontal: boolean, width: number, height: number }} BarProps */\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param {BarElement} bar the bar\n * @param {boolean} [useFinalPosition]\n * @return {object} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar, useFinalPosition) {\n const {x, y, base, width, height} = /** @type {BarProps} */ (bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition));\n\n let left, right, top, bottom, half;\n\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n\n return {left, top, right, bottom};\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n\n // If the value is an object, assume the user knows what they are doing\n // and apply as directed.\n const enableBorder = enableBorderRadius || isObject(value);\n\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\n\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n }\n }\n };\n}\n\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n\n return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\n/**\n * Add a path of a rectangle to the current sub-path\n * @param {CanvasRenderingContext2D} ctx Context\n * @param {*} rect Bounding rect\n */\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\n\nexport default class BarElement extends Element {\n\n static id = 'bar';\n\n /**\n * @type {any}\n */\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n draw(ctx) {\n const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n const {inner, outer} = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n\n ctx.save();\n\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n\n ctx.restore();\n }\n\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n\n getCenterPoint(useFinalPosition) {\n const {x, y, base, horizontal} = /** @type {BarProps} */ (this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition));\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n","import {DoughnutController, PolarAreaController, defaults} from '../index.js';\nimport type {Chart, ChartDataset} from '../types.js';\n\nexport interface ColorsPluginOptions {\n enabled?: boolean;\n forceOverride?: boolean;\n}\n\ninterface ColorsDescriptor {\n backgroundColor?: unknown;\n borderColor?: unknown;\n}\n\nconst BORDER_COLORS = [\n 'rgb(54, 162, 235)', // blue\n 'rgb(255, 99, 132)', // red\n 'rgb(255, 159, 64)', // orange\n 'rgb(255, 205, 86)', // yellow\n 'rgb(75, 192, 192)', // green\n 'rgb(153, 102, 255)', // purple\n 'rgb(201, 203, 207)' // grey\n];\n\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map(color => color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\n\nfunction getBorderColor(i: number) {\n return BORDER_COLORS[i % BORDER_COLORS.length];\n}\n\nfunction getBackgroundColor(i: number) {\n return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\n\nfunction colorizeDefaultDataset(dataset: ChartDataset, i: number) {\n dataset.borderColor = getBorderColor(i);\n dataset.backgroundColor = getBackgroundColor(i);\n\n return ++i;\n}\n\nfunction colorizeDoughnutDataset(dataset: ChartDataset, i: number) {\n dataset.backgroundColor = dataset.data.map(() => getBorderColor(i++));\n\n return i;\n}\n\nfunction colorizePolarAreaDataset(dataset: ChartDataset, i: number) {\n dataset.backgroundColor = dataset.data.map(() => getBackgroundColor(i++));\n\n return i;\n}\n\nfunction getColorizer(chart: Chart) {\n let i = 0;\n\n return (dataset: ChartDataset, datasetIndex: number) => {\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n\n if (controller instanceof DoughnutController) {\n i = colorizeDoughnutDataset(dataset, i);\n } else if (controller instanceof PolarAreaController) {\n i = colorizePolarAreaDataset(dataset, i);\n } else if (controller) {\n i = colorizeDefaultDataset(dataset, i);\n }\n };\n}\n\nfunction containsColorsDefinitions(\n descriptors: ColorsDescriptor[] | Record<string, ColorsDescriptor>\n) {\n let k: number | string;\n\n for (k in descriptors) {\n if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction containsColorsDefinition(\n descriptor: ColorsDescriptor\n) {\n return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\n\nfunction containsDefaultColorsDefenitions() {\n return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\n\nexport default {\n id: 'colors',\n\n defaults: {\n enabled: true,\n forceOverride: false\n } as ColorsPluginOptions,\n\n beforeLayout(chart: Chart, _args, options: ColorsPluginOptions) {\n if (!options.enabled) {\n return;\n }\n\n const {\n data: {datasets},\n options: chartOptions\n } = chart.config;\n const {elements} = chartOptions;\n\n const containsColorDefenition = (\n containsColorsDefinitions(datasets) ||\n containsColorsDefinition(chartOptions) ||\n (elements && containsColorsDefinitions(elements)) ||\n containsDefaultColorsDefenitions());\n\n if (!options.forceOverride && containsColorDefenition) {\n return;\n }\n\n const colorizer = getColorizer(chart);\n\n datasets.forEach(colorizer);\n }\n};\n","import {_limitValue, _lookupByKey, isNullOrUndef, resolve} from '../helpers/index.js';\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n /**\n * Implementation of the Largest Triangle Three Buckets algorithm.\n *\n * This implementation is based on the original implementation by Sveinn Steinarsson\n * in https://github.com/sveinn-steinarsson/flot-downsample/blob/master/jquery.flot.downsample.js\n *\n * The original implementation is MIT licensed.\n */\n const samples = options.samples || availableWidth;\n // There are less points than the threshold, returning the whole array\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n\n const decimated = [];\n\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n // Starting from offset\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n\n decimated[sampledIndex++] = data[a];\n\n for (i = 0; i < samples - 2; i++) {\n let avgX = 0;\n let avgY = 0;\n let j;\n\n // Adding offset\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n\n for (j = avgRangeStart; j < avgRangeEnd; j++) {\n avgX += data[j].x;\n avgY += data[j].y;\n }\n\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n\n // Adding offset\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const {x: pointAx, y: pointAy} = data[a];\n\n // Note that this is changed from the original algorithm which initializes these\n // values to 1. The reason for this change is that if the area is small, nextA\n // would never be set and thus a crash would occur in the next loop as `a` would become\n // `undefined`. Since the area is always positive, but could be 0 in the case of a flat trace,\n // initializing with a negative number is the correct solution.\n maxArea = area = -1;\n\n for (j = rangeOffs; j < rangeTo; j++) {\n area = 0.5 * Math.abs(\n (pointAx - avgX) * (data[j].y - pointAy) -\n (pointAx - data[j].x) * (avgY - pointAy)\n );\n\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n\n // Include the last point\n decimated[sampledIndex++] = data[endIndex];\n\n return decimated;\n}\n\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n\n for (i = start; i < start + count; ++i) {\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n\n if (truncX === prevX) {\n // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n // For first point in group, countX is `0`, so average will be `x` / 1.\n // Use point.x here because we're computing the average data `x` value\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n // Push up to 4 points, 3 for the last interval and the first point for this interval\n const lastIndex = i - 1;\n\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n // The interval is defined by 4 points: start, min, max, end.\n // The starting point is already considered at this point, so we need to determine which\n // of the other points to add. We need to sort these points to ensure the decimated data\n // is still sorted and then ensure there are no duplicates.\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX,\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n\n // lastIndex === startIndex will occur when a range has only 1 point which could\n // happen with very uneven data\n if (i > 0 && lastIndex !== startIndex) {\n // Last point in the previous interval\n decimated.push(data[lastIndex]);\n }\n\n // Start of the new interval\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n\n return decimated;\n}\n\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: data,\n });\n }\n}\n\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset) => {\n cleanDecimatedDataset(dataset);\n });\n}\n\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n\n let start = 0;\n let count;\n\n const {iScale} = meta;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n\n return {start, count};\n}\n\nexport default {\n id: 'decimation',\n\n defaults: {\n algorithm: 'min-max',\n enabled: false,\n },\n\n beforeElementsUpdate: (chart, args, options) => {\n if (!options.enabled) {\n // The decimation plugin may have been previously enabled. Need to remove old `dataset._data` handlers\n cleanDecimatedData(chart);\n return;\n }\n\n // Assume the entire chart is available to show a few more points than needed\n const availableWidth = chart.width;\n\n chart.data.datasets.forEach((dataset, datasetIndex) => {\n const {_data, indexAxis} = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n\n if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n // Decimation is only supported for lines that have an X indexAxis\n return;\n }\n\n if (!meta.controller.supportsDecimation) {\n // Only line datasets are supported\n return;\n }\n\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n // Only linear interpolation is supported\n return;\n }\n\n if (chart.options.parsing) {\n // Plugin only supports data that does not need parsing\n return;\n }\n\n let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n // No decimation is required until we are above this threshold\n cleanDecimatedDataset(dataset);\n return;\n }\n\n if (isNullOrUndef(_data)) {\n // First time we are seeing this dataset\n // We override the 'data' property with a setter that stores the\n // raw data in _data, but reads the decimated data from _decimated\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n\n // Point the chart to the decimated data\n let decimated;\n switch (options.algorithm) {\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n\n dataset._decimated = decimated;\n });\n },\n\n destroy(chart) {\n cleanDecimatedData(chart);\n }\n};\n","import {_boundSegment, _boundSegments, _normalizeAngle} from '../../helpers/index.js';\n\nexport function _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n\n for (const segment of segments) {\n let {start, end} = segment;\n end = _findSegmentEnd(start, end, points);\n\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n\n if (!target.segments) {\n // Special case for boundary not supporting `segments` (simpleArc)\n // Bounds are provided as `target` for partial circle, or undefined for full circle\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n\n // Get all segments from `target` that intersect the bounds of current segment of `line`\n const targetSegments = _boundSegments(target, bounds);\n\n for (const tgt of targetSegments) {\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n\n for (const fillSource of fillSources) {\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\n\nexport function _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {property, start, end};\n}\n\nexport function _pointsFromSegments(boundary, line) {\n const {x = null, y = null} = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({start, end}) => {\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({x: first.x, y});\n points.push({x: last.x, y});\n } else if (x !== null) {\n points.push({x, y: first.y});\n points.push({x, y: last.y});\n }\n });\n return points;\n}\n\nexport function _findSegmentEnd(start, end, points) {\n for (;end > start; end--) {\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\n\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {isArray} from '../../helpers/index.js';\nimport {_pointsFromSegments} from './filler.segment.js';\n\n/**\n * @param {PointElement[] | { x: number; y: number; }} boundary\n * @param {LineElement} line\n * @return {LineElement?}\n */\nexport function _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n\n if (isArray(boundary)) {\n _loop = true;\n // @ts-ignore\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n\n return points.length ? new LineElement({\n points,\n options: {tension: 0},\n _loop,\n _fullLoop: _loop\n }) : null;\n}\n\nexport function _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n","import {isObject, isFinite, valueOrDefault} from '../../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.line.js').default } LineElement\n * @typedef { import('../../types/index.js').FillTarget } FillTarget\n * @typedef { import('../../types/index.js').ComplexFillTarget } ComplexFillTarget\n */\n\nexport function _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [index];\n let target;\n\n if (!propagate) {\n return fill;\n }\n\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isFinite(fill)) {\n return fill;\n }\n\n target = sources[fill];\n if (!target) {\n return false;\n }\n\n if (target.visible) {\n return fill;\n }\n\n visited.push(fill);\n fill = target.fill;\n }\n\n return false;\n}\n\n/**\n * @param {LineElement} line\n * @param {number} index\n * @param {number} count\n */\nexport function _decodeFill(line, index, count) {\n /** @type {string | {value: number}} */\n const fill = parseFillOption(line);\n\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n\n let target = parseFloat(fill);\n\n if (isFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n\n return target;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @returns {number | null}\n */\nexport function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n // @ts-ignore\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @param {number} startValue\n * @returns {number | undefined}\n */\nexport function _getTargetValue(fill, scale, startValue) {\n let value;\n\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n // @ts-ignore\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n\n/**\n * @param {LineElement} line\n */\nfunction parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n\n if (fill === false || fill === null) {\n return false;\n }\n\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {_isBetween} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\n\n/**\n * @param {{ chart: Chart; scale: Scale; index: number; line: LineElement; }} source\n * @return {LineElement}\n */\nexport function _buildStackLine(source) {\n const {scale, index, line} = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n for (let j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({points, options: {}});\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @return {LineElement[]}\n */\nfunction getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n\n for (let i = 0; i < metas.length; i++) {\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\n\n/**\n * @param {PointElement[]} points\n * @param {PointElement} sourcePoint\n * @param {LineElement[]} linesBelow\n */\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for (let j = 0; j < linesBelow.length; j++) {\n const line = linesBelow[j];\n const {first, last, point} = findPoint(line, sourcePoint, 'x');\n\n if (!point || (first && last)) {\n continue;\n }\n if (first) {\n // First point of an segment -> need to add another point before this,\n // from next line below.\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n // In the middle of an segment, no need to add more points.\n break;\n }\n }\n }\n points.push(...postponed);\n}\n\n/**\n * @param {LineElement} line\n * @param {PointElement} sourcePoint\n * @param {string} property\n * @returns {{point?: PointElement, first?: boolean, last?: boolean}}\n */\nfunction findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {first, last, point};\n}\n","import {TAU} from '../../helpers/index.js';\n\n// TODO: use elements.ArcElement instead\nexport class simpleArc {\n constructor(opts) {\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n\n pathSegment(ctx, bounds, opts) {\n const {x, y, radius} = this;\n bounds = bounds || {start: 0, end: TAU};\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n\n interpolate(point) {\n const {x, y, radius} = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n","import {isFinite} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\nimport {_getTargetPixel, _getTargetValue} from './filler.options.js';\nimport {_buildStackLine} from './filler.target.stack.js';\nimport {simpleArc} from './simpleArc.js';\n\n/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nexport function _getTarget(source) {\n const {chart, fill, line} = source;\n\n if (isFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n\n if (fill === 'shape') {\n return true;\n }\n\n const boundary = computeBoundary(source);\n\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n\n return _createBoundaryLine(boundary, line);\n}\n\n/**\n * @param {Chart} chart\n * @param {number} index\n */\nfunction getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\n\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\n\n\nfunction computeLinearBoundary(source) {\n const {scale = {}, fill} = source;\n const pixel = _getTargetPixel(fill, scale);\n\n if (isFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n\n return null;\n}\n\nfunction computeCircularBoundary(source) {\n const {scale, fill} = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n\n for (let i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\n","import {clipArea, unclipArea} from '../../helpers/index.js';\nimport {_findSegmentEnd, _getBounds, _segments} from './filler.segment.js';\nimport {_getTarget} from './filler.target.js';\n\nexport function _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const {line, scale, axis} = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const {above = color, below = color} = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {line, target, above, below, area, scale, axis});\n unclipArea(ctx);\n }\n}\n\nfunction doFill(ctx, cfg) {\n const {line, target, above, below, area, scale} = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n\n ctx.save();\n\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {line, target, color: above, scale, property});\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n fill(ctx, {line, target, color: below, scale, property});\n\n ctx.restore();\n}\n\nfunction clipVertical(ctx, target, clipY) {\n const {segments, points} = target;\n let first = true;\n let lineLoop = false;\n\n ctx.beginPath();\n for (const segment of segments) {\n const {start, end} = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\n\nfunction fill(ctx, cfg) {\n const {line, target, property, color, scale} = cfg;\n const segments = _segments(line, target, property);\n\n for (const {source: src, target: tgt, start, end} of segments) {\n const {style: {backgroundColor = color} = {}} = src;\n const notShape = target !== true;\n\n ctx.save();\n ctx.fillStyle = backgroundColor;\n\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n\n ctx.beginPath();\n\n const lineLoop = !!line.pathSegment(ctx, src);\n\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n\n const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n\n ctx.restore();\n }\n}\n\nfunction clipBounds(ctx, scale, bounds) {\n const {top, bottom} = scale.chart.chartArea;\n const {property, start, end} = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\n","/**\n * Plugin based on discussion from the following Chart.js issues:\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\n */\n\nimport LineElement from '../../elements/element.line.js';\nimport {_drawfill} from './filler.drawing.js';\nimport {_shouldApplyFill} from './filler.helper.js';\nimport {_decodeFill, _resolveTarget} from './filler.options.js';\n\nexport default {\n id: 'filler',\n\n afterDatasetsUpdate(chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line,\n };\n }\n\n meta.$filler = source;\n sources.push(source);\n }\n\n for (i = 0; i < count; ++i) {\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n\n beforeDraw(chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n\n beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n\n const metasets = chart.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n\n beforeDatasetDraw(chart, args, options) {\n const source = args.meta.$filler;\n\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n","import defaults from '../core/core.defaults.js';\nimport Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {addRoundedRectPath, drawPointLegend, renderText} from '../helpers/helpers.canvas.js';\nimport {\n _isBetween,\n callback as call,\n clipArea,\n getRtlAdapter,\n overrideTextDirection,\n restoreTextDirection,\n toFont,\n toPadding,\n unclipArea,\n valueOrDefault,\n} from '../helpers/index.js';\nimport {_alignStartEnd, _textX, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {toTRBLCorners} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n */\n\nconst getBoxSize = (labelOpts, fontSize) => {\n let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\n\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n\nexport class Legend extends Element {\n\n /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n constructor(config) {\n super();\n\n this._added = false;\n\n // Contains hit boxes for each dataset (in dataset order)\n this.legendHitBoxes = [];\n\n /**\n \t\t * @private\n \t\t */\n this._hoveredItem = null;\n\n // Are we in doughnut mode which has a different data type\n this.doughnutMode = false;\n\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = call(labelOpts.generateLabels, [this.chart], this) || [];\n\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n }\n\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n }\n\n if (this.options.reverse) {\n legendItems.reverse();\n }\n\n this.legendItems = legendItems;\n }\n\n fit() {\n const {options, ctx} = this;\n\n // The legend may not be displayed for a variety of reasons including\n // the fact that the defaults got set to `false`.\n // When the legend is not displayed, there are no guarantees that the options\n // are correctly formatted so we need to bail out as early as possible.\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n let width, height;\n\n ctx.font = labelFont.string;\n\n if (this.isHorizontal()) {\n width = this.maxWidth; // fill all the width\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight; // fill all the height\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n\n /**\n\t * @private\n\t */\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxWidth, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n const lineWidths = this.lineWidths = [0];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n\n hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n\n return totalHeight;\n }\n\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const {ctx, maxHeight, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n\n let left = 0;\n let col = 0;\n\n this.legendItems.forEach((legendItem, i) => {\n const {itemWidth, itemHeight} = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n\n // If too tall, go to new column\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n\n // Store the hitbox width and height here. Final position will be updated in `draw`\n hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n\n // Get max width\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n\n totalWidth += currentColWidth;\n columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n\n return totalWidth;\n }\n\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes) {\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes) {\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n\n this._draw();\n\n unclipArea(ctx);\n }\n }\n\n /**\n\t * @private\n\t */\n _draw() {\n const {options: opts, columnSizes, lineWidths, ctx} = this;\n const {align, labels: labelOpts} = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const {padding} = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n\n this.drawTitle();\n\n // Canvas setup\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n\n const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n // current position\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n\n // Set the ctx for the box\n ctx.save();\n\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n if (labelOpts.usePointStyle) {\n // Recalculate x and y for drawPoint() because its expecting\n // x and y to be center of figure (instead of top left)\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n\n // Draw pointStyle as legend symbol\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n // Draw box as legend symbol\n // Adjust position when boxHeight < fontSize (want it centered)\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n\n ctx.beginPath();\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n\n ctx.restore();\n };\n\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n\n // Horizontal\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n\n overrideTextDirection(this.ctx, opts.textDirection);\n\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i) => {\n ctx.strokeStyle = legendItem.fontColor; // for strikethrough effect\n ctx.fillStyle = legendItem.fontColor; // render in correct colour\n\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n\n rtlHelper.setWidth(this.width);\n\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n\n const realX = rtlHelper.x(x);\n\n drawLegendBox(realX, y, legendItem);\n\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n\n // Fill the actual label\n fillText(rtlHelper.x(x), y, legendItem);\n\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n\n if (!titleOpts.display) {\n return;\n }\n\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n\n // These defaults are used when the legend is vertical.\n // When horizontal, they are computed below.\n let left = this.left;\n let maxWidth = this.width;\n\n if (this.isHorizontal()) {\n // Move left / right so that the title is above the legend lines\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n // Move down so that the title is above the legend stack in every alignment\n const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n\n // Now that we know the left edge of the inner legend box, compute the correct\n // X coordinate from the title alignment\n const x = _alignStartEnd(position, left, left + maxWidth);\n\n // Canvas setup\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n\n /**\n\t * @private\n\t */\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n\n /**\n\t * @private\n\t */\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n\n if (_isBetween(x, this.left, this.right)\n && _isBetween(y, this.top, this.bottom)) {\n // See if we are touching one of the dataset boxes\n lh = this.legendHitBoxes;\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n // Touching an element\n return this.legendItems[i];\n }\n }\n }\n\n return null;\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t */\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n\n // Chart event already has relative position in it\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n call(opts.onLeave, [e, previous, this], this);\n }\n\n this._hoveredItem = hoveredItem;\n\n if (hoveredItem && !sameItem) {\n call(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n call(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n}\n\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {itemWidth, itemHeight};\n}\n\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);\n }\n return boxWidth + (labelFont.size / 2) + ctx.measureText(legendItemText).width;\n}\n\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\n\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length : 0;\n return fontLineHeight * labelHeight;\n}\n\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\n\nexport default {\n id: 'legend',\n\n /**\n\t * For tests\n\t * @private\n\t */\n _element: Legend,\n\n start(chart, _args, options) {\n const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n\n stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n\n // During the beforeUpdate step, the layout configuration needs to run\n // This ensures that if the legend position changes (via an option update)\n // the layout system respects the change. See https://github.com/chartjs/Chart.js/issues/7527\n beforeUpdate(chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n\n // The labels need to be built after datasets are updated to ensure that colors\n // and other styling are correct. See https://github.com/chartjs/Chart.js/issues/6968\n afterUpdate(chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n\n\n afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n\n // a callback that will handle\n onClick(e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n\n onHover: null,\n onLeave: null,\n\n labels: {\n color: (ctx) => ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n // Generates labels shown in the legend\n // Valid properties to return:\n // text : text to display\n // fillStyle : fill of coloured box\n // strokeStyle: stroke of coloured box\n // hidden : if this legend item refers to a hidden item\n // lineCap : cap style for line\n // lineDash\n // lineDashOffset :\n // lineJoin :\n // lineWidth :\n generateLabels(chart) {\n const datasets = chart.data.datasets;\n const {labels: {usePointStyle, pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n\n return chart._getSortedDatasetMetas().map((meta) => {\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n\n // Below is extra data used for toggling the datasets\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n\n title: {\n color: (ctx) => ctx.chart.options.color,\n display: false,\n position: 'center',\n text: '',\n }\n },\n\n descriptors: {\n _scriptable: (name) => !name.startsWith('on'),\n labels: {\n _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n }\n },\n};\n","import Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {PI, isArray, toPadding, toFont} from '../helpers/index.js';\nimport {_toLeftRightCenter, _alignStartEnd} from '../helpers/helpers.extras.js';\nimport {renderText} from '../helpers/helpers.canvas.js';\n\nexport class Title extends Element {\n /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n constructor(config) {\n super();\n\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n\n update(maxWidth, maxHeight) {\n const opts = this.options;\n\n this.left = 0;\n this.top = 0;\n\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n\n _drawArgs(offset) {\n const {top, left, bottom, right, options} = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {titleX, titleY, maxWidth, rotation};\n }\n\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n\n if (!opts.display) {\n return;\n }\n\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n}\n\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\n\nexport default {\n id: 'title',\n\n /**\n\t * For tests\n\t * @private\n\t */\n _element: Title,\n\n start(chart, _args, options) {\n createTitle(chart, options);\n },\n\n stop(chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n\n beforeUpdate(chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold',\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000 // by default greater than legend (1000) to be above\n },\n\n defaultRoutes: {\n color: 'color'\n },\n\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n","import {Title} from './plugin.title.js';\nimport layouts from '../core/core.layouts.js';\n\nconst map = new WeakMap();\n\nexport default {\n id: 'subtitle',\n\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n\n beforeUpdate(chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal',\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500 // by default greater than legend (1000) and smaller than title (2000)\n },\n\n defaultRoutes: {\n color: 'color'\n },\n\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n","import Animations from '../core/core.animations.js';\nimport Element from '../core/core.element.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {each, noop, isNullOrUndef, isArray, _elementsEqual, isObject} from '../helpers/helpers.core.js';\nimport {toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\nimport {getRtlAdapter, overrideTextDirection, restoreTextDirection} from '../helpers/helpers.rtl.js';\nimport {distanceBetweenPoints, _limitValue} from '../helpers/helpers.math.js';\nimport {createContext, drawPoint} from '../helpers/index.js';\n\n/**\n * @typedef { import('../platform/platform.base.js').Chart } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').ActiveElement } ActiveElement\n * @typedef { import('../core/core.interaction.js').InteractionItem } InteractionItem\n */\n\nconst positioners = {\n /**\n\t * Average mode places the tooltip at the average position of the elements shown\n\t */\n average(items) {\n if (!items.length) {\n return false;\n }\n\n let i, len;\n let xSet = new Set();\n let y = 0;\n let count = 0;\n\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n xSet.add(pos.x);\n y += pos.y;\n ++count;\n }\n }\n\n // No visible items where found, return false so we don't have to divide by 0 which reduces in NaN\n if (count === 0 || xSet.size === 0) {\n return false;\n }\n\n const xAverage = [...xSet].reduce((a, b) => a + b) / xSet.size;\n\n return {\n x: xAverage,\n y: y / count\n };\n },\n\n /**\n\t * Gets the tooltip position nearest of the item nearest to the event position\n\t */\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n\n return {\n x,\n y\n };\n }\n};\n\n// Helper to push or concat based on if the 2nd parameter is an array or not\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n // base = base.concat(toPush);\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n\n return base;\n}\n\n/**\n * Returns array of strings split by newline\n * @param {*} str - The value to split by newline.\n * @returns {string|string[]} value if newline present - Returned from String split() method\n * @function\n */\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n\n\n/**\n * Private helper to create a tooltip item model\n * @param {Chart} chart\n * @param {ActiveElement} item - {element, index, datasetIndex} to create the tooltip item for\n * @return new tooltip item\n */\nfunction createTooltipItem(chart, item) {\n const {element, datasetIndex, index} = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {label, value} = controller.getLabelAndValue(index);\n\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\n\n/**\n * Get the size of the tooltip\n */\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const {body, footer, title} = tooltip;\n const {boxWidth, boxHeight} = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n\n // Count of all lines in the body\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n // Body lines may include some extra height depending on boxHeight\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n }\n\n // Title width\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n\n ctx.save();\n\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n\n // Body width\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n\n // Body lines may include some extra width due to the color box\n widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n each(body, (bodyItem) => {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n\n // Reset back to 0\n widthPadding = 0;\n\n // Footer width\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n\n ctx.restore();\n\n // Add padding\n width += padding.width;\n\n return {width, height};\n}\n\nfunction determineYAlign(chart, size) {\n const {y, height} = size;\n\n if (y < height / 2) {\n return 'top';\n } else if (y > (chart.height - height / 2)) {\n return 'bottom';\n }\n return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {x, width} = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n const {x, width} = size;\n const {width: chartWidth, chartArea: {left, right}} = chart;\n let xAlign = 'center';\n\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n\n return xAlign;\n}\n\n/**\n * Helper to get the alignment of a tooltip given the size\n */\nfunction determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\n\nfunction alignX(size, xAlign) {\n let {x, width} = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= (width / 2);\n }\n return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n // eslint-disable-next-line prefer-const\n let {y, height} = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= (height / 2);\n }\n return y;\n}\n\n/**\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n */\nfunction getBackgroundPoint(options, size, alignment, chart) {\n const {caretSize, caretPadding, cornerRadius} = options;\n const {xAlign, yAlign} = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n\n return align === 'center'\n ? tooltip.x + tooltip.width / 2\n : align === 'right'\n ? tooltip.x + tooltip.width - padding.right\n : tooltip.x + padding.left;\n}\n\n/**\n * Helper to build before and after body lines\n */\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\n\nconst defaultCallbacks = {\n // Args are: (tooltipItems, data)\n beforeTitle: noop,\n title(tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n\n return '';\n },\n afterTitle: noop,\n\n // Args are: (tooltipItems, data)\n beforeBody: noop,\n\n // Args are: (tooltipItem, data)\n beforeLabel: noop,\n label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n\n let label = tooltipItem.dataset.label || '';\n\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0,\n };\n },\n labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n };\n },\n afterLabel: noop,\n\n // Args are: (tooltipItems, data)\n afterBody: noop,\n\n // Args are: (tooltipItems, data)\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n\n/**\n * Invoke callback from object with context and arguments.\n * If callback returns `undefined`, then will be invoked default callback.\n * @param {Record<keyof typeof defaultCallbacks, Function>} callbacks\n * @param {keyof typeof defaultCallbacks} name\n * @param {*} ctx\n * @param {*} arg\n * @returns {any}\n */\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n\n return result;\n}\n\nexport class Tooltip extends Element {\n\n /**\n * @namespace Chart.Tooltip.positioners\n */\n static positioners = positioners;\n\n constructor(config) {\n super();\n\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n // TODO: V4, make this private, rename to `_labelStyles`, and combine with `labelPointStyles`\n // and `labelTextColors` to create a single variable\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n\n /**\n\t * @private\n\t */\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n\n if (cached) {\n return cached;\n }\n\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n\n return animations;\n }\n\n /**\n\t * @protected\n\t */\n getContext() {\n return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n\n getTitle(context, options) {\n const {callbacks} = options;\n\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n return lines;\n }\n\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(\n invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems)\n );\n }\n\n getBody(tooltipItems, options) {\n const {callbacks} = options;\n const bodyItems = [];\n\n each(tooltipItems, (context) => {\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n\n bodyItems.push(bodyItem);\n });\n\n return bodyItems;\n }\n\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(\n invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems)\n );\n }\n\n // Get the footer and beforeFooter and afterFooter lines\n getFooter(tooltipItems, options) {\n const {callbacks} = options;\n\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n return lines;\n }\n\n /**\n\t * @private\n\t */\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n\n // If the user provided a filter function, use it to modify the tooltip items\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n }\n\n // If the user provided a sorting function, use it to modify the tooltip items\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n }\n\n // Determine colors for boxes\n each(tooltipItems, (context) => {\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n\n if (changed && options.external) {\n options.external.call(this, {chart: this.chart, tooltip: this, replay});\n }\n }\n\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n\n getCaretPosition(tooltipPoint, size, options) {\n const {xAlign, yAlign} = this;\n const {caretSize, cornerRadius} = options;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n const {x: ptX, y: ptY} = tooltipPoint;\n const {width, height} = size;\n let x1, x2, x3, y1, y2, y3;\n\n if (yAlign === 'center') {\n y2 = ptY + (height / 2);\n\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n\n // Left draws bottom -> top, this y1 is on the bottom\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n\n // Right draws top -> bottom, thus y1 is on the top\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n\n // Top draws left -> right, thus x1 is on the left\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n\n // Bottom draws right -> left, thus x1 is on the right\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {x1, x2, x3, y1, y2, y3};\n }\n\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n pt.x = getAlignedX(this, options.titleAlign, options);\n\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing; // Line Height and spacing\n\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n }\n }\n }\n }\n\n /**\n\t * @private\n\t */\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColor = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const {boxHeight, boxWidth} = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2, // fit the circle in the box\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n // Recalculate x and y for drawPoint() because its expecting\n // x and y to be center of figure (instead of top left)\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n\n // Fill the point with white so that colours merge nicely if the opacity is < 1\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n\n // Draw the point\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n // Border\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : (labelColor.borderWidth || 1); // TODO, v4 remove fallback\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n\n // Fill a white rect so that colours merge nicely if the opacity is < 1\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColor.borderRadius);\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n ctx.fill();\n ctx.stroke();\n\n // Inner square\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n // Normal rect\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n // Inner square\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n\n // restore fillStyle\n ctx.fillStyle = this.labelTextColors[i];\n }\n\n drawBody(pt, ctx, options) {\n const {body} = this;\n const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n\n // Before body lines\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n : 0;\n\n // Draw body lines now\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n\n lines = bodyItem.lines;\n // Draw Legend-like boxes if needed\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n // Reset for any lines that don't include colorbox\n bodyLineHeight = bodyFont.lineHeight;\n }\n\n each(bodyItem.after, fillLineOfText);\n }\n\n // Reset back to 0 for after body\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n\n // After body lines\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing; // Remove last body spacing\n }\n\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n\n footerFont = toFont(options.footerFont);\n\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n\n drawBackground(pt, ctx, tooltipSize, options) {\n const {xAlign, yAlign} = this;\n const {x, y} = pt;\n const {width, height} = tooltipSize;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n\n ctx.fill();\n\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n\n /**\n\t * Update x/y animation targets when _active elements are animating too\n\t * @private\n\t */\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n\n /**\n * Determine if the tooltip will draw anything\n * @returns {boolean} True if the tooltip will render\n */\n _willRender() {\n return !!this.opacity;\n }\n\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n\n if (!opacity) {\n return;\n }\n\n this._updateAnimationTarget(options);\n\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n\n // IE11/Edge does not like very small opacities, so snap to 0\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n\n const padding = toPadding(options.padding);\n\n // Truthy/falsey value for empty tooltip\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n\n // Draw Background\n this.drawBackground(pt, ctx, tooltipSize, options);\n\n overrideTextDirection(ctx, options.textDirection);\n\n pt.y += padding.top;\n\n // Titles\n this.drawTitle(pt, ctx, options);\n\n // Body\n this.drawBody(pt, ctx, options);\n\n // Footer\n this.drawFooter(pt, ctx, options);\n\n restoreTextDirection(ctx, options.textDirection);\n\n ctx.restore();\n }\n }\n\n /**\n\t * Get active elements in the tooltip\n\t * @returns {Array} Array of elements that are active in the tooltip\n\t */\n getActiveElements() {\n return this._active || [];\n }\n\n /**\n\t * Set active elements in the tooltip\n\t * @param {array} activeElements Array of active datasetIndex/index pairs.\n\t * @param {object} eventPosition Synthetic event position used in positioning\n\t */\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.chart.getDatasetMeta(datasetIndex);\n\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {boolean} true if the tooltip changed\n\t */\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n // When there are multiple items shown, but the tooltip position is nearest mode\n // an update may need to be made because our position may have changed even though\n // the items are the same as before.\n const positionChanged = this._positionChanged(active, e);\n\n // Remember Last Actives\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n // Only handle target event on tooltip change\n if (changed) {\n this._active = active;\n\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n\n this.update(true, replay);\n }\n }\n\n return changed;\n }\n\n /**\n\t * Helper for determining the active elements for event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {InteractionItem[]} lastActive - Previously active elements\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {InteractionItem[]} - Active elements\n\t * @private\n\t */\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n // Let user control the active elements outside chartArea. Eg. using Legend.\n // But make sure that active elements are still valid.\n return lastActive.filter(i =>\n this.chart.data.datasets[i.datasetIndex] &&\n this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined\n );\n }\n\n // Find Active Elements for tooltips\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n if (options.reverse) {\n active.reverse();\n }\n\n return active;\n }\n\n /**\n\t * Determine if the active elements + event combination changes the\n\t * tooltip position\n\t * @param {array} active - Active elements\n\t * @param {ChartEvent} e - Event that triggered the position change\n\t * @returns {boolean} True if the position has changed\n\t */\n _positionChanged(active, e) {\n const {caretX, caretY, options} = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\n\nexport default {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n\n afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({chart, options});\n }\n },\n\n beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n\n reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n\n afterDraw(chart) {\n const tooltip = chart.tooltip;\n\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n\n if (chart.notifyPlugins('beforeTooltipDraw', {...args, cancelable: true}) === false) {\n return;\n }\n\n tooltip.draw(chart.ctx);\n\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n\n afterEvent(chart, args) {\n if (chart.tooltip) {\n // If the event is replayed from `update`, we should evaluate with the final positions.\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n // notify chart about the change, so it will render\n args.changed = true;\n }\n }\n },\n\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold',\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {\n },\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold',\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts) => opts.bodyFont.size,\n boxWidth: (ctx, opts) => opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart',\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n\n descriptors: {\n _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false,\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n\n // Resolve additionally from `interaction` options and defaults.\n additionalOptionScopes: ['interaction']\n};\n","import Scale from '../core/core.scale.js';\nimport {isNullOrUndef, valueOrDefault, _limitValue} from '../helpers/index.js';\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({index, label: raw});\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\n\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\n\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\n\nexport default class CategoryScale extends Scale {\n\n static id = 'category';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const {index, label} of added) {\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index\n : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n\n determineDataLimits() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this.getMinMax(true);\n\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n\n this.min = min;\n this.max = max;\n }\n\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n\n // If we are viewing some subset of labels, slice the original array\n labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n\n for (let value = min; value <= max; value++) {\n ticks.push({value});\n }\n return ticks;\n }\n\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n super.configure();\n\n if (!this.isHorizontal()) {\n // For backward compatibility, vertical category scale reverse is inverted.\n this._reversePixels = !this._reversePixels;\n }\n }\n\n // Used to get data value locations. Value can either be an index or a numerical value\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n\n // Must override base implementation because it calls getPixelForValue\n // and category scale can have duplicate values\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n\n getBasePixel() {\n return this.bottom;\n }\n}\n","import {isNullOrUndef} from '../helpers/helpers.core.js';\nimport {almostEquals, almostWhole, niceNum, _decimalPlaces, _setMinAndMaxByKey, sign, toRadians} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\n\n/**\n * Generate a set of linear ticks for an axis\n * 1. If generationOptions.min, generationOptions.max, and generationOptions.step are defined:\n * if (max - min) / step is an integer, ticks are generated as [min, min + step, ..., max]\n * Note that the generationOptions.maxCount setting is respected in this scenario\n *\n * 2. If generationOptions.min, generationOptions.max, and generationOptions.count is defined\n * spacing = (max - min) / count\n * Ticks are generated as [min, min + spacing, ..., max]\n *\n * 3. If generationOptions.count is defined\n * spacing = (niceMax - niceMin) / count\n *\n * 4. Compute optimal spacing of ticks using niceNum algorithm\n *\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, dataRange) {\n const ticks = [];\n // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n // for details.\n\n const MIN_SPACING = 1e-14;\n const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const {min: rmin, max: rmax} = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n\n // Beyond MIN_SPACING floating point numbers being to lose precision\n // such that we can't do the math necessary to generate ticks\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{value: rmin}, {value: rmax}];\n }\n\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n\n if (!isNullOrUndef(precision)) {\n // If the user specified a precision, round to that number of decimal places\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n // Case 1: If min, max and stepSize are set and they make an evenly spaced scale use it.\n // spacing = step;\n // numSpaces = (max - min) / spacing;\n // Note that we round here to handle the case where almostWhole translated an FP error\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n // Cases 2 & 3, we have a count specified. Handle optional user defined edges to the range.\n // Sometimes these are no-ops, but it makes the code a lot clearer\n // and when a user defined range is specified, we want the correct ticks\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n // Case 4\n numSpaces = (niceMax - niceMin) / spacing;\n\n // If very close to our rounded value, use it.\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n\n // The spacing will have changed in cases 1, 2, and 3 so the factor cannot be computed\n // until this point\n const decimalPlaces = Math.max(\n _decimalPlaces(spacing),\n _decimalPlaces(niceMin)\n );\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({value: min});\n\n if (niceMin < min) {\n j++; // Skip niceMin\n }\n // If the next nice tick is close to min, skip it\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n\n for (; j < numSpaces; ++j) {\n const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n if (maxDefined && tickValue > max) {\n break;\n }\n ticks.push({value: tickValue});\n }\n\n if (maxDefined && includeBounds && niceMax !== max) {\n // If the previous tick is too close to max, replace it with max, else add max\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({value: max});\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({value: niceMax});\n }\n\n return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\n\nexport default class LinearScaleBase extends Scale {\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.start = undefined;\n /** @type {number} */\n this.end = undefined;\n /** @type {number} */\n this._startValue = undefined;\n /** @type {number} */\n this._endValue = undefined;\n this._valueRange = 0;\n }\n\n parse(raw, index) { // eslint-disable-line no-unused-vars\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n\n return +raw;\n }\n\n handleTickRangeOptions() {\n const {beginAtZero} = this.options;\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this;\n\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n\n setMax(max + offset);\n\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n\n getTickLimit() {\n const tickOpts = this.options.ticks;\n // eslint-disable-next-line prefer-const\n let {maxTicksLimit, stepSize} = tickOpts;\n let maxTicks;\n\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n\n return maxTicks;\n }\n\n /**\n\t * @protected\n\t */\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n\n // Figure out what the max number of ticks we can support it is based on the size of\n // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n // the graph. Make sure we always have at least 2 ticks\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks(numericGeneratorOptions, dataRange);\n\n // At this point, we need to update our max and min given the tick values,\n // since we probably have expanded the range of the scale\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n\n return ticks;\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n\n super.configure();\n\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n","import {isFinite} from '../helpers/helpers.core.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {toRadians} from '../helpers/index.js';\n\nexport default class LinearScale extends LinearScaleBase {\n\n static id = 'linear';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n\n this.min = isFinite(min) ? min : 0;\n this.max = isFinite(max) ? max : 1;\n\n // Common base implementation to handle min, max, beginAtZero\n this.handleTickRangeOptions();\n }\n\n /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n \t */\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n\n // Utils\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n","import {finiteOrDefault, isFinite} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {_setMinAndMaxByKey, log10} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\n\nconst log10Floor = v => Math.floor(log10(v));\nconst changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);\n\nfunction isMajor(tickVal) {\n const remain = tickVal / (Math.pow(10, log10Floor(tickVal)));\n return remain === 1;\n}\n\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\n\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while (steps(min, max, rangeExp) > 10) {\n rangeExp++;\n }\n while (steps(min, max, rangeExp) < 10) {\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n\n\n/**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, {min, max}) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while (value < max) {\n ticks.push({value, major: isMajor(value), significand});\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({value: lastTick, major: isMajor(lastTick), significand});\n\n return ticks;\n}\n\nexport default class LogarithmicScale extends Scale {\n\n static id = 'logarithmic';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.start = undefined;\n /** @type {number} */\n this.end = undefined;\n /** @type {number} */\n this._startValue = undefined;\n this._valueRange = 0;\n }\n\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isFinite(value) && value > 0 ? value : null;\n }\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n\n this.min = isFinite(min) ? Math.max(0, min) : null;\n this.max = isFinite(max) ? Math.max(0, max) : null;\n\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n\n // if data has `0` in it or `beginAtZero` is true, min (non zero) value is at bottom\n // of scale, and it does not equal suggestedMin, lower the min bound by one exp.\n if (this._zero && this.min !== this._suggestedMin && !isFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n\n this.handleTickRangeOptions();\n }\n\n handleTickRangeOptions() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n\n if (min === max) {\n if (min <= 0) { // includes null\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n\n setMax(changeExponent(min, +1));\n }\n\n this.min = min;\n this.max = max;\n }\n\n buildTicks() {\n const opts = this.options;\n\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n\n // At this point, we need to update our max and min given the tick values,\n // since we probably have expanded the range of the scale\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n\n return ticks;\n }\n\n /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n return value === undefined\n ? '0'\n : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n const start = this.min;\n\n super.configure();\n\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min\n ? 0\n : (log10(value) - this._startValue) / this._valueRange);\n }\n\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n","import defaults from '../core/core.defaults.js';\nimport {_longestText, addRoundedRectPath, renderText, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport {HALF_PI, TAU, toDegrees, toRadians, _normalizeAngle, PI} from '../helpers/helpers.math.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {valueOrDefault, isArray, isFinite, callback as callCallback, isNullOrUndef} from '../helpers/helpers.core.js';\nimport {createContext, toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - (size / 2),\n end: pos + (size / 2)\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n\n return {\n start: pos,\n end: pos + size\n };\n}\n\n/**\n * Helper function to fit a radial linear scale with point labels\n */\nfunction fitWithPointLabels(scale) {\n\n // Right, this is really confusing and there is a lot of maths going on here\n // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n //\n // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n //\n // Solution:\n //\n // We assume the radius of the polygon is half the size of the canvas at first\n // at each index we check if the text overlaps.\n //\n // Where it does, we store that angle and that index.\n //\n // After finding the largest index and angle we calculate how much we need to remove\n // from the shape radius to move the point inwards by that x.\n //\n // We average the left and right distances to get the maximum shape radius that can fit in the box\n // along with labels.\n //\n // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n // on each side, removing that from the size, halving it and adding the left x protrusion width.\n //\n // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n // and position it in the most space efficient manner\n //\n // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n for (let i = 0; i < valueCount; i++) {\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n\n scale.setCenterPoint(\n orig.l - limits.l,\n limits.r - orig.r,\n orig.t - limits.t,\n limits.b - orig.b\n );\n\n // Now that text size is determined, compute the full positions\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\n\nfunction createPointLabelItem(scale, index, itemOpts) {\n const outerDistance = scale.drawingArea;\n const {extra, additionalAngle, padding, size} = itemOpts;\n const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n return {\n // if to draw or overlapped\n visible: true,\n\n // Text position\n x: pointLabelPosition.x,\n y,\n\n // Text rendering data\n textAlign,\n\n // Bounding box\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\n\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const {left, top, right, bottom} = item;\n const apexesInArea = _isPointInArea({x: left, y: top}, area) || _isPointInArea({x: left, y: bottom}, area) ||\n _isPointInArea({x: right, y: top}, area) || _isPointInArea({x: right, y: bottom}, area);\n return !apexesInArea;\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const {centerPointLabels, display} = opts.pointLabels;\n const itemOpts = {\n extra: getTickBackdropHeight(opts) / 2,\n additionalAngle: centerPointLabels ? PI / valueCount : 0\n };\n let area;\n\n for (let i = 0; i < valueCount; i++) {\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\n\n const item = createPointLabelItem(scale, i, itemOpts);\n items.push(item);\n if (display === 'auto') {\n item.visible = isNotOverlapped(item, area);\n if (item.visible) {\n area = item;\n }\n }\n }\n return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n\n return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= (w / 2);\n }\n return x;\n}\n\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= (h / 2);\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\n\nfunction drawPointLabelBox(ctx, opts, item) {\n const {left, top, right, bottom} = item;\n const {backdropColor} = opts;\n\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\n\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n}\n\nfunction drawPointLabels(scale, labelCount) {\n const {ctx, options: {pointLabels}} = scale;\n\n for (let i = labelCount - 1; i >= 0; i--) {\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\n // overlapping\n continue;\n }\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n drawPointLabelBox(ctx, optsAtIndex, item);\n const plFont = toFont(optsAtIndex.font);\n const {x, y, textAlign} = item;\n\n renderText(\n ctx,\n scale._pointLabels[i],\n x,\n y + (plFont.lineHeight / 2),\n plFont,\n {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n }\n );\n }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const {ctx} = scale;\n if (circular) {\n // Draw circular arcs between the points\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n // Draw straight lines connecting each index\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n\n for (let i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n\n const {color, lineWidth} = gridLineOpts;\n\n if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n return;\n }\n\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash || []);\n ctx.lineDashOffset = borderOpts.dashOffset;\n\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\n\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\n\nexport default class RadialLinearScale extends LinearScaleBase {\n\n static id = 'radialLinear';\n\n /**\n * @type {any}\n */\n static defaults = {\n display: true,\n\n // Boolean - Whether to animate scaling the chart from the centre\n animate: true,\n position: 'chartArea',\n\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n\n grid: {\n circular: false\n },\n\n startAngle: 0,\n\n // label settings\n ticks: {\n // Boolean - Show a backdrop to the scale label\n showLabelBackdrop: true,\n\n callback: Ticks.formatters.numeric\n },\n\n pointLabels: {\n backdropColor: undefined,\n\n // Number - The backdrop padding above & below the label in pixels\n backdropPadding: 2,\n\n // Boolean - if true, show point labels\n display: true,\n\n // Number - Point label font size in pixels\n font: {\n size: 10\n },\n\n // Function - Used to convert point labels\n callback(label) {\n return label;\n },\n\n // Number - Additionl padding between scale and pointLabel\n padding: 5,\n\n // Boolean - if true, center point labels to slices in polar chart\n centerPointLabels: false\n }\n };\n\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.xCenter = undefined;\n /** @type {number} */\n this.yCenter = undefined;\n /** @type {number} */\n this.drawingArea = undefined;\n /** @type {string[]} */\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n\n setDimensions() {\n // Set the unconstrained dimension before label rotation\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(false);\n\n this.min = isFinite(min) && !isNaN(min) ? min : 0;\n this.max = isFinite(max) && !isNaN(max) ? max : 0;\n\n // Common base implementation to handle min, max, beginAtZero\n this.handleTickRangeOptions();\n }\n\n /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n\t */\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n\n // Point labels\n this._pointLabels = this.getLabels()\n .map((value, index) => {\n const label = callCallback(this.options.pointLabels.callback, [value, index], this);\n return label || label === 0 ? label : '';\n })\n .filter((v, i) => this.chart.getDataVisibility(i));\n }\n\n fit() {\n const opts = this.options;\n\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n\n // Take into account half font size + the yPadding of the top value\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n\n getPointLabelPosition(index) {\n const {left, top, right, bottom} = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom,\n };\n }\n\n /**\n\t * @protected\n\t */\n drawBackground() {\n const {backgroundColor, grid: {circular}} = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n\n /**\n\t * @protected\n\t */\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const {angleLines, grid, border} = opts;\n const labelCount = this._pointLabels.length;\n\n let i, offset, position;\n\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n\n if (grid.display) {\n this.ticks.forEach((tick, index) => {\n if (index !== 0 || (index === 0 && this.min < 0)) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n\n if (angleLines.display) {\n ctx.save();\n\n for (i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const {color, lineWidth} = optsAtIndex;\n\n if (!lineWidth || !color) {\n continue;\n }\n\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n\n offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n\n ctx.restore();\n }\n }\n\n /**\n\t * @protected\n\t */\n drawBorder() {}\n\n /**\n\t * @protected\n\t */\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n\n if (!tickOpts.display) {\n return;\n }\n\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n this.ticks.forEach((tick, index) => {\n if ((index === 0 && this.min >= 0) && !opts.reverse) {\n return;\n }\n\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(\n -width / 2 - padding.left,\n -offset - tickFont.size / 2 - padding.top,\n width + padding.width,\n tickFont.size + padding.height\n );\n }\n\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth,\n });\n });\n\n ctx.restore();\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {}\n}\n","import adapters from '../core/core.adapters.js';\nimport {callback as call, isFinite, isNullOrUndef, mergeIf, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toRadians, isNumber, _limitValue} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {_arrayUnique, _filterBetween, _lookup} from '../helpers/helpers.collection.js';\n\n/**\n * @typedef { import('../core/core.adapters.js').TimeUnit } Unit\n * @typedef {{common: boolean, size: number, steps?: number}} Interval\n * @typedef { import('../core/core.adapters.js').DateAdapter } DateAdapter\n */\n\n/**\n * @type {Object<Unit, Interval>}\n */\nconst INTERVALS = {\n millisecond: {common: true, size: 1, steps: 1000},\n second: {common: true, size: 1000, steps: 60},\n minute: {common: true, size: 60000, steps: 60},\n hour: {common: true, size: 3600000, steps: 24},\n day: {common: true, size: 86400000, steps: 30},\n week: {common: false, size: 604800000, steps: 4},\n month: {common: true, size: 2.628e9, steps: 12},\n quarter: {common: false, size: 7.884e9, steps: 4},\n year: {common: true, size: 3.154e10}\n};\n\n/**\n * @type {Unit[]}\n */\nconst UNITS = /** @type Unit[] */ /* #__PURE__ */ (Object.keys(INTERVALS));\n\n/**\n * @param {number} a\n * @param {number} b\n */\nfunction sorter(a, b) {\n return a - b;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {*} input\n * @return {number}\n */\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n\n const adapter = scale._adapter;\n const {parser, round, isoWeekday} = scale._parseOpts;\n let value = input;\n\n if (typeof parser === 'function') {\n value = parser(value);\n }\n\n // Only parse if it's not a timestamp already\n if (!isFinite(value)) {\n value = typeof parser === 'string'\n ? adapter.parse(value, parser)\n : adapter.parse(value);\n }\n\n if (value === null) {\n return null;\n }\n\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n ? adapter.startOf(value, 'isoWeek', isoWeekday)\n : adapter.startOf(value, round);\n }\n\n return +value;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @param {number} capacity\n * @return {object}\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n\n return UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n * @param {TimeScale} scale\n * @param {number} numTicks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @return {Unit}\n */\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\n/**\n * @param {Unit} unit\n * @return {object}\n */\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n\n/**\n * @param {object} ticks\n * @param {number} time\n * @param {number[]} [timestamps] - if defined, snap to these timestamps\n */\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {lo, hi} = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n\n/**\n * @param {TimeScale} scale\n * @param {object[]} ticks\n * @param {object} map\n * @param {Unit} majorUnit\n * @return {object[]}\n */\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {number[]} values\n * @param {Unit|undefined} [majorUnit]\n * @return {object[]}\n */\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n /** @type {Object<number,object>} */\n const map = {};\n const ilen = values.length;\n let i, value;\n\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n\n ticks.push({\n value,\n major: false\n });\n }\n\n // We set the major ticks separately from the above loop because calling startOf for every tick\n // is expensive when there is a large number of ticks\n return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nexport default class TimeScale extends Scale {\n\n static id = 'time';\n\n /**\n * @type {any}\n */\n static defaults = {\n /**\n * Scale boundary strategy (bypassed by min/max time options)\n * - `data`: make sure data are fully visible, ticks outside are removed\n * - `ticks`: make sure ticks are fully visible, data outside are truncated\n * @see https://github.com/chartjs/Chart.js/pull/4556\n * @since 2.7.0\n */\n bounds: 'data',\n\n adapters: {},\n time: {\n parser: false, // false == a pattern string from or a custom callback that converts its argument to a timestamp\n unit: false, // false == automatic or override with week, month, year, etc.\n round: false, // none, or override with week, month, year, etc.\n isoWeekday: false, // override week start day\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n /**\n * Ticks generation input values:\n * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n * - 'labels': generates ticks from user given `data.labels` values ONLY.\n * @see https://github.com/chartjs/Chart.js/pull/4507\n * @since 2.7.0\n */\n source: 'auto',\n\n callback: false,\n\n major: {\n enabled: false\n }\n }\n };\n\n /**\n\t * @param {object} props\n\t */\n constructor(props) {\n super(props);\n\n /** @type {{data: number[], labels: number[], all: number[]}} */\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n\n /** @type {Unit} */\n this._unit = 'day';\n /** @type {Unit=} */\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n /** @type {DateAdapter} */\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n\n adapter.init(opts);\n\n // Backward compatibility: before introducing adapter, `displayFormats` was\n // supposed to contain *all* unit/string pairs but this can't be resolved\n // when loading the scale (adapters are loaded afterward), so let's populate\n // missing formats on update\n mergeIf(time.displayFormats, adapter.formats());\n\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n\n super.init(scaleOpts);\n\n this._normalized = opts.normalized;\n }\n\n /**\n\t * @param {*} raw\n\t * @param {number?} [index]\n\t * @return {number}\n\t */\n parse(raw, index) { // eslint-disable-line no-unused-vars\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n // eslint-disable-next-line prefer-const\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n\n /**\n\t\t * @param {object} bounds\n\t\t */\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n\n // If we have user provided `min` and `max` labels / data bounds can be ignored\n if (!minDefined || !maxDefined) {\n // Labels are always considered, when user did not force bounds\n _applyBounds(this._getLabelBounds());\n\n // If `bounds` is `'ticks'` and `ticks.source` is `'labels'`,\n // data bounds are ignored (and don't need to be determined)\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n\n min = isFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n\n // Make sure that max is strictly higher than min (required by the timeseries lookup table)\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n\n /**\n\t * @private\n\t */\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {min, max};\n }\n\n /**\n\t * @return {object[]}\n\t */\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n\n const min = this.min;\n const max = this.max;\n\n const ticks = _filterBetween(timestamps, min, max);\n\n // PRIVATE\n // determineUnitForFormatting relies on the number of ticks so we don't use it when\n // autoSkip is enabled because we don't yet know what the final number of ticks will be\n this._unit = timeOpts.unit || (tickOpts.autoSkip\n ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n\n if (options.reverse) {\n ticks.reverse();\n }\n\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n\n afterAutoSkip() {\n // Offsets for bar charts need to be handled with the auto skipped\n // ticks. Once ticks have been skipped, we re-compute the offsets.\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map(tick => +tick.value));\n }\n }\n\n /**\n\t * Returns the start and end offsets from edges in the form of {start, end}\n\t * where each value is a relative width to the scale and ranges between 0 and 1.\n\t * They add extra margins on the both sides by scaling down the original scale.\n\t * Offsets are added when the `offset` option is true.\n\t * @param {number[]} timestamps\n\t * @protected\n\t */\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n\n this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n }\n\n /**\n\t * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n\t * `minor` unit using the given scale time `options`.\n\t * Important: this method can return ticks outside the min and max range, it's the\n\t * responsibility of the calling code to clamp values if needed.\n\t * @protected\n\t */\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n // @ts-ignore\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n\n // For 'week' unit, handle the first day of week option\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n\n // Align first ticks on unit\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n // Prevent browser from freezing in case user options request millions of milliseconds\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n\n // @ts-ignore\n return Object.keys(ticks).sort(sorter).map(x => +x);\n }\n\n /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n\n /**\n\t * @param {number} value\n\t * @param {string|undefined} format\n\t * @return {string}\n\t */\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n\n /**\n\t * Function to format an individual tick mark\n\t * @param {number} time\n\t * @param {number} index\n\t * @param {object[]} ticks\n\t * @param {string|undefined} [format]\n\t * @return {string}\n\t * @private\n\t */\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n\n if (formatter) {\n return call(formatter, [time, index, ticks], this);\n }\n\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n\n /**\n\t * @param {object[]} ticks\n\t */\n generateTickLabels(ticks) {\n let i, ilen, tick;\n\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n\n /**\n\t * @param {string} label\n\t * @return {{w:number, h:number}}\n\t * @private\n\t */\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n\n return {\n w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n };\n }\n\n /**\n\t * @param {number} exampleTime\n\t * @return {number}\n\t * @private\n\t */\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n\n // pick the longest format (milliseconds) for guesstimation\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n // subtract 1 - if offset then there's one less label than tick\n // if not offset then one half label padding is added to each end leaving room for one less label\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n\n /**\n\t * @protected\n\t */\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const metas = this.getMatchingVisibleMetas();\n\n if (this._normalized && metas.length) {\n return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n }\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n\n return (this._cache.data = this.normalize(timestamps));\n }\n\n /**\n\t * @protected\n\t */\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const labels = this.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(this, labels[i]));\n }\n\n return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n }\n\n /**\n\t * @param {number[]} values\n\t * @protected\n\t */\n normalize(values) {\n // It seems to be somewhat faster to do sorting first\n return _arrayUnique(values.sort(sorter));\n }\n}\n","import TimeScale from './scale.time.js';\nimport {_lookupByKey} from '../helpers/helpers.collection.js';\n\n/**\n * Linearly interpolates the given source `val` using the table. If value is out of bounds, values\n * at edges are used for the interpolation.\n * @param {object} table\n * @param {number} val\n * @param {boolean} [reverse] lookup time based on position instead of vice versa\n * @return {object}\n */\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({lo, hi} = _lookupByKey(table, 'pos', val));\n }\n ({pos: prevSource, time: prevTarget} = table[lo]);\n ({pos: nextSource, time: nextTarget} = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({lo, hi} = _lookupByKey(table, 'time', val));\n }\n ({time: prevSource, pos: prevTarget} = table[lo]);\n ({time: nextSource, pos: nextTarget} = table[hi]);\n }\n\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nclass TimeSeriesScale extends TimeScale {\n\n static id = 'timeseries';\n\n /**\n * @type {any}\n */\n static defaults = TimeScale.defaults;\n\n /**\n\t * @param {object} props\n\t */\n constructor(props) {\n super(props);\n\n /** @type {object[]} */\n this._table = [];\n /** @type {number} */\n this._minPos = undefined;\n /** @type {number} */\n this._tableRange = undefined;\n }\n\n /**\n\t * @protected\n\t */\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n\n /**\n\t * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n\t * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n\t * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n\t * extremity (left + width or top + height). Note that it would be more optimized to directly\n\t * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n\t * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n\t * @param {number[]} timestamps\n\t * @return {object[]}\n\t * @protected\n\t */\n buildLookupTable(timestamps) {\n const {min, max} = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n\n if (items.length < 2) {\n // In case there is less that 2 timestamps between min and max, the scale is defined by min and max\n return [\n {time: min, pos: 0},\n {time: max, pos: 1}\n ];\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n\n // only add points that breaks the scale linearity\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({time: curr, pos: i / (ilen - 1)});\n }\n }\n return table;\n }\n\n /**\n * Generates all timestamps defined in the data.\n * Important: this method can return ticks outside the min and max range, it's the\n * responsibility of the calling code to clamp values if needed.\n * @protected\n */\n _generate() {\n const min = this.min;\n const max = this.max;\n let timestamps = super.getDataTimestamps();\n if (!timestamps.includes(min) || !timestamps.length) {\n timestamps.splice(0, 0, min);\n }\n if (!timestamps.includes(max) || timestamps.length === 1) {\n timestamps.push(max);\n }\n return timestamps.sort((a, b) => a - b);\n }\n\n /**\n\t * Returns all timestamps\n\t * @return {number[]}\n\t * @private\n\t */\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n // If combining labels and data (data might not contain all labels),\n // we need to recheck uniqueness and sort\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n\n return timestamps;\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\n\nexport default TimeSeriesScale;\n","export * from './controllers/index.js';\nexport * from './core/index.js';\nexport * from './elements/index.js';\nexport * from './platform/index.js';\nexport * from './plugins/index.js';\nexport * from './scales/index.js';\n\nimport * as controllers from './controllers/index.js';\nimport * as elements from './elements/index.js';\nimport * as plugins from './plugins/index.js';\nimport * as scales from './scales/index.js';\n\nexport {\n controllers,\n elements,\n plugins,\n scales,\n};\n\nexport const registerables = [\n controllers,\n elements,\n plugins,\n scales,\n];\n","/*!\nTurbo 8.0.12\nCopyright © 2024 37signals LLC\n */\n/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2019 Javan Makhmali\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function (prototype) {\n if (typeof prototype.requestSubmit == \"function\") return\n\n prototype.requestSubmit = function (submitter) {\n if (submitter) {\n validateSubmitter(submitter, this);\n submitter.click();\n } else {\n submitter = document.createElement(\"input\");\n submitter.type = \"submit\";\n submitter.hidden = true;\n this.appendChild(submitter);\n submitter.click();\n this.removeChild(submitter);\n }\n };\n\n function validateSubmitter(submitter, form) {\n submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n submitter.form == form ||\n raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n }\n\n function raise(errorConstructor, message, name) {\n throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\n\nfunction findSubmitterFromClickTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n const candidate = element ? element.closest(\"input, button\") : null;\n return candidate?.type == \"submit\" ? candidate : null\n}\n\nfunction clickCaptured(event) {\n const submitter = findSubmitterFromClickTarget(event.target);\n\n if (submitter && submitter.form) {\n submittersByForm.set(submitter.form, submitter);\n }\n}\n\n(function () {\n if (\"submitter\" in Event.prototype) return\n\n let prototype = window.Event.prototype;\n // Certain versions of Safari 15 have a bug where they won't\n // populate the submitter. This hurts TurboDrive's enable/disable detection.\n // See https://bugs.webkit.org/show_bug.cgi?id=229660\n if (\"SubmitEvent\" in window) {\n const prototypeOfSubmitEvent = window.SubmitEvent.prototype;\n\n if (/Apple Computer/.test(navigator.vendor) && !(\"submitter\" in prototypeOfSubmitEvent)) {\n prototype = prototypeOfSubmitEvent;\n } else {\n return // polyfill not needed\n }\n }\n\n addEventListener(\"click\", clickCaptured, true);\n\n Object.defineProperty(prototype, \"submitter\", {\n get() {\n if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n return submittersByForm.get(this.target)\n }\n }\n });\n})();\n\nconst FrameLoadingStyle = {\n eager: \"eager\",\n lazy: \"lazy\"\n};\n\n/**\n * Contains a fragment of HTML which is updated based on navigation within\n * it (e.g. via links or form submissions).\n *\n * @customElement turbo-frame\n * @example\n * <turbo-frame id=\"messages\">\n * <a href=\"/messages/expanded\">\n * Show all expanded messages in this frame.\n * </a>\n *\n * <form action=\"/messages\">\n * Show response from this form within this frame.\n * </form>\n * </turbo-frame>\n */\nclass FrameElement extends HTMLElement {\n static delegateConstructor = undefined\n\n loaded = Promise.resolve()\n\n static get observedAttributes() {\n return [\"disabled\", \"loading\", \"src\"]\n }\n\n constructor() {\n super();\n this.delegate = new FrameElement.delegateConstructor(this);\n }\n\n connectedCallback() {\n this.delegate.connect();\n }\n\n disconnectedCallback() {\n this.delegate.disconnect();\n }\n\n reload() {\n return this.delegate.sourceURLReloaded()\n }\n\n attributeChangedCallback(name) {\n if (name == \"loading\") {\n this.delegate.loadingStyleChanged();\n } else if (name == \"src\") {\n this.delegate.sourceURLChanged();\n } else if (name == \"disabled\") {\n this.delegate.disabledChanged();\n }\n }\n\n /**\n * Gets the URL to lazily load source HTML from\n */\n get src() {\n return this.getAttribute(\"src\")\n }\n\n /**\n * Sets the URL to lazily load source HTML from\n */\n set src(value) {\n if (value) {\n this.setAttribute(\"src\", value);\n } else {\n this.removeAttribute(\"src\");\n }\n }\n\n /**\n * Gets the refresh mode for the frame.\n */\n get refresh() {\n return this.getAttribute(\"refresh\")\n }\n\n /**\n * Sets the refresh mode for the frame.\n */\n set refresh(value) {\n if (value) {\n this.setAttribute(\"refresh\", value);\n } else {\n this.removeAttribute(\"refresh\");\n }\n }\n\n get shouldReloadWithMorph() {\n return this.src && this.refresh === \"morph\"\n }\n\n /**\n * Determines if the element is loading\n */\n get loading() {\n return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\")\n }\n\n /**\n * Sets the value of if the element is loading\n */\n set loading(value) {\n if (value) {\n this.setAttribute(\"loading\", value);\n } else {\n this.removeAttribute(\"loading\");\n }\n }\n\n /**\n * Gets the disabled state of the frame.\n *\n * If disabled, no requests will be intercepted by the frame.\n */\n get disabled() {\n return this.hasAttribute(\"disabled\")\n }\n\n /**\n * Sets the disabled state of the frame.\n *\n * If disabled, no requests will be intercepted by the frame.\n */\n set disabled(value) {\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n }\n\n /**\n * Gets the autoscroll state of the frame.\n *\n * If true, the frame will be scrolled into view automatically on update.\n */\n get autoscroll() {\n return this.hasAttribute(\"autoscroll\")\n }\n\n /**\n * Sets the autoscroll state of the frame.\n *\n * If true, the frame will be scrolled into view automatically on update.\n */\n set autoscroll(value) {\n if (value) {\n this.setAttribute(\"autoscroll\", \"\");\n } else {\n this.removeAttribute(\"autoscroll\");\n }\n }\n\n /**\n * Determines if the element has finished loading\n */\n get complete() {\n return !this.delegate.isLoading\n }\n\n /**\n * Gets the active state of the frame.\n *\n * If inactive, source changes will not be observed.\n */\n get isActive() {\n return this.ownerDocument === document && !this.isPreview\n }\n\n /**\n * Sets the active state of the frame.\n *\n * If inactive, source changes will not be observed.\n */\n get isPreview() {\n return this.ownerDocument?.documentElement?.hasAttribute(\"data-turbo-preview\")\n }\n}\n\nfunction frameLoadingStyleFromString(style) {\n switch (style.toLowerCase()) {\n case \"lazy\":\n return FrameLoadingStyle.lazy\n default:\n return FrameLoadingStyle.eager\n }\n}\n\nconst drive = {\n enabled: true,\n progressBarDelay: 500,\n unvisitableExtensions: new Set(\n [\n \".7z\", \".aac\", \".apk\", \".avi\", \".bmp\", \".bz2\", \".css\", \".csv\", \".deb\", \".dmg\", \".doc\",\n \".docx\", \".exe\", \".gif\", \".gz\", \".heic\", \".heif\", \".ico\", \".iso\", \".jpeg\", \".jpg\",\n \".js\", \".json\", \".m4a\", \".mkv\", \".mov\", \".mp3\", \".mp4\", \".mpeg\", \".mpg\", \".msi\",\n \".ogg\", \".ogv\", \".pdf\", \".pkg\", \".png\", \".ppt\", \".pptx\", \".rar\", \".rtf\",\n \".svg\", \".tar\", \".tif\", \".tiff\", \".txt\", \".wav\", \".webm\", \".webp\", \".wma\", \".wmv\",\n \".xls\", \".xlsx\", \".xml\", \".zip\"\n ]\n )\n};\n\nfunction activateScriptElement(element) {\n if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n return element\n } else {\n const createdScriptElement = document.createElement(\"script\");\n const cspNonce = getCspNonce();\n if (cspNonce) {\n createdScriptElement.nonce = cspNonce;\n }\n createdScriptElement.textContent = element.textContent;\n createdScriptElement.async = false;\n copyElementAttributes(createdScriptElement, element);\n return createdScriptElement\n }\n}\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n for (const { name, value } of sourceElement.attributes) {\n destinationElement.setAttribute(name, value);\n }\n}\n\nfunction createDocumentFragment(html) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n return template.content\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n const event = new CustomEvent(eventName, {\n cancelable,\n bubbles: true,\n composed: true,\n detail\n });\n\n if (target && target.isConnected) {\n target.dispatchEvent(event);\n } else {\n document.documentElement.dispatchEvent(event);\n }\n\n return event\n}\n\nfunction cancelEvent(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n\nfunction nextRepaint() {\n if (document.visibilityState === \"hidden\") {\n return nextEventLoopTick()\n } else {\n return nextAnimationFrame()\n }\n}\n\nfunction nextAnimationFrame() {\n return new Promise((resolve) => requestAnimationFrame(() => resolve()))\n}\n\nfunction nextEventLoopTick() {\n return new Promise((resolve) => setTimeout(() => resolve(), 0))\n}\n\nfunction nextMicrotask() {\n return Promise.resolve()\n}\n\nfunction parseHTMLDocument(html = \"\") {\n return new DOMParser().parseFromString(html, \"text/html\")\n}\n\nfunction unindent(strings, ...values) {\n const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n const match = lines[0].match(/^\\s+/);\n const indent = match ? match[0].length : 0;\n return lines.map((line) => line.slice(indent)).join(\"\\n\")\n}\n\nfunction interpolate(strings, values) {\n return strings.reduce((result, string, i) => {\n const value = values[i] == undefined ? \"\" : values[i];\n return result + string + value\n }, \"\")\n}\n\nfunction uuid() {\n return Array.from({ length: 36 })\n .map((_, i) => {\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n return \"-\"\n } else if (i == 14) {\n return \"4\"\n } else if (i == 19) {\n return (Math.floor(Math.random() * 4) + 8).toString(16)\n } else {\n return Math.floor(Math.random() * 15).toString(16)\n }\n })\n .join(\"\")\n}\n\nfunction getAttribute(attributeName, ...elements) {\n for (const value of elements.map((element) => element?.getAttribute(attributeName))) {\n if (typeof value == \"string\") return value\n }\n\n return null\n}\n\nfunction hasAttribute(attributeName, ...elements) {\n return elements.some((element) => element && element.hasAttribute(attributeName))\n}\n\nfunction markAsBusy(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.setAttribute(\"busy\", \"\");\n }\n element.setAttribute(\"aria-busy\", \"true\");\n }\n}\n\nfunction clearBusyState(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.removeAttribute(\"busy\");\n }\n\n element.removeAttribute(\"aria-busy\");\n }\n}\n\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n return new Promise((resolve) => {\n const onComplete = () => {\n element.removeEventListener(\"error\", onComplete);\n element.removeEventListener(\"load\", onComplete);\n resolve();\n };\n\n element.addEventListener(\"load\", onComplete, { once: true });\n element.addEventListener(\"error\", onComplete, { once: true });\n setTimeout(resolve, timeoutInMilliseconds);\n })\n}\n\nfunction getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState\n case \"advance\":\n case \"restore\":\n return history.pushState\n }\n}\n\nfunction isAction(action) {\n return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nfunction getVisitAction(...elements) {\n const action = getAttribute(\"data-turbo-action\", ...elements);\n\n return isAction(action) ? action : null\n}\n\nfunction getMetaElement(name) {\n return document.querySelector(`meta[name=\"${name}\"]`)\n}\n\nfunction getMetaContent(name) {\n const element = getMetaElement(name);\n return element && element.content\n}\n\nfunction getCspNonce() {\n const element = getMetaElement(\"csp-nonce\");\n\n if (element) {\n const { nonce, content } = element;\n return nonce == \"\" ? content : nonce\n }\n}\n\nfunction setMetaContent(name, content) {\n let element = getMetaElement(name);\n\n if (!element) {\n element = document.createElement(\"meta\");\n element.setAttribute(\"name\", name);\n\n document.head.appendChild(element);\n }\n\n element.setAttribute(\"content\", content);\n\n return element\n}\n\nfunction findClosestRecursively(element, selector) {\n if (element instanceof Element) {\n return (\n element.closest(selector) || findClosestRecursively(element.assignedSlot || element.getRootNode()?.host, selector)\n )\n }\n}\n\nfunction elementIsFocusable(element) {\n const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n\n return !!element && element.closest(inertDisabledOrHidden) == null && typeof element.focus == \"function\"\n}\n\nfunction queryAutofocusableElement(elementOrDocumentFragment) {\n return Array.from(elementOrDocumentFragment.querySelectorAll(\"[autofocus]\")).find(elementIsFocusable)\n}\n\nasync function around(callback, reader) {\n const before = reader();\n\n callback();\n\n await nextAnimationFrame();\n\n const after = reader();\n\n return [before, after]\n}\n\nfunction doesNotTargetIFrame(name) {\n if (name === \"_blank\") {\n return false\n } else if (name) {\n for (const element of document.getElementsByName(name)) {\n if (element instanceof HTMLIFrameElement) return false\n }\n\n return true\n } else {\n return true\n }\n}\n\nfunction findLinkFromClickTarget(target) {\n return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\")\n}\n\nfunction getLocationForLink(link) {\n return expandURL(link.getAttribute(\"href\") || \"\")\n}\n\nfunction debounce(fn, delay) {\n let timeoutId = null;\n\n return (...args) => {\n const callback = () => fn.apply(this, args);\n clearTimeout(timeoutId);\n timeoutId = setTimeout(callback, delay);\n }\n}\n\nconst submitter = {\n \"aria-disabled\": {\n beforeSubmit: submitter => {\n submitter.setAttribute(\"aria-disabled\", \"true\");\n submitter.addEventListener(\"click\", cancelEvent);\n },\n\n afterSubmit: submitter => {\n submitter.removeAttribute(\"aria-disabled\");\n submitter.removeEventListener(\"click\", cancelEvent);\n }\n },\n\n \"disabled\": {\n beforeSubmit: submitter => submitter.disabled = true,\n afterSubmit: submitter => submitter.disabled = false\n }\n};\n\nclass Config {\n #submitter = null\n\n constructor(config) {\n Object.assign(this, config);\n }\n\n get submitter() {\n return this.#submitter\n }\n\n set submitter(value) {\n this.#submitter = submitter[value] || value;\n }\n}\n\nconst forms = new Config({\n mode: \"on\",\n submitter: \"disabled\"\n});\n\nconst config = {\n drive,\n forms\n};\n\nfunction expandURL(locatable) {\n return new URL(locatable.toString(), document.baseURI)\n}\n\nfunction getAnchor(url) {\n let anchorMatch;\n if (url.hash) {\n return url.hash.slice(1)\n // eslint-disable-next-line no-cond-assign\n } else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n return anchorMatch[1]\n }\n}\n\nfunction getAction$1(form, submitter) {\n const action = submitter?.getAttribute(\"formaction\") || form.getAttribute(\"action\") || form.action;\n\n return expandURL(action)\n}\n\nfunction getExtension(url) {\n return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\"\n}\n\nfunction isPrefixedBy(baseURL, url) {\n const prefix = getPrefix(url);\n return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix)\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n return isPrefixedBy(location, rootLocation) && !config.drive.unvisitableExtensions.has(getExtension(location))\n}\n\nfunction getRequestURL(url) {\n const anchor = getAnchor(url);\n return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href\n}\n\nfunction toCacheKey(url) {\n return getRequestURL(url)\n}\n\nfunction urlsAreEqual(left, right) {\n return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url) {\n return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url) {\n return getPathComponents(url).slice(-1)[0]\n}\n\nfunction getPrefix(url) {\n return addTrailingSlash(url.origin + url.pathname)\n}\n\nfunction addTrailingSlash(value) {\n return value.endsWith(\"/\") ? value : value + \"/\"\n}\n\nclass FetchResponse {\n constructor(response) {\n this.response = response;\n }\n\n get succeeded() {\n return this.response.ok\n }\n\n get failed() {\n return !this.succeeded\n }\n\n get clientError() {\n return this.statusCode >= 400 && this.statusCode <= 499\n }\n\n get serverError() {\n return this.statusCode >= 500 && this.statusCode <= 599\n }\n\n get redirected() {\n return this.response.redirected\n }\n\n get location() {\n return expandURL(this.response.url)\n }\n\n get isHTML() {\n return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n }\n\n get statusCode() {\n return this.response.status\n }\n\n get contentType() {\n return this.header(\"Content-Type\")\n }\n\n get responseText() {\n return this.response.clone().text()\n }\n\n get responseHTML() {\n if (this.isHTML) {\n return this.response.clone().text()\n } else {\n return Promise.resolve(undefined)\n }\n }\n\n header(name) {\n return this.response.headers.get(name)\n }\n}\n\nclass LimitedSet extends Set {\n constructor(maxSize) {\n super();\n this.maxSize = maxSize;\n }\n\n add(value) {\n if (this.size >= this.maxSize) {\n const iterator = this.values();\n const oldestValue = iterator.next().value;\n this.delete(oldestValue);\n }\n super.add(value);\n }\n}\n\nconst recentRequests = new LimitedSet(20);\n\nconst nativeFetch = window.fetch;\n\nfunction fetchWithTurboHeaders(url, options = {}) {\n const modifiedHeaders = new Headers(options.headers || {});\n const requestUID = uuid();\n recentRequests.add(requestUID);\n modifiedHeaders.append(\"X-Turbo-Request-Id\", requestUID);\n\n return nativeFetch(url, {\n ...options,\n headers: modifiedHeaders\n })\n}\n\nfunction fetchMethodFromString(method) {\n switch (method.toLowerCase()) {\n case \"get\":\n return FetchMethod.get\n case \"post\":\n return FetchMethod.post\n case \"put\":\n return FetchMethod.put\n case \"patch\":\n return FetchMethod.patch\n case \"delete\":\n return FetchMethod.delete\n }\n}\n\nconst FetchMethod = {\n get: \"get\",\n post: \"post\",\n put: \"put\",\n patch: \"patch\",\n delete: \"delete\"\n};\n\nfunction fetchEnctypeFromString(encoding) {\n switch (encoding.toLowerCase()) {\n case FetchEnctype.multipart:\n return FetchEnctype.multipart\n case FetchEnctype.plain:\n return FetchEnctype.plain\n default:\n return FetchEnctype.urlEncoded\n }\n}\n\nconst FetchEnctype = {\n urlEncoded: \"application/x-www-form-urlencoded\",\n multipart: \"multipart/form-data\",\n plain: \"text/plain\"\n};\n\nclass FetchRequest {\n abortController = new AbortController()\n #resolveRequestPromise = (_value) => {}\n\n constructor(delegate, method, location, requestBody = new URLSearchParams(), target = null, enctype = FetchEnctype.urlEncoded) {\n const [url, body] = buildResourceAndBody(expandURL(location), method, requestBody, enctype);\n\n this.delegate = delegate;\n this.url = url;\n this.target = target;\n this.fetchOptions = {\n credentials: \"same-origin\",\n redirect: \"follow\",\n method: method.toUpperCase(),\n headers: { ...this.defaultHeaders },\n body: body,\n signal: this.abortSignal,\n referrer: this.delegate.referrer?.href\n };\n this.enctype = enctype;\n }\n\n get method() {\n return this.fetchOptions.method\n }\n\n set method(value) {\n const fetchBody = this.isSafe ? this.url.searchParams : this.fetchOptions.body || new FormData();\n const fetchMethod = fetchMethodFromString(value) || FetchMethod.get;\n\n this.url.search = \"\";\n\n const [url, body] = buildResourceAndBody(this.url, fetchMethod, fetchBody, this.enctype);\n\n this.url = url;\n this.fetchOptions.body = body;\n this.fetchOptions.method = fetchMethod.toUpperCase();\n }\n\n get headers() {\n return this.fetchOptions.headers\n }\n\n set headers(value) {\n this.fetchOptions.headers = value;\n }\n\n get body() {\n if (this.isSafe) {\n return this.url.searchParams\n } else {\n return this.fetchOptions.body\n }\n }\n\n set body(value) {\n this.fetchOptions.body = value;\n }\n\n get location() {\n return this.url\n }\n\n get params() {\n return this.url.searchParams\n }\n\n get entries() {\n return this.body ? Array.from(this.body.entries()) : []\n }\n\n cancel() {\n this.abortController.abort();\n }\n\n async perform() {\n const { fetchOptions } = this;\n this.delegate.prepareRequest(this);\n const event = await this.#allowRequestToBeIntercepted(fetchOptions);\n try {\n this.delegate.requestStarted(this);\n\n if (event.detail.fetchRequest) {\n this.response = event.detail.fetchRequest.response;\n } else {\n this.response = fetchWithTurboHeaders(this.url.href, fetchOptions);\n }\n\n const response = await this.response;\n return await this.receive(response)\n } catch (error) {\n if (error.name !== \"AbortError\") {\n if (this.#willDelegateErrorHandling(error)) {\n this.delegate.requestErrored(this, error);\n }\n throw error\n }\n } finally {\n this.delegate.requestFinished(this);\n }\n }\n\n async receive(response) {\n const fetchResponse = new FetchResponse(response);\n const event = dispatch(\"turbo:before-fetch-response\", {\n cancelable: true,\n detail: { fetchResponse },\n target: this.target\n });\n if (event.defaultPrevented) {\n this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n } else if (fetchResponse.succeeded) {\n this.delegate.requestSucceededWithResponse(this, fetchResponse);\n } else {\n this.delegate.requestFailedWithResponse(this, fetchResponse);\n }\n return fetchResponse\n }\n\n get defaultHeaders() {\n return {\n Accept: \"text/html, application/xhtml+xml\"\n }\n }\n\n get isSafe() {\n return isSafe(this.method)\n }\n\n get abortSignal() {\n return this.abortController.signal\n }\n\n acceptResponseType(mimeType) {\n this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n }\n\n async #allowRequestToBeIntercepted(fetchOptions) {\n const requestInterception = new Promise((resolve) => (this.#resolveRequestPromise = resolve));\n const event = dispatch(\"turbo:before-fetch-request\", {\n cancelable: true,\n detail: {\n fetchOptions,\n url: this.url,\n resume: this.#resolveRequestPromise\n },\n target: this.target\n });\n this.url = event.detail.url;\n if (event.defaultPrevented) await requestInterception;\n\n return event\n }\n\n #willDelegateErrorHandling(error) {\n const event = dispatch(\"turbo:fetch-request-error\", {\n target: this.target,\n cancelable: true,\n detail: { request: this, error: error }\n });\n\n return !event.defaultPrevented\n }\n}\n\nfunction isSafe(fetchMethod) {\n return fetchMethodFromString(fetchMethod) == FetchMethod.get\n}\n\nfunction buildResourceAndBody(resource, method, requestBody, enctype) {\n const searchParams =\n Array.from(requestBody).length > 0 ? new URLSearchParams(entriesExcludingFiles(requestBody)) : resource.searchParams;\n\n if (isSafe(method)) {\n return [mergeIntoURLSearchParams(resource, searchParams), null]\n } else if (enctype == FetchEnctype.urlEncoded) {\n return [resource, searchParams]\n } else {\n return [resource, requestBody]\n }\n}\n\nfunction entriesExcludingFiles(requestBody) {\n const entries = [];\n\n for (const [name, value] of requestBody) {\n if (value instanceof File) continue\n else entries.push([name, value]);\n }\n\n return entries\n}\n\nfunction mergeIntoURLSearchParams(url, requestBody) {\n const searchParams = new URLSearchParams(entriesExcludingFiles(requestBody));\n\n url.search = searchParams.toString();\n\n return url\n}\n\nclass AppearanceObserver {\n started = false\n\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n this.intersectionObserver = new IntersectionObserver(this.intersect);\n }\n\n start() {\n if (!this.started) {\n this.started = true;\n this.intersectionObserver.observe(this.element);\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n this.intersectionObserver.unobserve(this.element);\n }\n }\n\n intersect = (entries) => {\n const lastEntry = entries.slice(-1)[0];\n if (lastEntry?.isIntersecting) {\n this.delegate.elementAppearedInViewport(this.element);\n }\n }\n}\n\nclass StreamMessage {\n static contentType = \"text/vnd.turbo-stream.html\"\n\n static wrap(message) {\n if (typeof message == \"string\") {\n return new this(createDocumentFragment(message))\n } else {\n return message\n }\n }\n\n constructor(fragment) {\n this.fragment = importStreamElements(fragment);\n }\n}\n\nfunction importStreamElements(fragment) {\n for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n const streamElement = document.importNode(element, true);\n\n for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n }\n\n element.replaceWith(streamElement);\n }\n\n return fragment\n}\n\nconst PREFETCH_DELAY = 100;\n\nclass PrefetchCache {\n #prefetchTimeout = null\n #prefetched = null\n\n get(url) {\n if (this.#prefetched && this.#prefetched.url === url && this.#prefetched.expire > Date.now()) {\n return this.#prefetched.request\n }\n }\n\n setLater(url, request, ttl) {\n this.clear();\n\n this.#prefetchTimeout = setTimeout(() => {\n request.perform();\n this.set(url, request, ttl);\n this.#prefetchTimeout = null;\n }, PREFETCH_DELAY);\n }\n\n set(url, request, ttl) {\n this.#prefetched = { url, request, expire: new Date(new Date().getTime() + ttl) };\n }\n\n clear() {\n if (this.#prefetchTimeout) clearTimeout(this.#prefetchTimeout);\n this.#prefetched = null;\n }\n}\n\nconst cacheTtl = 10 * 1000;\nconst prefetchCache = new PrefetchCache();\n\nconst FormSubmissionState = {\n initialized: \"initialized\",\n requesting: \"requesting\",\n waiting: \"waiting\",\n receiving: \"receiving\",\n stopping: \"stopping\",\n stopped: \"stopped\"\n};\n\nclass FormSubmission {\n state = FormSubmissionState.initialized\n\n static confirmMethod(message) {\n return Promise.resolve(confirm(message))\n }\n\n constructor(delegate, formElement, submitter, mustRedirect = false) {\n const method = getMethod(formElement, submitter);\n const action = getAction(getFormAction(formElement, submitter), method);\n const body = buildFormData(formElement, submitter);\n const enctype = getEnctype(formElement, submitter);\n\n this.delegate = delegate;\n this.formElement = formElement;\n this.submitter = submitter;\n this.fetchRequest = new FetchRequest(this, method, action, body, formElement, enctype);\n this.mustRedirect = mustRedirect;\n }\n\n get method() {\n return this.fetchRequest.method\n }\n\n set method(value) {\n this.fetchRequest.method = value;\n }\n\n get action() {\n return this.fetchRequest.url.toString()\n }\n\n set action(value) {\n this.fetchRequest.url = expandURL(value);\n }\n\n get body() {\n return this.fetchRequest.body\n }\n\n get enctype() {\n return this.fetchRequest.enctype\n }\n\n get isSafe() {\n return this.fetchRequest.isSafe\n }\n\n get location() {\n return this.fetchRequest.url\n }\n\n // The submission process\n\n async start() {\n const { initialized, requesting } = FormSubmissionState;\n const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n\n if (typeof confirmationMessage === \"string\") {\n const confirmMethod = typeof config.forms.confirm === \"function\" ?\n config.forms.confirm :\n FormSubmission.confirmMethod;\n\n const answer = await confirmMethod(confirmationMessage, this.formElement, this.submitter);\n if (!answer) {\n return\n }\n }\n\n if (this.state == initialized) {\n this.state = requesting;\n return this.fetchRequest.perform()\n }\n }\n\n stop() {\n const { stopping, stopped } = FormSubmissionState;\n if (this.state != stopping && this.state != stopped) {\n this.state = stopping;\n this.fetchRequest.cancel();\n return true\n }\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n if (!request.isSafe) {\n const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n if (token) {\n request.headers[\"X-CSRF-Token\"] = token;\n }\n }\n\n if (this.requestAcceptsTurboStreamResponse(request)) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted(_request) {\n this.state = FormSubmissionState.waiting;\n if (this.submitter) config.forms.submitter.beforeSubmit(this.submitter);\n this.setSubmitsWith();\n markAsBusy(this.formElement);\n dispatch(\"turbo:submit-start\", {\n target: this.formElement,\n detail: { formSubmission: this }\n });\n this.delegate.formSubmissionStarted(this);\n }\n\n requestPreventedHandlingResponse(request, response) {\n prefetchCache.clear();\n\n this.result = { success: response.succeeded, fetchResponse: response };\n }\n\n requestSucceededWithResponse(request, response) {\n if (response.clientError || response.serverError) {\n this.delegate.formSubmissionFailedWithResponse(this, response);\n return\n }\n\n prefetchCache.clear();\n\n if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n const error = new Error(\"Form responses must redirect to another location\");\n this.delegate.formSubmissionErrored(this, error);\n } else {\n this.state = FormSubmissionState.receiving;\n this.result = { success: true, fetchResponse: response };\n this.delegate.formSubmissionSucceededWithResponse(this, response);\n }\n }\n\n requestFailedWithResponse(request, response) {\n this.result = { success: false, fetchResponse: response };\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n\n requestErrored(request, error) {\n this.result = { success: false, error };\n this.delegate.formSubmissionErrored(this, error);\n }\n\n requestFinished(_request) {\n this.state = FormSubmissionState.stopped;\n if (this.submitter) config.forms.submitter.afterSubmit(this.submitter);\n this.resetSubmitterText();\n clearBusyState(this.formElement);\n dispatch(\"turbo:submit-end\", {\n target: this.formElement,\n detail: { formSubmission: this, ...this.result }\n });\n this.delegate.formSubmissionFinished(this);\n }\n\n // Private\n\n setSubmitsWith() {\n if (!this.submitter || !this.submitsWith) return\n\n if (this.submitter.matches(\"button\")) {\n this.originalSubmitText = this.submitter.innerHTML;\n this.submitter.innerHTML = this.submitsWith;\n } else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n this.originalSubmitText = input.value;\n input.value = this.submitsWith;\n }\n }\n\n resetSubmitterText() {\n if (!this.submitter || !this.originalSubmitText) return\n\n if (this.submitter.matches(\"button\")) {\n this.submitter.innerHTML = this.originalSubmitText;\n } else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n input.value = this.originalSubmitText;\n }\n }\n\n requestMustRedirect(request) {\n return !request.isSafe && this.mustRedirect\n }\n\n requestAcceptsTurboStreamResponse(request) {\n return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement)\n }\n\n get submitsWith() {\n return this.submitter?.getAttribute(\"data-turbo-submits-with\")\n }\n}\n\nfunction buildFormData(formElement, submitter) {\n const formData = new FormData(formElement);\n const name = submitter?.getAttribute(\"name\");\n const value = submitter?.getAttribute(\"value\");\n\n if (name) {\n formData.append(name, value || \"\");\n }\n\n return formData\n}\n\nfunction getCookieValue(cookieName) {\n if (cookieName != null) {\n const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n if (cookie) {\n const value = cookie.split(\"=\").slice(1).join(\"=\");\n return value ? decodeURIComponent(value) : undefined\n }\n }\n}\n\nfunction responseSucceededWithoutRedirect(response) {\n return response.statusCode == 200 && !response.redirected\n}\n\nfunction getFormAction(formElement, submitter) {\n const formElementAction = typeof formElement.action === \"string\" ? formElement.action : null;\n\n if (submitter?.hasAttribute(\"formaction\")) {\n return submitter.getAttribute(\"formaction\") || \"\"\n } else {\n return formElement.getAttribute(\"action\") || formElementAction || \"\"\n }\n}\n\nfunction getAction(formAction, fetchMethod) {\n const action = expandURL(formAction);\n\n if (isSafe(fetchMethod)) {\n action.search = \"\";\n }\n\n return action\n}\n\nfunction getMethod(formElement, submitter) {\n const method = submitter?.getAttribute(\"formmethod\") || formElement.getAttribute(\"method\") || \"\";\n return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get\n}\n\nfunction getEnctype(formElement, submitter) {\n return fetchEnctypeFromString(submitter?.getAttribute(\"formenctype\") || formElement.enctype)\n}\n\nclass Snapshot {\n constructor(element) {\n this.element = element;\n }\n\n get activeElement() {\n return this.element.ownerDocument.activeElement\n }\n\n get children() {\n return [...this.element.children]\n }\n\n hasAnchor(anchor) {\n return this.getElementForAnchor(anchor) != null\n }\n\n getElementForAnchor(anchor) {\n return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null\n }\n\n get isConnected() {\n return this.element.isConnected\n }\n\n get firstAutofocusableElement() {\n return queryAutofocusableElement(this.element)\n }\n\n get permanentElements() {\n return queryPermanentElementsAll(this.element)\n }\n\n getPermanentElementById(id) {\n return getPermanentElementById(this.element, id)\n }\n\n getPermanentElementMapForSnapshot(snapshot) {\n const permanentElementMap = {};\n\n for (const currentPermanentElement of this.permanentElements) {\n const { id } = currentPermanentElement;\n const newPermanentElement = snapshot.getPermanentElementById(id);\n if (newPermanentElement) {\n permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n }\n }\n\n return permanentElementMap\n }\n}\n\nfunction getPermanentElementById(node, id) {\n return node.querySelector(`#${id}[data-turbo-permanent]`)\n}\n\nfunction queryPermanentElementsAll(node) {\n return node.querySelectorAll(\"[id][data-turbo-permanent]\")\n}\n\nclass FormSubmitObserver {\n started = false\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n this.started = false;\n }\n }\n\n submitCaptured = () => {\n this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n }\n\n submitBubbled = (event) => {\n if (!event.defaultPrevented) {\n const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n const submitter = event.submitter || undefined;\n\n if (\n form &&\n submissionDoesNotDismissDialog(form, submitter) &&\n submissionDoesNotTargetIFrame(form, submitter) &&\n this.delegate.willSubmitForm(form, submitter)\n ) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.delegate.formSubmitted(form, submitter);\n }\n }\n }\n}\n\nfunction submissionDoesNotDismissDialog(form, submitter) {\n const method = submitter?.getAttribute(\"formmethod\") || form.getAttribute(\"method\");\n\n return method != \"dialog\"\n}\n\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n const target = submitter?.getAttribute(\"formtarget\") || form.getAttribute(\"target\");\n\n return doesNotTargetIFrame(target)\n}\n\nclass View {\n #resolveRenderPromise = (_value) => {}\n #resolveInterceptionPromise = (_value) => {}\n\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n }\n\n // Scrolling\n\n scrollToAnchor(anchor) {\n const element = this.snapshot.getElementForAnchor(anchor);\n if (element) {\n this.scrollToElement(element);\n this.focusElement(element);\n } else {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n }\n\n scrollToAnchorFromLocation(location) {\n this.scrollToAnchor(getAnchor(location));\n }\n\n scrollToElement(element) {\n element.scrollIntoView();\n }\n\n focusElement(element) {\n if (element instanceof HTMLElement) {\n if (element.hasAttribute(\"tabindex\")) {\n element.focus();\n } else {\n element.setAttribute(\"tabindex\", \"-1\");\n element.focus();\n element.removeAttribute(\"tabindex\");\n }\n }\n }\n\n scrollToPosition({ x, y }) {\n this.scrollRoot.scrollTo(x, y);\n }\n\n scrollToTop() {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n\n get scrollRoot() {\n return window\n }\n\n // Rendering\n\n async render(renderer) {\n const { isPreview, shouldRender, willRender, newSnapshot: snapshot } = renderer;\n\n // A workaround to ignore tracked element mismatch reloads when performing\n // a promoted Visit from a frame navigation\n const shouldInvalidate = willRender;\n\n if (shouldRender) {\n try {\n this.renderPromise = new Promise((resolve) => (this.#resolveRenderPromise = resolve));\n this.renderer = renderer;\n await this.prepareToRenderSnapshot(renderer);\n\n const renderInterception = new Promise((resolve) => (this.#resolveInterceptionPromise = resolve));\n const options = { resume: this.#resolveInterceptionPromise, render: this.renderer.renderElement, renderMethod: this.renderer.renderMethod };\n const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n if (!immediateRender) await renderInterception;\n\n await this.renderSnapshot(renderer);\n this.delegate.viewRenderedSnapshot(snapshot, isPreview, this.renderer.renderMethod);\n this.delegate.preloadOnLoadLinksForView(this.element);\n this.finishRenderingSnapshot(renderer);\n } finally {\n delete this.renderer;\n this.#resolveRenderPromise(undefined);\n delete this.renderPromise;\n }\n } else if (shouldInvalidate) {\n this.invalidate(renderer.reloadReason);\n }\n }\n\n invalidate(reason) {\n this.delegate.viewInvalidated(reason);\n }\n\n async prepareToRenderSnapshot(renderer) {\n this.markAsPreview(renderer.isPreview);\n await renderer.prepareToRender();\n }\n\n markAsPreview(isPreview) {\n if (isPreview) {\n this.element.setAttribute(\"data-turbo-preview\", \"\");\n } else {\n this.element.removeAttribute(\"data-turbo-preview\");\n }\n }\n\n markVisitDirection(direction) {\n this.element.setAttribute(\"data-turbo-visit-direction\", direction);\n }\n\n unmarkVisitDirection() {\n this.element.removeAttribute(\"data-turbo-visit-direction\");\n }\n\n async renderSnapshot(renderer) {\n await renderer.render();\n }\n\n finishRenderingSnapshot(renderer) {\n renderer.finishRendering();\n }\n}\n\nclass FrameView extends View {\n missing() {\n this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n }\n\n get snapshot() {\n return new Snapshot(this.element)\n }\n}\n\nclass LinkInterceptor {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n }\n\n start() {\n this.element.addEventListener(\"click\", this.clickBubbled);\n document.addEventListener(\"turbo:click\", this.linkClicked);\n document.addEventListener(\"turbo:before-visit\", this.willVisit);\n }\n\n stop() {\n this.element.removeEventListener(\"click\", this.clickBubbled);\n document.removeEventListener(\"turbo:click\", this.linkClicked);\n document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n }\n\n clickBubbled = (event) => {\n if (this.clickEventIsSignificant(event)) {\n this.clickEvent = event;\n } else {\n delete this.clickEvent;\n }\n }\n\n linkClicked = (event) => {\n if (this.clickEvent && this.clickEventIsSignificant(event)) {\n if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n this.clickEvent.preventDefault();\n event.preventDefault();\n this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n }\n }\n delete this.clickEvent;\n }\n\n willVisit = (_event) => {\n delete this.clickEvent;\n }\n\n clickEventIsSignificant(event) {\n const target = event.composed ? event.target?.parentElement : event.target;\n const element = findLinkFromClickTarget(target) || target;\n\n return element instanceof Element && element.closest(\"turbo-frame, html\") == this.element\n }\n}\n\nclass LinkClickObserver {\n started = false\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n this.started = false;\n }\n }\n\n clickCaptured = () => {\n this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n }\n\n clickBubbled = (event) => {\n if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n const target = (event.composedPath && event.composedPath()[0]) || event.target;\n const link = findLinkFromClickTarget(target);\n if (link && doesNotTargetIFrame(link.target)) {\n const location = getLocationForLink(link);\n if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n event.preventDefault();\n this.delegate.followedLinkToLocation(link, location);\n }\n }\n }\n }\n\n clickEventIsSignificant(event) {\n return !(\n (event.target && event.target.isContentEditable) ||\n event.defaultPrevented ||\n event.which > 1 ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.shiftKey\n )\n }\n}\n\nclass FormLinkClickObserver {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.linkInterceptor = new LinkClickObserver(this, element);\n }\n\n start() {\n this.linkInterceptor.start();\n }\n\n stop() {\n this.linkInterceptor.stop();\n }\n\n // Link hover observer delegate\n\n canPrefetchRequestToLocation(link, location) {\n return false\n }\n\n prefetchAndCacheRequestToLocation(link, location) {\n return\n }\n\n // Link click observer delegate\n\n willFollowLinkToLocation(link, location, originalEvent) {\n return (\n this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n (link.hasAttribute(\"data-turbo-method\") || link.hasAttribute(\"data-turbo-stream\"))\n )\n }\n\n followedLinkToLocation(link, location) {\n const form = document.createElement(\"form\");\n\n const type = \"hidden\";\n for (const [name, value] of location.searchParams) {\n form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n }\n\n const action = Object.assign(location, { search: \"\" });\n form.setAttribute(\"data-turbo\", \"true\");\n form.setAttribute(\"action\", action.href);\n form.setAttribute(\"hidden\", \"\");\n\n const method = link.getAttribute(\"data-turbo-method\");\n if (method) form.setAttribute(\"method\", method);\n\n const turboFrame = link.getAttribute(\"data-turbo-frame\");\n if (turboFrame) form.setAttribute(\"data-turbo-frame\", turboFrame);\n\n const turboAction = getVisitAction(link);\n if (turboAction) form.setAttribute(\"data-turbo-action\", turboAction);\n\n const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n if (turboConfirm) form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n\n const turboStream = link.hasAttribute(\"data-turbo-stream\");\n if (turboStream) form.setAttribute(\"data-turbo-stream\", \"\");\n\n this.delegate.submittedFormLinkToLocation(link, location, form);\n\n document.body.appendChild(form);\n form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n requestAnimationFrame(() => form.requestSubmit());\n }\n}\n\nclass Bardo {\n static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n const bardo = new this(delegate, permanentElementMap);\n bardo.enter();\n await callback();\n bardo.leave();\n }\n\n constructor(delegate, permanentElementMap) {\n this.delegate = delegate;\n this.permanentElementMap = permanentElementMap;\n }\n\n enter() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n }\n }\n\n leave() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement] = this.permanentElementMap[id];\n this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n this.delegate.leavingBardo(currentPermanentElement);\n }\n }\n\n replaceNewPermanentElementWithPlaceholder(permanentElement) {\n const placeholder = createPlaceholderForPermanentElement(permanentElement);\n permanentElement.replaceWith(placeholder);\n }\n\n replaceCurrentPermanentElementWithClone(permanentElement) {\n const clone = permanentElement.cloneNode(true);\n permanentElement.replaceWith(clone);\n }\n\n replacePlaceholderWithPermanentElement(permanentElement) {\n const placeholder = this.getPlaceholderById(permanentElement.id);\n placeholder?.replaceWith(permanentElement);\n }\n\n getPlaceholderById(id) {\n return this.placeholders.find((element) => element.content == id)\n }\n\n get placeholders() {\n return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")]\n }\n}\n\nfunction createPlaceholderForPermanentElement(permanentElement) {\n const element = document.createElement(\"meta\");\n element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n element.setAttribute(\"content\", permanentElement.id);\n return element\n}\n\nclass Renderer {\n #activeElement = null\n\n static renderElement(currentElement, newElement) {\n // Abstract method\n }\n\n constructor(currentSnapshot, newSnapshot, isPreview, willRender = true) {\n this.currentSnapshot = currentSnapshot;\n this.newSnapshot = newSnapshot;\n this.isPreview = isPreview;\n this.willRender = willRender;\n this.renderElement = this.constructor.renderElement;\n this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n }\n\n get shouldRender() {\n return true\n }\n\n get shouldAutofocus() {\n return true\n }\n\n get reloadReason() {\n return\n }\n\n prepareToRender() {\n return\n }\n\n render() {\n // Abstract method\n }\n\n finishRendering() {\n if (this.resolvingFunctions) {\n this.resolvingFunctions.resolve();\n delete this.resolvingFunctions;\n }\n }\n\n async preservingPermanentElements(callback) {\n await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n }\n\n focusFirstAutofocusableElement() {\n if (this.shouldAutofocus) {\n const element = this.connectedSnapshot.firstAutofocusableElement;\n if (element) {\n element.focus();\n }\n }\n }\n\n // Bardo delegate\n\n enteringBardo(currentPermanentElement) {\n if (this.#activeElement) return\n\n if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n this.#activeElement = this.currentSnapshot.activeElement;\n }\n }\n\n leavingBardo(currentPermanentElement) {\n if (currentPermanentElement.contains(this.#activeElement) && this.#activeElement instanceof HTMLElement) {\n this.#activeElement.focus();\n\n this.#activeElement = null;\n }\n }\n\n get connectedSnapshot() {\n return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot\n }\n\n get currentElement() {\n return this.currentSnapshot.element\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n\n get permanentElementMap() {\n return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)\n }\n\n get renderMethod() {\n return \"replace\"\n }\n}\n\nclass FrameRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const destinationRange = document.createRange();\n destinationRange.selectNodeContents(currentElement);\n destinationRange.deleteContents();\n\n const frameElement = newElement;\n const sourceRange = frameElement.ownerDocument?.createRange();\n if (sourceRange) {\n sourceRange.selectNodeContents(frameElement);\n currentElement.appendChild(sourceRange.extractContents());\n }\n }\n\n constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n this.delegate = delegate;\n }\n\n get shouldRender() {\n return true\n }\n\n async render() {\n await nextRepaint();\n this.preservingPermanentElements(() => {\n this.loadFrameElement();\n });\n this.scrollFrameIntoView();\n await nextRepaint();\n this.focusFirstAutofocusableElement();\n await nextRepaint();\n this.activateScriptElements();\n }\n\n loadFrameElement() {\n this.delegate.willRenderFrame(this.currentElement, this.newElement);\n this.renderElement(this.currentElement, this.newElement);\n }\n\n scrollFrameIntoView() {\n if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n const element = this.currentElement.firstElementChild;\n const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n\n if (element) {\n element.scrollIntoView({ block, behavior });\n return true\n }\n }\n return false\n }\n\n activateScriptElements() {\n for (const inertScriptElement of this.newScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n\n get newScriptElements() {\n return this.currentElement.querySelectorAll(\"script\")\n }\n}\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n return value\n } else {\n return defaultValue\n }\n}\n\nfunction readScrollBehavior(value, defaultValue) {\n if (value == \"auto\" || value == \"smooth\") {\n return value\n } else {\n return defaultValue\n }\n}\n\n// base IIFE to define idiomorph\nvar Idiomorph = (function () {\n\n //=============================================================================\n // AND NOW IT BEGINS...\n //=============================================================================\n let EMPTY_SET = new Set();\n\n // default configuration values, updatable by users now\n let defaults = {\n morphStyle: \"outerHTML\",\n callbacks : {\n beforeNodeAdded: noOp,\n afterNodeAdded: noOp,\n beforeNodeMorphed: noOp,\n afterNodeMorphed: noOp,\n beforeNodeRemoved: noOp,\n afterNodeRemoved: noOp,\n beforeAttributeUpdated: noOp,\n\n },\n head: {\n style: 'merge',\n shouldPreserve: function (elt) {\n return elt.getAttribute(\"im-preserve\") === \"true\";\n },\n shouldReAppend: function (elt) {\n return elt.getAttribute(\"im-re-append\") === \"true\";\n },\n shouldRemove: noOp,\n afterHeadMorphed: noOp,\n }\n };\n\n //=============================================================================\n // Core Morphing Algorithm - morph, morphNormalizedContent, morphOldNodeTo, morphChildren\n //=============================================================================\n function morph(oldNode, newContent, config = {}) {\n\n if (oldNode instanceof Document) {\n oldNode = oldNode.documentElement;\n }\n\n if (typeof newContent === 'string') {\n newContent = parseContent(newContent);\n }\n\n let normalizedContent = normalizeContent(newContent);\n\n let ctx = createMorphContext(oldNode, normalizedContent, config);\n\n return morphNormalizedContent(oldNode, normalizedContent, ctx);\n }\n\n function morphNormalizedContent(oldNode, normalizedNewContent, ctx) {\n if (ctx.head.block) {\n let oldHead = oldNode.querySelector('head');\n let newHead = normalizedNewContent.querySelector('head');\n if (oldHead && newHead) {\n let promises = handleHeadElement(newHead, oldHead, ctx);\n // when head promises resolve, call morph again, ignoring the head tag\n Promise.all(promises).then(function () {\n morphNormalizedContent(oldNode, normalizedNewContent, Object.assign(ctx, {\n head: {\n block: false,\n ignore: true\n }\n }));\n });\n return;\n }\n }\n\n if (ctx.morphStyle === \"innerHTML\") {\n\n // innerHTML, so we are only updating the children\n morphChildren(normalizedNewContent, oldNode, ctx);\n return oldNode.children;\n\n } else if (ctx.morphStyle === \"outerHTML\" || ctx.morphStyle == null) {\n // otherwise find the best element match in the new content, morph that, and merge its siblings\n // into either side of the best match\n let bestMatch = findBestNodeMatch(normalizedNewContent, oldNode, ctx);\n\n // stash the siblings that will need to be inserted on either side of the best match\n let previousSibling = bestMatch?.previousSibling;\n let nextSibling = bestMatch?.nextSibling;\n\n // morph it\n let morphedNode = morphOldNodeTo(oldNode, bestMatch, ctx);\n\n if (bestMatch) {\n // if there was a best match, merge the siblings in too and return the\n // whole bunch\n return insertSiblings(previousSibling, morphedNode, nextSibling);\n } else {\n // otherwise nothing was added to the DOM\n return []\n }\n } else {\n throw \"Do not understand how to morph style \" + ctx.morphStyle;\n }\n }\n\n\n /**\n * @param possibleActiveElement\n * @param ctx\n * @returns {boolean}\n */\n function ignoreValueOfActiveElement(possibleActiveElement, ctx) {\n return ctx.ignoreActiveValue && possibleActiveElement === document.activeElement && possibleActiveElement !== document.body;\n }\n\n /**\n * @param oldNode root node to merge content into\n * @param newContent new content to merge\n * @param ctx the merge context\n * @returns {Element} the element that ended up in the DOM\n */\n function morphOldNodeTo(oldNode, newContent, ctx) {\n if (ctx.ignoreActive && oldNode === document.activeElement) ; else if (newContent == null) {\n if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n\n oldNode.remove();\n ctx.callbacks.afterNodeRemoved(oldNode);\n return null;\n } else if (!isSoftMatch(oldNode, newContent)) {\n if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n if (ctx.callbacks.beforeNodeAdded(newContent) === false) return oldNode;\n\n oldNode.parentElement.replaceChild(newContent, oldNode);\n ctx.callbacks.afterNodeAdded(newContent);\n ctx.callbacks.afterNodeRemoved(oldNode);\n return newContent;\n } else {\n if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) return oldNode;\n\n if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (oldNode instanceof HTMLHeadElement && ctx.head.style !== \"morph\") {\n handleHeadElement(newContent, oldNode, ctx);\n } else {\n syncNodeFrom(newContent, oldNode, ctx);\n if (!ignoreValueOfActiveElement(oldNode, ctx)) {\n morphChildren(newContent, oldNode, ctx);\n }\n }\n ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n return oldNode;\n }\n }\n\n /**\n * This is the core algorithm for matching up children. The idea is to use id sets to try to match up\n * nodes as faithfully as possible. We greedily match, which allows us to keep the algorithm fast, but\n * by using id sets, we are able to better match up with content deeper in the DOM.\n *\n * Basic algorithm is, for each node in the new content:\n *\n * - if we have reached the end of the old parent, append the new content\n * - if the new content has an id set match with the current insertion point, morph\n * - search for an id set match\n * - if id set match found, morph\n * - otherwise search for a \"soft\" match\n * - if a soft match is found, morph\n * - otherwise, prepend the new node before the current insertion point\n *\n * The two search algorithms terminate if competing node matches appear to outweigh what can be achieved\n * with the current node. See findIdSetMatch() and findSoftMatch() for details.\n *\n * @param {Element} newParent the parent element of the new content\n * @param {Element } oldParent the old content that we are merging the new content into\n * @param ctx the merge context\n */\n function morphChildren(newParent, oldParent, ctx) {\n\n let nextNewChild = newParent.firstChild;\n let insertionPoint = oldParent.firstChild;\n let newChild;\n\n // run through all the new content\n while (nextNewChild) {\n\n newChild = nextNewChild;\n nextNewChild = newChild.nextSibling;\n\n // if we are at the end of the exiting parent's children, just append\n if (insertionPoint == null) {\n if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n oldParent.appendChild(newChild);\n ctx.callbacks.afterNodeAdded(newChild);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // if the current node has an id set match then morph\n if (isIdSetMatch(newChild, insertionPoint, ctx)) {\n morphOldNodeTo(insertionPoint, newChild, ctx);\n insertionPoint = insertionPoint.nextSibling;\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // otherwise search forward in the existing old children for an id set match\n let idSetMatch = findIdSetMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n // if we found a potential match, remove the nodes until that point and morph\n if (idSetMatch) {\n insertionPoint = removeNodesBetween(insertionPoint, idSetMatch, ctx);\n morphOldNodeTo(idSetMatch, newChild, ctx);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // no id set match found, so scan forward for a soft match for the current node\n let softMatch = findSoftMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n // if we found a soft match for the current node, morph\n if (softMatch) {\n insertionPoint = removeNodesBetween(insertionPoint, softMatch, ctx);\n morphOldNodeTo(softMatch, newChild, ctx);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // abandon all hope of morphing, just insert the new child before the insertion point\n // and move on\n if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n oldParent.insertBefore(newChild, insertionPoint);\n ctx.callbacks.afterNodeAdded(newChild);\n removeIdsFromConsideration(ctx, newChild);\n }\n\n // remove any remaining old nodes that didn't match up with new content\n while (insertionPoint !== null) {\n\n let tempNode = insertionPoint;\n insertionPoint = insertionPoint.nextSibling;\n removeNode(tempNode, ctx);\n }\n }\n\n //=============================================================================\n // Attribute Syncing Code\n //=============================================================================\n\n /**\n * @param attr {String} the attribute to be mutated\n * @param to {Element} the element that is going to be updated\n * @param updateType {(\"update\"|\"remove\")}\n * @param ctx the merge context\n * @returns {boolean} true if the attribute should be ignored, false otherwise\n */\n function ignoreAttribute(attr, to, updateType, ctx) {\n if(attr === 'value' && ctx.ignoreActiveValue && to === document.activeElement){\n return true;\n }\n return ctx.callbacks.beforeAttributeUpdated(attr, to, updateType) === false;\n }\n\n /**\n * syncs a given node with another node, copying over all attributes and\n * inner element state from the 'from' node to the 'to' node\n *\n * @param {Element} from the element to copy attributes & state from\n * @param {Element} to the element to copy attributes & state to\n * @param ctx the merge context\n */\n function syncNodeFrom(from, to, ctx) {\n let type = from.nodeType;\n\n // if is an element type, sync the attributes from the\n // new node into the new node\n if (type === 1 /* element type */) {\n const fromAttributes = from.attributes;\n const toAttributes = to.attributes;\n for (const fromAttribute of fromAttributes) {\n if (ignoreAttribute(fromAttribute.name, to, 'update', ctx)) {\n continue;\n }\n if (to.getAttribute(fromAttribute.name) !== fromAttribute.value) {\n to.setAttribute(fromAttribute.name, fromAttribute.value);\n }\n }\n // iterate backwards to avoid skipping over items when a delete occurs\n for (let i = toAttributes.length - 1; 0 <= i; i--) {\n const toAttribute = toAttributes[i];\n if (ignoreAttribute(toAttribute.name, to, 'remove', ctx)) {\n continue;\n }\n if (!from.hasAttribute(toAttribute.name)) {\n to.removeAttribute(toAttribute.name);\n }\n }\n }\n\n // sync text nodes\n if (type === 8 /* comment */ || type === 3 /* text */) {\n if (to.nodeValue !== from.nodeValue) {\n to.nodeValue = from.nodeValue;\n }\n }\n\n if (!ignoreValueOfActiveElement(to, ctx)) {\n // sync input values\n syncInputValue(from, to, ctx);\n }\n }\n\n /**\n * @param from {Element} element to sync the value from\n * @param to {Element} element to sync the value to\n * @param attributeName {String} the attribute name\n * @param ctx the merge context\n */\n function syncBooleanAttribute(from, to, attributeName, ctx) {\n if (from[attributeName] !== to[attributeName]) {\n let ignoreUpdate = ignoreAttribute(attributeName, to, 'update', ctx);\n if (!ignoreUpdate) {\n to[attributeName] = from[attributeName];\n }\n if (from[attributeName]) {\n if (!ignoreUpdate) {\n to.setAttribute(attributeName, from[attributeName]);\n }\n } else {\n if (!ignoreAttribute(attributeName, to, 'remove', ctx)) {\n to.removeAttribute(attributeName);\n }\n }\n }\n }\n\n /**\n * NB: many bothans died to bring us information:\n *\n * https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n * https://github.com/choojs/nanomorph/blob/master/lib/morph.jsL113\n *\n * @param from {Element} the element to sync the input value from\n * @param to {Element} the element to sync the input value to\n * @param ctx the merge context\n */\n function syncInputValue(from, to, ctx) {\n if (from instanceof HTMLInputElement &&\n to instanceof HTMLInputElement &&\n from.type !== 'file') {\n\n let fromValue = from.value;\n let toValue = to.value;\n\n // sync boolean attributes\n syncBooleanAttribute(from, to, 'checked', ctx);\n syncBooleanAttribute(from, to, 'disabled', ctx);\n\n if (!from.hasAttribute('value')) {\n if (!ignoreAttribute('value', to, 'remove', ctx)) {\n to.value = '';\n to.removeAttribute('value');\n }\n } else if (fromValue !== toValue) {\n if (!ignoreAttribute('value', to, 'update', ctx)) {\n to.setAttribute('value', fromValue);\n to.value = fromValue;\n }\n }\n } else if (from instanceof HTMLOptionElement) {\n syncBooleanAttribute(from, to, 'selected', ctx);\n } else if (from instanceof HTMLTextAreaElement && to instanceof HTMLTextAreaElement) {\n let fromValue = from.value;\n let toValue = to.value;\n if (ignoreAttribute('value', to, 'update', ctx)) {\n return;\n }\n if (fromValue !== toValue) {\n to.value = fromValue;\n }\n if (to.firstChild && to.firstChild.nodeValue !== fromValue) {\n to.firstChild.nodeValue = fromValue;\n }\n }\n }\n\n //=============================================================================\n // the HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n //=============================================================================\n function handleHeadElement(newHeadTag, currentHead, ctx) {\n\n let added = [];\n let removed = [];\n let preserved = [];\n let nodesToAppend = [];\n\n let headMergeStyle = ctx.head.style;\n\n // put all new head elements into a Map, by their outerHTML\n let srcToNewHeadNodes = new Map();\n for (const newHeadChild of newHeadTag.children) {\n srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n }\n\n // for each elt in the current head\n for (const currentHeadElt of currentHead.children) {\n\n // If the current head element is in the map\n let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML);\n let isReAppended = ctx.head.shouldReAppend(currentHeadElt);\n let isPreserved = ctx.head.shouldPreserve(currentHeadElt);\n if (inNewContent || isPreserved) {\n if (isReAppended) {\n // remove the current version and let the new version replace it and re-execute\n removed.push(currentHeadElt);\n } else {\n // this element already exists and should not be re-appended, so remove it from\n // the new content map, preserving it in the DOM\n srcToNewHeadNodes.delete(currentHeadElt.outerHTML);\n preserved.push(currentHeadElt);\n }\n } else {\n if (headMergeStyle === \"append\") {\n // we are appending and this existing element is not new content\n // so if and only if it is marked for re-append do we do anything\n if (isReAppended) {\n removed.push(currentHeadElt);\n nodesToAppend.push(currentHeadElt);\n }\n } else {\n // if this is a merge, we remove this content since it is not in the new head\n if (ctx.head.shouldRemove(currentHeadElt) !== false) {\n removed.push(currentHeadElt);\n }\n }\n }\n }\n\n // Push the remaining new head elements in the Map into the\n // nodes to append to the head tag\n nodesToAppend.push(...srcToNewHeadNodes.values());\n\n let promises = [];\n for (const newNode of nodesToAppend) {\n let newElt = document.createRange().createContextualFragment(newNode.outerHTML).firstChild;\n if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n if (newElt.href || newElt.src) {\n let resolve = null;\n let promise = new Promise(function (_resolve) {\n resolve = _resolve;\n });\n newElt.addEventListener('load', function () {\n resolve();\n });\n promises.push(promise);\n }\n currentHead.appendChild(newElt);\n ctx.callbacks.afterNodeAdded(newElt);\n added.push(newElt);\n }\n }\n\n // remove all removed elements, after we have appended the new elements to avoid\n // additional network requests for things like style sheets\n for (const removedElement of removed) {\n if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) {\n currentHead.removeChild(removedElement);\n ctx.callbacks.afterNodeRemoved(removedElement);\n }\n }\n\n ctx.head.afterHeadMorphed(currentHead, {added: added, kept: preserved, removed: removed});\n return promises;\n }\n\n function noOp() {\n }\n\n /*\n Deep merges the config object and the Idiomoroph.defaults object to\n produce a final configuration object\n */\n function mergeDefaults(config) {\n let finalConfig = {};\n // copy top level stuff into final config\n Object.assign(finalConfig, defaults);\n Object.assign(finalConfig, config);\n\n // copy callbacks into final config (do this to deep merge the callbacks)\n finalConfig.callbacks = {};\n Object.assign(finalConfig.callbacks, defaults.callbacks);\n Object.assign(finalConfig.callbacks, config.callbacks);\n\n // copy head config into final config (do this to deep merge the head)\n finalConfig.head = {};\n Object.assign(finalConfig.head, defaults.head);\n Object.assign(finalConfig.head, config.head);\n return finalConfig;\n }\n\n function createMorphContext(oldNode, newContent, config) {\n config = mergeDefaults(config);\n return {\n target: oldNode,\n newContent: newContent,\n config: config,\n morphStyle: config.morphStyle,\n ignoreActive: config.ignoreActive,\n ignoreActiveValue: config.ignoreActiveValue,\n idMap: createIdMap(oldNode, newContent),\n deadIds: new Set(),\n callbacks: config.callbacks,\n head: config.head\n }\n }\n\n function isIdSetMatch(node1, node2, ctx) {\n if (node1 == null || node2 == null) {\n return false;\n }\n if (node1.nodeType === node2.nodeType && node1.tagName === node2.tagName) {\n if (node1.id !== \"\" && node1.id === node2.id) {\n return true;\n } else {\n return getIdIntersectionCount(ctx, node1, node2) > 0;\n }\n }\n return false;\n }\n\n function isSoftMatch(node1, node2) {\n if (node1 == null || node2 == null) {\n return false;\n }\n return node1.nodeType === node2.nodeType && node1.tagName === node2.tagName\n }\n\n function removeNodesBetween(startInclusive, endExclusive, ctx) {\n while (startInclusive !== endExclusive) {\n let tempNode = startInclusive;\n startInclusive = startInclusive.nextSibling;\n removeNode(tempNode, ctx);\n }\n removeIdsFromConsideration(ctx, endExclusive);\n return endExclusive.nextSibling;\n }\n\n //=============================================================================\n // Scans forward from the insertionPoint in the old parent looking for a potential id match\n // for the newChild. We stop if we find a potential id match for the new child OR\n // if the number of potential id matches we are discarding is greater than the\n // potential id matches for the new child\n //=============================================================================\n function findIdSetMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n // max id matches we are willing to discard in our search\n let newChildPotentialIdCount = getIdIntersectionCount(ctx, newChild, oldParent);\n\n let potentialMatch = null;\n\n // only search forward if there is a possibility of an id match\n if (newChildPotentialIdCount > 0) {\n let potentialMatch = insertionPoint;\n // if there is a possibility of an id match, scan forward\n // keep track of the potential id match count we are discarding (the\n // newChildPotentialIdCount must be greater than this to make it likely\n // worth it)\n let otherMatchCount = 0;\n while (potentialMatch != null) {\n\n // If we have an id match, return the current potential match\n if (isIdSetMatch(newChild, potentialMatch, ctx)) {\n return potentialMatch;\n }\n\n // computer the other potential matches of this new content\n otherMatchCount += getIdIntersectionCount(ctx, potentialMatch, newContent);\n if (otherMatchCount > newChildPotentialIdCount) {\n // if we have more potential id matches in _other_ content, we\n // do not have a good candidate for an id match, so return null\n return null;\n }\n\n // advanced to the next old content child\n potentialMatch = potentialMatch.nextSibling;\n }\n }\n return potentialMatch;\n }\n\n //=============================================================================\n // Scans forward from the insertionPoint in the old parent looking for a potential soft match\n // for the newChild. We stop if we find a potential soft match for the new child OR\n // if we find a potential id match in the old parents children OR if we find two\n // potential soft matches for the next two pieces of new content\n //=============================================================================\n function findSoftMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n let potentialSoftMatch = insertionPoint;\n let nextSibling = newChild.nextSibling;\n let siblingSoftMatchCount = 0;\n\n while (potentialSoftMatch != null) {\n\n if (getIdIntersectionCount(ctx, potentialSoftMatch, newContent) > 0) {\n // the current potential soft match has a potential id set match with the remaining new\n // content so bail out of looking\n return null;\n }\n\n // if we have a soft match with the current node, return it\n if (isSoftMatch(newChild, potentialSoftMatch)) {\n return potentialSoftMatch;\n }\n\n if (isSoftMatch(nextSibling, potentialSoftMatch)) {\n // the next new node has a soft match with this node, so\n // increment the count of future soft matches\n siblingSoftMatchCount++;\n nextSibling = nextSibling.nextSibling;\n\n // If there are two future soft matches, bail to allow the siblings to soft match\n // so that we don't consume future soft matches for the sake of the current node\n if (siblingSoftMatchCount >= 2) {\n return null;\n }\n }\n\n // advanced to the next old content child\n potentialSoftMatch = potentialSoftMatch.nextSibling;\n }\n\n return potentialSoftMatch;\n }\n\n function parseContent(newContent) {\n let parser = new DOMParser();\n\n // remove svgs to avoid false-positive matches on head, etc.\n let contentWithSvgsRemoved = newContent.replace(/<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim, '');\n\n // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n if (contentWithSvgsRemoved.match(/<\\/html>/) || contentWithSvgsRemoved.match(/<\\/head>/) || contentWithSvgsRemoved.match(/<\\/body>/)) {\n let content = parser.parseFromString(newContent, \"text/html\");\n // if it is a full HTML document, return the document itself as the parent container\n if (contentWithSvgsRemoved.match(/<\\/html>/)) {\n content.generatedByIdiomorph = true;\n return content;\n } else {\n // otherwise return the html element as the parent container\n let htmlElement = content.firstChild;\n if (htmlElement) {\n htmlElement.generatedByIdiomorph = true;\n return htmlElement;\n } else {\n return null;\n }\n }\n } else {\n // if it is partial HTML, wrap it in a template tag to provide a parent element and also to help\n // deal with touchy tags like tr, tbody, etc.\n let responseDoc = parser.parseFromString(\"<body><template>\" + newContent + \"</template></body>\", \"text/html\");\n let content = responseDoc.body.querySelector('template').content;\n content.generatedByIdiomorph = true;\n return content\n }\n }\n\n function normalizeContent(newContent) {\n if (newContent == null) {\n // noinspection UnnecessaryLocalVariableJS\n const dummyParent = document.createElement('div');\n return dummyParent;\n } else if (newContent.generatedByIdiomorph) {\n // the template tag created by idiomorph parsing can serve as a dummy parent\n return newContent;\n } else if (newContent instanceof Node) {\n // a single node is added as a child to a dummy parent\n const dummyParent = document.createElement('div');\n dummyParent.append(newContent);\n return dummyParent;\n } else {\n // all nodes in the array or HTMLElement collection are consolidated under\n // a single dummy parent element\n const dummyParent = document.createElement('div');\n for (const elt of [...newContent]) {\n dummyParent.append(elt);\n }\n return dummyParent;\n }\n }\n\n function insertSiblings(previousSibling, morphedNode, nextSibling) {\n let stack = [];\n let added = [];\n while (previousSibling != null) {\n stack.push(previousSibling);\n previousSibling = previousSibling.previousSibling;\n }\n while (stack.length > 0) {\n let node = stack.pop();\n added.push(node); // push added preceding siblings on in order and insert\n morphedNode.parentElement.insertBefore(node, morphedNode);\n }\n added.push(morphedNode);\n while (nextSibling != null) {\n stack.push(nextSibling);\n added.push(nextSibling); // here we are going in order, so push on as we scan, rather than add\n nextSibling = nextSibling.nextSibling;\n }\n while (stack.length > 0) {\n morphedNode.parentElement.insertBefore(stack.pop(), morphedNode.nextSibling);\n }\n return added;\n }\n\n function findBestNodeMatch(newContent, oldNode, ctx) {\n let currentElement;\n currentElement = newContent.firstChild;\n let bestElement = currentElement;\n let score = 0;\n while (currentElement) {\n let newScore = scoreElement(currentElement, oldNode, ctx);\n if (newScore > score) {\n bestElement = currentElement;\n score = newScore;\n }\n currentElement = currentElement.nextSibling;\n }\n return bestElement;\n }\n\n function scoreElement(node1, node2, ctx) {\n if (isSoftMatch(node1, node2)) {\n return .5 + getIdIntersectionCount(ctx, node1, node2);\n }\n return 0;\n }\n\n function removeNode(tempNode, ctx) {\n removeIdsFromConsideration(ctx, tempNode);\n if (ctx.callbacks.beforeNodeRemoved(tempNode) === false) return;\n\n tempNode.remove();\n ctx.callbacks.afterNodeRemoved(tempNode);\n }\n\n //=============================================================================\n // ID Set Functions\n //=============================================================================\n\n function isIdInConsideration(ctx, id) {\n return !ctx.deadIds.has(id);\n }\n\n function idIsWithinNode(ctx, id, targetNode) {\n let idSet = ctx.idMap.get(targetNode) || EMPTY_SET;\n return idSet.has(id);\n }\n\n function removeIdsFromConsideration(ctx, node) {\n let idSet = ctx.idMap.get(node) || EMPTY_SET;\n for (const id of idSet) {\n ctx.deadIds.add(id);\n }\n }\n\n function getIdIntersectionCount(ctx, node1, node2) {\n let sourceSet = ctx.idMap.get(node1) || EMPTY_SET;\n let matchCount = 0;\n for (const id of sourceSet) {\n // a potential match is an id in the source and potentialIdsSet, but\n // that has not already been merged into the DOM\n if (isIdInConsideration(ctx, id) && idIsWithinNode(ctx, id, node2)) {\n ++matchCount;\n }\n }\n return matchCount;\n }\n\n /**\n * A bottom up algorithm that finds all elements with ids inside of the node\n * argument and populates id sets for those nodes and all their parents, generating\n * a set of ids contained within all nodes for the entire hierarchy in the DOM\n *\n * @param node {Element}\n * @param {Map<Node, Set<String>>} idMap\n */\n function populateIdMapForNode(node, idMap) {\n let nodeParent = node.parentElement;\n // find all elements with an id property\n let idElements = node.querySelectorAll('[id]');\n for (const elt of idElements) {\n let current = elt;\n // walk up the parent hierarchy of that element, adding the id\n // of element to the parent's id set\n while (current !== nodeParent && current != null) {\n let idSet = idMap.get(current);\n // if the id set doesn't exist, create it and insert it in the map\n if (idSet == null) {\n idSet = new Set();\n idMap.set(current, idSet);\n }\n idSet.add(elt.id);\n current = current.parentElement;\n }\n }\n }\n\n /**\n * This function computes a map of nodes to all ids contained within that node (inclusive of the\n * node). This map can be used to ask if two nodes have intersecting sets of ids, which allows\n * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n * to contribute to a parent nodes matching.\n *\n * @param {Element} oldContent the old content that will be morphed\n * @param {Element} newContent the new content to morph to\n * @returns {Map<Node, Set<String>>} a map of nodes to id sets for the\n */\n function createIdMap(oldContent, newContent) {\n let idMap = new Map();\n populateIdMapForNode(oldContent, idMap);\n populateIdMapForNode(newContent, idMap);\n return idMap;\n }\n\n //=============================================================================\n // This is what ends up becoming the Idiomorph global object\n //=============================================================================\n return {\n morph,\n defaults\n }\n })();\n\nfunction morphElements(currentElement, newElement, { callbacks, ...options } = {}) {\n Idiomorph.morph(currentElement, newElement, {\n ...options,\n callbacks: new DefaultIdiomorphCallbacks(callbacks)\n });\n}\n\nfunction morphChildren(currentElement, newElement) {\n morphElements(currentElement, newElement.children, {\n morphStyle: \"innerHTML\"\n });\n}\n\nclass DefaultIdiomorphCallbacks {\n #beforeNodeMorphed\n\n constructor({ beforeNodeMorphed } = {}) {\n this.#beforeNodeMorphed = beforeNodeMorphed || (() => true);\n }\n\n beforeNodeAdded = (node) => {\n return !(node.id && node.hasAttribute(\"data-turbo-permanent\") && document.getElementById(node.id))\n }\n\n beforeNodeMorphed = (currentElement, newElement) => {\n if (currentElement instanceof Element) {\n if (!currentElement.hasAttribute(\"data-turbo-permanent\") && this.#beforeNodeMorphed(currentElement, newElement)) {\n const event = dispatch(\"turbo:before-morph-element\", {\n cancelable: true,\n target: currentElement,\n detail: { currentElement, newElement }\n });\n\n return !event.defaultPrevented\n } else {\n return false\n }\n }\n }\n\n beforeAttributeUpdated = (attributeName, target, mutationType) => {\n const event = dispatch(\"turbo:before-morph-attribute\", {\n cancelable: true,\n target,\n detail: { attributeName, mutationType }\n });\n\n return !event.defaultPrevented\n }\n\n beforeNodeRemoved = (node) => {\n return this.beforeNodeMorphed(node)\n }\n\n afterNodeMorphed = (currentElement, newElement) => {\n if (currentElement instanceof Element) {\n dispatch(\"turbo:morph-element\", {\n target: currentElement,\n detail: { currentElement, newElement }\n });\n }\n }\n}\n\nclass MorphingFrameRenderer extends FrameRenderer {\n static renderElement(currentElement, newElement) {\n dispatch(\"turbo:before-frame-morph\", {\n target: currentElement,\n detail: { currentElement, newElement }\n });\n\n morphChildren(currentElement, newElement);\n }\n\n async preservingPermanentElements(callback) {\n return await callback()\n }\n}\n\nclass ProgressBar {\n static animationDuration = 300 /*ms*/\n\n static get defaultCSS() {\n return unindent`\n .turbo-progress-bar {\n position: fixed;\n display: block;\n top: 0;\n left: 0;\n height: 3px;\n background: #0076ff;\n z-index: 2147483647;\n transition:\n width ${ProgressBar.animationDuration}ms ease-out,\n opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n transform: translate3d(0, 0, 0);\n }\n `\n }\n\n hiding = false\n value = 0\n visible = false\n\n constructor() {\n this.stylesheetElement = this.createStylesheetElement();\n this.progressElement = this.createProgressElement();\n this.installStylesheetElement();\n this.setValue(0);\n }\n\n show() {\n if (!this.visible) {\n this.visible = true;\n this.installProgressElement();\n this.startTrickling();\n }\n }\n\n hide() {\n if (this.visible && !this.hiding) {\n this.hiding = true;\n this.fadeProgressElement(() => {\n this.uninstallProgressElement();\n this.stopTrickling();\n this.visible = false;\n this.hiding = false;\n });\n }\n }\n\n setValue(value) {\n this.value = value;\n this.refresh();\n }\n\n // Private\n\n installStylesheetElement() {\n document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n }\n\n installProgressElement() {\n this.progressElement.style.width = \"0\";\n this.progressElement.style.opacity = \"1\";\n document.documentElement.insertBefore(this.progressElement, document.body);\n this.refresh();\n }\n\n fadeProgressElement(callback) {\n this.progressElement.style.opacity = \"0\";\n setTimeout(callback, ProgressBar.animationDuration * 1.5);\n }\n\n uninstallProgressElement() {\n if (this.progressElement.parentNode) {\n document.documentElement.removeChild(this.progressElement);\n }\n }\n\n startTrickling() {\n if (!this.trickleInterval) {\n this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n }\n }\n\n stopTrickling() {\n window.clearInterval(this.trickleInterval);\n delete this.trickleInterval;\n }\n\n trickle = () => {\n this.setValue(this.value + Math.random() / 100);\n }\n\n refresh() {\n requestAnimationFrame(() => {\n this.progressElement.style.width = `${10 + this.value * 90}%`;\n });\n }\n\n createStylesheetElement() {\n const element = document.createElement(\"style\");\n element.type = \"text/css\";\n element.textContent = ProgressBar.defaultCSS;\n const cspNonce = getCspNonce();\n if (cspNonce) {\n element.nonce = cspNonce;\n }\n return element\n }\n\n createProgressElement() {\n const element = document.createElement(\"div\");\n element.className = \"turbo-progress-bar\";\n return element\n }\n}\n\nclass HeadSnapshot extends Snapshot {\n detailsByOuterHTML = this.children\n .filter((element) => !elementIsNoscript(element))\n .map((element) => elementWithoutNonce(element))\n .reduce((result, element) => {\n const { outerHTML } = element;\n const details =\n outerHTML in result\n ? result[outerHTML]\n : {\n type: elementType(element),\n tracked: elementIsTracked(element),\n elements: []\n };\n return {\n ...result,\n [outerHTML]: {\n ...details,\n elements: [...details.elements, element]\n }\n }\n }, {})\n\n get trackedElementSignature() {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n .join(\"\")\n }\n\n getScriptElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n }\n\n getStylesheetElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n }\n\n getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n .filter(({ type }) => type == matchedType)\n .map(({ elements: [element] }) => element)\n }\n\n get provisionalElements() {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n if (type == null && !tracked) {\n return [...result, ...elements]\n } else if (elements.length > 1) {\n return [...result, ...elements.slice(1)]\n } else {\n return result\n }\n }, [])\n }\n\n getMetaValue(name) {\n const element = this.findMetaElementByName(name);\n return element ? element.getAttribute(\"content\") : null\n }\n\n findMetaElementByName(name) {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const {\n elements: [element]\n } = this.detailsByOuterHTML[outerHTML];\n return elementIsMetaElementWithName(element, name) ? element : result\n }, undefined | undefined)\n }\n}\n\nfunction elementType(element) {\n if (elementIsScript(element)) {\n return \"script\"\n } else if (elementIsStylesheet(element)) {\n return \"stylesheet\"\n }\n}\n\nfunction elementIsTracked(element) {\n return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element) {\n const tagName = element.localName;\n return tagName == \"script\"\n}\n\nfunction elementIsNoscript(element) {\n const tagName = element.localName;\n return tagName == \"noscript\"\n}\n\nfunction elementIsStylesheet(element) {\n const tagName = element.localName;\n return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n const tagName = element.localName;\n return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n\nfunction elementWithoutNonce(element) {\n if (element.hasAttribute(\"nonce\")) {\n element.setAttribute(\"nonce\", \"\");\n }\n\n return element\n}\n\nclass PageSnapshot extends Snapshot {\n static fromHTMLString(html = \"\") {\n return this.fromDocument(parseHTMLDocument(html))\n }\n\n static fromElement(element) {\n return this.fromDocument(element.ownerDocument)\n }\n\n static fromDocument({ documentElement, body, head }) {\n return new this(documentElement, body, new HeadSnapshot(head))\n }\n\n constructor(documentElement, body, headSnapshot) {\n super(body);\n this.documentElement = documentElement;\n this.headSnapshot = headSnapshot;\n }\n\n clone() {\n const clonedElement = this.element.cloneNode(true);\n\n const selectElements = this.element.querySelectorAll(\"select\");\n const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n\n for (const [index, source] of selectElements.entries()) {\n const clone = clonedSelectElements[index];\n for (const option of clone.selectedOptions) option.selected = false;\n for (const option of source.selectedOptions) clone.options[option.index].selected = true;\n }\n\n for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n clonedPasswordInput.value = \"\";\n }\n\n return new PageSnapshot(this.documentElement, clonedElement, this.headSnapshot)\n }\n\n get lang() {\n return this.documentElement.getAttribute(\"lang\")\n }\n\n get headElement() {\n return this.headSnapshot.element\n }\n\n get rootLocation() {\n const root = this.getSetting(\"root\") ?? \"/\";\n return expandURL(root)\n }\n\n get cacheControlValue() {\n return this.getSetting(\"cache-control\")\n }\n\n get isPreviewable() {\n return this.cacheControlValue != \"no-preview\"\n }\n\n get isCacheable() {\n return this.cacheControlValue != \"no-cache\"\n }\n\n get isVisitable() {\n return this.getSetting(\"visit-control\") != \"reload\"\n }\n\n get prefersViewTransitions() {\n return this.headSnapshot.getMetaValue(\"view-transition\") === \"same-origin\"\n }\n\n get shouldMorphPage() {\n return this.getSetting(\"refresh-method\") === \"morph\"\n }\n\n get shouldPreserveScrollPosition() {\n return this.getSetting(\"refresh-scroll\") === \"preserve\"\n }\n\n // Private\n\n getSetting(name) {\n return this.headSnapshot.getMetaValue(`turbo-${name}`)\n }\n}\n\nclass ViewTransitioner {\n #viewTransitionStarted = false\n #lastOperation = Promise.resolve()\n\n renderChange(useViewTransition, render) {\n if (useViewTransition && this.viewTransitionsAvailable && !this.#viewTransitionStarted) {\n this.#viewTransitionStarted = true;\n this.#lastOperation = this.#lastOperation.then(async () => {\n await document.startViewTransition(render).finished;\n });\n } else {\n this.#lastOperation = this.#lastOperation.then(render);\n }\n\n return this.#lastOperation\n }\n\n get viewTransitionsAvailable() {\n return document.startViewTransition\n }\n}\n\nconst defaultOptions = {\n action: \"advance\",\n historyChanged: false,\n visitCachedSnapshot: () => {},\n willRender: true,\n updateHistory: true,\n shouldCacheSnapshot: true,\n acceptsStreamResponse: false\n};\n\nconst TimingMetric = {\n visitStart: \"visitStart\",\n requestStart: \"requestStart\",\n requestEnd: \"requestEnd\",\n visitEnd: \"visitEnd\"\n};\n\nconst VisitState = {\n initialized: \"initialized\",\n started: \"started\",\n canceled: \"canceled\",\n failed: \"failed\",\n completed: \"completed\"\n};\n\nconst SystemStatusCode = {\n networkFailure: 0,\n timeoutFailure: -1,\n contentTypeMismatch: -2\n};\n\nconst Direction = {\n advance: \"forward\",\n restore: \"back\",\n replace: \"none\"\n};\n\nclass Visit {\n identifier = uuid() // Required by turbo-ios\n timingMetrics = {}\n\n followedRedirect = false\n historyChanged = false\n scrolled = false\n shouldCacheSnapshot = true\n acceptsStreamResponse = false\n snapshotCached = false\n state = VisitState.initialized\n viewTransitioner = new ViewTransitioner()\n\n constructor(delegate, location, restorationIdentifier, options = {}) {\n this.delegate = delegate;\n this.location = location;\n this.restorationIdentifier = restorationIdentifier || uuid();\n\n const {\n action,\n historyChanged,\n referrer,\n snapshot,\n snapshotHTML,\n response,\n visitCachedSnapshot,\n willRender,\n updateHistory,\n shouldCacheSnapshot,\n acceptsStreamResponse,\n direction\n } = {\n ...defaultOptions,\n ...options\n };\n this.action = action;\n this.historyChanged = historyChanged;\n this.referrer = referrer;\n this.snapshot = snapshot;\n this.snapshotHTML = snapshotHTML;\n this.response = response;\n this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n this.isPageRefresh = this.view.isPageRefresh(this);\n this.visitCachedSnapshot = visitCachedSnapshot;\n this.willRender = willRender;\n this.updateHistory = updateHistory;\n this.scrolled = !willRender;\n this.shouldCacheSnapshot = shouldCacheSnapshot;\n this.acceptsStreamResponse = acceptsStreamResponse;\n this.direction = direction || Direction[action];\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get history() {\n return this.delegate.history\n }\n\n get restorationData() {\n return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n }\n\n get silent() {\n return this.isSamePage\n }\n\n start() {\n if (this.state == VisitState.initialized) {\n this.recordTimingMetric(TimingMetric.visitStart);\n this.state = VisitState.started;\n this.adapter.visitStarted(this);\n this.delegate.visitStarted(this);\n }\n }\n\n cancel() {\n if (this.state == VisitState.started) {\n if (this.request) {\n this.request.cancel();\n }\n this.cancelRender();\n this.state = VisitState.canceled;\n }\n }\n\n complete() {\n if (this.state == VisitState.started) {\n this.recordTimingMetric(TimingMetric.visitEnd);\n this.adapter.visitCompleted(this);\n this.state = VisitState.completed;\n this.followRedirect();\n\n if (!this.followedRedirect) {\n this.delegate.visitCompleted(this);\n }\n }\n }\n\n fail() {\n if (this.state == VisitState.started) {\n this.state = VisitState.failed;\n this.adapter.visitFailed(this);\n this.delegate.visitCompleted(this);\n }\n }\n\n changeHistory() {\n if (!this.historyChanged && this.updateHistory) {\n const actionForHistory = this.location.href === this.referrer?.href ? \"replace\" : this.action;\n const method = getHistoryMethodForAction(actionForHistory);\n this.history.update(method, this.location, this.restorationIdentifier);\n this.historyChanged = true;\n }\n }\n\n issueRequest() {\n if (this.hasPreloadedResponse()) {\n this.simulateRequest();\n } else if (this.shouldIssueRequest() && !this.request) {\n this.request = new FetchRequest(this, FetchMethod.get, this.location);\n this.request.perform();\n }\n }\n\n simulateRequest() {\n if (this.response) {\n this.startRequest();\n this.recordResponse();\n this.finishRequest();\n }\n }\n\n startRequest() {\n this.recordTimingMetric(TimingMetric.requestStart);\n this.adapter.visitRequestStarted(this);\n }\n\n recordResponse(response = this.response) {\n this.response = response;\n if (response) {\n const { statusCode } = response;\n if (isSuccessful(statusCode)) {\n this.adapter.visitRequestCompleted(this);\n } else {\n this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n }\n }\n }\n\n finishRequest() {\n this.recordTimingMetric(TimingMetric.requestEnd);\n this.adapter.visitRequestFinished(this);\n }\n\n loadResponse() {\n if (this.response) {\n const { statusCode, responseHTML } = this.response;\n this.render(async () => {\n if (this.shouldCacheSnapshot) this.cacheSnapshot();\n if (this.view.renderPromise) await this.view.renderPromise;\n\n if (isSuccessful(statusCode) && responseHTML != null) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n await this.renderPageSnapshot(snapshot, false);\n\n this.adapter.visitRendered(this);\n this.complete();\n } else {\n await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n this.adapter.visitRendered(this);\n this.fail();\n }\n });\n }\n }\n\n getCachedSnapshot() {\n const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\n if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n if (this.action == \"restore\" || snapshot.isPreviewable) {\n return snapshot\n }\n }\n }\n\n getPreloadedSnapshot() {\n if (this.snapshotHTML) {\n return PageSnapshot.fromHTMLString(this.snapshotHTML)\n }\n }\n\n hasCachedSnapshot() {\n return this.getCachedSnapshot() != null\n }\n\n loadCachedSnapshot() {\n const snapshot = this.getCachedSnapshot();\n if (snapshot) {\n const isPreview = this.shouldIssueRequest();\n this.render(async () => {\n this.cacheSnapshot();\n if (this.isSamePage || this.isPageRefresh) {\n this.adapter.visitRendered(this);\n } else {\n if (this.view.renderPromise) await this.view.renderPromise;\n\n await this.renderPageSnapshot(snapshot, isPreview);\n\n this.adapter.visitRendered(this);\n if (!isPreview) {\n this.complete();\n }\n }\n });\n }\n }\n\n followRedirect() {\n if (this.redirectedToLocation && !this.followedRedirect && this.response?.redirected) {\n this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n action: \"replace\",\n response: this.response,\n shouldCacheSnapshot: false,\n willRender: false\n });\n this.followedRedirect = true;\n }\n }\n\n goToSamePageAnchor() {\n if (this.isSamePage) {\n this.render(async () => {\n this.cacheSnapshot();\n this.performScroll();\n this.changeHistory();\n this.adapter.visitRendered(this);\n });\n }\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n if (this.acceptsStreamResponse) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted() {\n this.startRequest();\n }\n\n requestPreventedHandlingResponse(_request, _response) {}\n\n async requestSucceededWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected\n });\n } else {\n this.redirectedToLocation = response.redirected ? response.location : undefined;\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n\n async requestFailedWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected\n });\n } else {\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n\n requestErrored(_request, _error) {\n this.recordResponse({\n statusCode: SystemStatusCode.networkFailure,\n redirected: false\n });\n }\n\n requestFinished() {\n this.finishRequest();\n }\n\n // Scrolling\n\n performScroll() {\n if (!this.scrolled && !this.view.forceReloaded && !this.view.shouldPreserveScrollPosition(this)) {\n if (this.action == \"restore\") {\n this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n } else {\n this.scrollToAnchor() || this.view.scrollToTop();\n }\n if (this.isSamePage) {\n this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n }\n\n this.scrolled = true;\n }\n }\n\n scrollToRestoredPosition() {\n const { scrollPosition } = this.restorationData;\n if (scrollPosition) {\n this.view.scrollToPosition(scrollPosition);\n return true\n }\n }\n\n scrollToAnchor() {\n const anchor = getAnchor(this.location);\n if (anchor != null) {\n this.view.scrollToAnchor(anchor);\n return true\n }\n }\n\n // Instrumentation\n\n recordTimingMetric(metric) {\n this.timingMetrics[metric] = new Date().getTime();\n }\n\n getTimingMetrics() {\n return { ...this.timingMetrics }\n }\n\n // Private\n\n getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState\n case \"advance\":\n case \"restore\":\n return history.pushState\n }\n }\n\n hasPreloadedResponse() {\n return typeof this.response == \"object\"\n }\n\n shouldIssueRequest() {\n if (this.isSamePage) {\n return false\n } else if (this.action == \"restore\") {\n return !this.hasCachedSnapshot()\n } else {\n return this.willRender\n }\n }\n\n cacheSnapshot() {\n if (!this.snapshotCached) {\n this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n this.snapshotCached = true;\n }\n }\n\n async render(callback) {\n this.cancelRender();\n await new Promise((resolve) => {\n this.frame =\n document.visibilityState === \"hidden\" ? setTimeout(() => resolve(), 0) : requestAnimationFrame(() => resolve());\n });\n await callback();\n delete this.frame;\n }\n\n async renderPageSnapshot(snapshot, isPreview) {\n await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(snapshot), async () => {\n await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n this.performScroll();\n });\n }\n\n cancelRender() {\n if (this.frame) {\n cancelAnimationFrame(this.frame);\n delete this.frame;\n }\n }\n}\n\nfunction isSuccessful(statusCode) {\n return statusCode >= 200 && statusCode < 300\n}\n\nclass BrowserAdapter {\n progressBar = new ProgressBar()\n\n constructor(session) {\n this.session = session;\n }\n\n visitProposedToLocation(location, options) {\n if (locationIsVisitable(location, this.navigator.rootLocation)) {\n this.navigator.startVisit(location, options?.restorationIdentifier || uuid(), options);\n } else {\n window.location.href = location.toString();\n }\n }\n\n visitStarted(visit) {\n this.location = visit.location;\n visit.loadCachedSnapshot();\n visit.issueRequest();\n visit.goToSamePageAnchor();\n }\n\n visitRequestStarted(visit) {\n this.progressBar.setValue(0);\n if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n this.showVisitProgressBarAfterDelay();\n } else {\n this.showProgressBar();\n }\n }\n\n visitRequestCompleted(visit) {\n visit.loadResponse();\n }\n\n visitRequestFailedWithStatusCode(visit, statusCode) {\n switch (statusCode) {\n case SystemStatusCode.networkFailure:\n case SystemStatusCode.timeoutFailure:\n case SystemStatusCode.contentTypeMismatch:\n return this.reload({\n reason: \"request_failed\",\n context: {\n statusCode\n }\n })\n default:\n return visit.loadResponse()\n }\n }\n\n visitRequestFinished(_visit) {}\n\n visitCompleted(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n\n pageInvalidated(reason) {\n this.reload(reason);\n }\n\n visitFailed(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n\n visitRendered(_visit) {}\n\n // Form Submission Delegate\n\n formSubmissionStarted(_formSubmission) {\n this.progressBar.setValue(0);\n this.showFormProgressBarAfterDelay();\n }\n\n formSubmissionFinished(_formSubmission) {\n this.progressBar.setValue(1);\n this.hideFormProgressBar();\n }\n\n // Private\n\n showVisitProgressBarAfterDelay() {\n this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n\n hideVisitProgressBar() {\n this.progressBar.hide();\n if (this.visitProgressBarTimeout != null) {\n window.clearTimeout(this.visitProgressBarTimeout);\n delete this.visitProgressBarTimeout;\n }\n }\n\n showFormProgressBarAfterDelay() {\n if (this.formProgressBarTimeout == null) {\n this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n }\n\n hideFormProgressBar() {\n this.progressBar.hide();\n if (this.formProgressBarTimeout != null) {\n window.clearTimeout(this.formProgressBarTimeout);\n delete this.formProgressBarTimeout;\n }\n }\n\n showProgressBar = () => {\n this.progressBar.show();\n }\n\n reload(reason) {\n dispatch(\"turbo:reload\", { detail: reason });\n\n window.location.href = this.location?.toString() || window.location.href;\n }\n\n get navigator() {\n return this.session.navigator\n }\n}\n\nclass CacheObserver {\n selector = \"[data-turbo-temporary]\"\n deprecatedSelector = \"[data-turbo-cache=false]\"\n\n started = false\n\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n\n removeTemporaryElements = (_event) => {\n for (const element of this.temporaryElements) {\n element.remove();\n }\n }\n\n get temporaryElements() {\n return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation]\n }\n\n get temporaryElementsWithDeprecation() {\n const elements = document.querySelectorAll(this.deprecatedSelector);\n\n if (elements.length) {\n console.warn(\n `The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`\n );\n }\n\n return [...elements]\n }\n}\n\nclass FrameRedirector {\n constructor(session, element) {\n this.session = session;\n this.element = element;\n this.linkInterceptor = new LinkInterceptor(this, element);\n this.formSubmitObserver = new FormSubmitObserver(this, element);\n }\n\n start() {\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n\n stop() {\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n\n // Link interceptor delegate\n\n shouldInterceptLinkClick(element, _location, _event) {\n return this.#shouldRedirect(element)\n }\n\n linkClickIntercepted(element, url, event) {\n const frame = this.#findFrameElement(element);\n if (frame) {\n frame.delegate.linkClickIntercepted(element, url, event);\n }\n }\n\n // Form submit observer delegate\n\n willSubmitForm(element, submitter) {\n return (\n element.closest(\"turbo-frame\") == null &&\n this.#shouldSubmit(element, submitter) &&\n this.#shouldRedirect(element, submitter)\n )\n }\n\n formSubmitted(element, submitter) {\n const frame = this.#findFrameElement(element, submitter);\n if (frame) {\n frame.delegate.formSubmitted(element, submitter);\n }\n }\n\n #shouldSubmit(form, submitter) {\n const action = getAction$1(form, submitter);\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const rootLocation = expandURL(meta?.content ?? \"/\");\n\n return this.#shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation)\n }\n\n #shouldRedirect(element, submitter) {\n const isNavigatable =\n element instanceof HTMLFormElement\n ? this.session.submissionIsNavigatable(element, submitter)\n : this.session.elementIsNavigatable(element);\n\n if (isNavigatable) {\n const frame = this.#findFrameElement(element, submitter);\n return frame ? frame != element.closest(\"turbo-frame\") : false\n } else {\n return false\n }\n }\n\n #findFrameElement(element, submitter) {\n const id = submitter?.getAttribute(\"data-turbo-frame\") || element.getAttribute(\"data-turbo-frame\");\n if (id && id != \"_top\") {\n const frame = this.element.querySelector(`#${id}:not([disabled])`);\n if (frame instanceof FrameElement) {\n return frame\n }\n }\n }\n}\n\nclass History {\n location\n restorationIdentifier = uuid()\n restorationData = {}\n started = false\n pageLoaded = false\n currentIndex = 0\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"popstate\", this.onPopState, false);\n addEventListener(\"load\", this.onPageLoad, false);\n this.currentIndex = history.state?.turbo?.restorationIndex || 0;\n this.started = true;\n this.replace(new URL(window.location.href));\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"popstate\", this.onPopState, false);\n removeEventListener(\"load\", this.onPageLoad, false);\n this.started = false;\n }\n }\n\n push(location, restorationIdentifier) {\n this.update(history.pushState, location, restorationIdentifier);\n }\n\n replace(location, restorationIdentifier) {\n this.update(history.replaceState, location, restorationIdentifier);\n }\n\n update(method, location, restorationIdentifier = uuid()) {\n if (method === history.pushState) ++this.currentIndex;\n\n const state = { turbo: { restorationIdentifier, restorationIndex: this.currentIndex } };\n method.call(history, state, \"\", location.href);\n this.location = location;\n this.restorationIdentifier = restorationIdentifier;\n }\n\n // Restoration data\n\n getRestorationDataForIdentifier(restorationIdentifier) {\n return this.restorationData[restorationIdentifier] || {}\n }\n\n updateRestorationData(additionalData) {\n const { restorationIdentifier } = this;\n const restorationData = this.restorationData[restorationIdentifier];\n this.restorationData[restorationIdentifier] = {\n ...restorationData,\n ...additionalData\n };\n }\n\n // Scroll restoration\n\n assumeControlOfScrollRestoration() {\n if (!this.previousScrollRestoration) {\n this.previousScrollRestoration = history.scrollRestoration ?? \"auto\";\n history.scrollRestoration = \"manual\";\n }\n }\n\n relinquishControlOfScrollRestoration() {\n if (this.previousScrollRestoration) {\n history.scrollRestoration = this.previousScrollRestoration;\n delete this.previousScrollRestoration;\n }\n }\n\n // Event handlers\n\n onPopState = (event) => {\n if (this.shouldHandlePopState()) {\n const { turbo } = event.state || {};\n if (turbo) {\n this.location = new URL(window.location.href);\n const { restorationIdentifier, restorationIndex } = turbo;\n this.restorationIdentifier = restorationIdentifier;\n const direction = restorationIndex > this.currentIndex ? \"forward\" : \"back\";\n this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location, restorationIdentifier, direction);\n this.currentIndex = restorationIndex;\n }\n }\n }\n\n onPageLoad = async (_event) => {\n await nextMicrotask();\n this.pageLoaded = true;\n }\n\n // Private\n\n shouldHandlePopState() {\n // Safari dispatches a popstate event after window's load event, ignore it\n return this.pageIsLoaded()\n }\n\n pageIsLoaded() {\n return this.pageLoaded || document.readyState == \"complete\"\n }\n}\n\nclass LinkPrefetchObserver {\n started = false\n #prefetchedLink = null\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (this.started) return\n\n if (this.eventTarget.readyState === \"loading\") {\n this.eventTarget.addEventListener(\"DOMContentLoaded\", this.#enable, { once: true });\n } else {\n this.#enable();\n }\n }\n\n stop() {\n if (!this.started) return\n\n this.eventTarget.removeEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n capture: true,\n passive: true\n });\n this.eventTarget.removeEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n capture: true,\n passive: true\n });\n\n this.eventTarget.removeEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n this.started = false;\n }\n\n #enable = () => {\n this.eventTarget.addEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n capture: true,\n passive: true\n });\n this.eventTarget.addEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n capture: true,\n passive: true\n });\n\n this.eventTarget.addEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n this.started = true;\n }\n\n #tryToPrefetchRequest = (event) => {\n if (getMetaContent(\"turbo-prefetch\") === \"false\") return\n\n const target = event.target;\n const isLink = target.matches && target.matches(\"a[href]:not([target^=_]):not([download])\");\n\n if (isLink && this.#isPrefetchable(target)) {\n const link = target;\n const location = getLocationForLink(link);\n\n if (this.delegate.canPrefetchRequestToLocation(link, location)) {\n this.#prefetchedLink = link;\n\n const fetchRequest = new FetchRequest(\n this,\n FetchMethod.get,\n location,\n new URLSearchParams(),\n target\n );\n\n prefetchCache.setLater(location.toString(), fetchRequest, this.#cacheTtl);\n }\n }\n }\n\n #cancelRequestIfObsolete = (event) => {\n if (event.target === this.#prefetchedLink) this.#cancelPrefetchRequest();\n }\n\n #cancelPrefetchRequest = () => {\n prefetchCache.clear();\n this.#prefetchedLink = null;\n }\n\n #tryToUsePrefetchedRequest = (event) => {\n if (event.target.tagName !== \"FORM\" && event.detail.fetchOptions.method === \"GET\") {\n const cached = prefetchCache.get(event.detail.url.toString());\n\n if (cached) {\n // User clicked link, use cache response\n event.detail.fetchRequest = cached;\n }\n\n prefetchCache.clear();\n }\n }\n\n prepareRequest(request) {\n const link = request.target;\n\n request.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n\n const turboFrame = link.closest(\"turbo-frame\");\n const turboFrameTarget = link.getAttribute(\"data-turbo-frame\") || turboFrame?.getAttribute(\"target\") || turboFrame?.id;\n\n if (turboFrameTarget && turboFrameTarget !== \"_top\") {\n request.headers[\"Turbo-Frame\"] = turboFrameTarget;\n }\n }\n\n // Fetch request interface\n\n requestSucceededWithResponse() {}\n\n requestStarted(fetchRequest) {}\n\n requestErrored(fetchRequest) {}\n\n requestFinished(fetchRequest) {}\n\n requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n get #cacheTtl() {\n return Number(getMetaContent(\"turbo-prefetch-cache-time\")) || cacheTtl\n }\n\n #isPrefetchable(link) {\n const href = link.getAttribute(\"href\");\n\n if (!href) return false\n\n if (unfetchableLink(link)) return false\n if (linkToTheSamePage(link)) return false\n if (linkOptsOut(link)) return false\n if (nonSafeLink(link)) return false\n if (eventPrevented(link)) return false\n\n return true\n }\n}\n\nconst unfetchableLink = (link) => {\n return link.origin !== document.location.origin || ![\"http:\", \"https:\"].includes(link.protocol) || link.hasAttribute(\"target\")\n};\n\nconst linkToTheSamePage = (link) => {\n return (link.pathname + link.search === document.location.pathname + document.location.search) || link.href.startsWith(\"#\")\n};\n\nconst linkOptsOut = (link) => {\n if (link.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n if (link.getAttribute(\"data-turbo\") === \"false\") return true\n\n const turboPrefetchParent = findClosestRecursively(link, \"[data-turbo-prefetch]\");\n if (turboPrefetchParent && turboPrefetchParent.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n\n return false\n};\n\nconst nonSafeLink = (link) => {\n const turboMethod = link.getAttribute(\"data-turbo-method\");\n if (turboMethod && turboMethod.toLowerCase() !== \"get\") return true\n\n if (isUJS(link)) return true\n if (link.hasAttribute(\"data-turbo-confirm\")) return true\n if (link.hasAttribute(\"data-turbo-stream\")) return true\n\n return false\n};\n\nconst isUJS = (link) => {\n return link.hasAttribute(\"data-remote\") || link.hasAttribute(\"data-behavior\") || link.hasAttribute(\"data-confirm\") || link.hasAttribute(\"data-method\")\n};\n\nconst eventPrevented = (link) => {\n const event = dispatch(\"turbo:before-prefetch\", { target: link, cancelable: true });\n return event.defaultPrevented\n};\n\nclass Navigator {\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n proposeVisit(location, options = {}) {\n if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n this.delegate.visitProposedToLocation(location, options);\n }\n }\n\n startVisit(locatable, restorationIdentifier, options = {}) {\n this.stop();\n this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n referrer: this.location,\n ...options\n });\n this.currentVisit.start();\n }\n\n submitForm(form, submitter) {\n this.stop();\n this.formSubmission = new FormSubmission(this, form, submitter, true);\n\n this.formSubmission.start();\n }\n\n stop() {\n if (this.formSubmission) {\n this.formSubmission.stop();\n delete this.formSubmission;\n }\n\n if (this.currentVisit) {\n this.currentVisit.cancel();\n delete this.currentVisit;\n }\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get rootLocation() {\n return this.view.snapshot.rootLocation\n }\n\n get history() {\n return this.delegate.history\n }\n\n // Form submission delegate\n\n formSubmissionStarted(formSubmission) {\n // Not all adapters implement formSubmissionStarted\n if (typeof this.adapter.formSubmissionStarted === \"function\") {\n this.adapter.formSubmissionStarted(formSubmission);\n }\n }\n\n async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n if (formSubmission == this.formSubmission) {\n const responseHTML = await fetchResponse.responseHTML;\n if (responseHTML) {\n const shouldCacheSnapshot = formSubmission.isSafe;\n if (!shouldCacheSnapshot) {\n this.view.clearSnapshotCache();\n }\n\n const { statusCode, redirected } = fetchResponse;\n const action = this.#getActionForFormSubmission(formSubmission, fetchResponse);\n const visitOptions = {\n action,\n shouldCacheSnapshot,\n response: { statusCode, responseHTML, redirected }\n };\n this.proposeVisit(fetchResponse.location, visitOptions);\n }\n }\n }\n\n async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n const responseHTML = await fetchResponse.responseHTML;\n\n if (responseHTML) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n if (fetchResponse.serverError) {\n await this.view.renderError(snapshot, this.currentVisit);\n } else {\n await this.view.renderPage(snapshot, false, true, this.currentVisit);\n }\n if(!snapshot.shouldPreserveScrollPosition) {\n this.view.scrollToTop();\n }\n this.view.clearSnapshotCache();\n }\n }\n\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n\n formSubmissionFinished(formSubmission) {\n // Not all adapters implement formSubmissionFinished\n if (typeof this.adapter.formSubmissionFinished === \"function\") {\n this.adapter.formSubmissionFinished(formSubmission);\n }\n }\n\n // Visit delegate\n\n visitStarted(visit) {\n this.delegate.visitStarted(visit);\n }\n\n visitCompleted(visit) {\n this.delegate.visitCompleted(visit);\n delete this.currentVisit;\n }\n\n locationWithActionIsSamePage(location, action) {\n const anchor = getAnchor(location);\n const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n\n return (\n action !== \"replace\" &&\n getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n (isRestorationToTop || (anchor != null && anchor !== currentAnchor))\n )\n }\n\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n }\n\n // Visits\n\n get location() {\n return this.history.location\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier\n }\n\n #getActionForFormSubmission(formSubmission, fetchResponse) {\n const { submitter, formElement } = formSubmission;\n return getVisitAction(submitter, formElement) || this.#getDefaultAction(fetchResponse)\n }\n\n #getDefaultAction(fetchResponse) {\n const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href;\n return sameLocationRedirect ? \"replace\" : \"advance\"\n }\n}\n\nconst PageStage = {\n initial: 0,\n loading: 1,\n interactive: 2,\n complete: 3\n};\n\nclass PageObserver {\n stage = PageStage.initial\n started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n if (this.stage == PageStage.initial) {\n this.stage = PageStage.loading;\n }\n document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n addEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n removeEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = false;\n }\n }\n\n interpretReadyState = () => {\n const { readyState } = this;\n if (readyState == \"interactive\") {\n this.pageIsInteractive();\n } else if (readyState == \"complete\") {\n this.pageIsComplete();\n }\n }\n\n pageIsInteractive() {\n if (this.stage == PageStage.loading) {\n this.stage = PageStage.interactive;\n this.delegate.pageBecameInteractive();\n }\n }\n\n pageIsComplete() {\n this.pageIsInteractive();\n if (this.stage == PageStage.interactive) {\n this.stage = PageStage.complete;\n this.delegate.pageLoaded();\n }\n }\n\n pageWillUnload = () => {\n this.delegate.pageWillUnload();\n }\n\n get readyState() {\n return document.readyState\n }\n}\n\nclass ScrollObserver {\n started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"scroll\", this.onScroll, false);\n this.onScroll();\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"scroll\", this.onScroll, false);\n this.started = false;\n }\n }\n\n onScroll = () => {\n this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n }\n\n // Private\n\n updatePosition(position) {\n this.delegate.scrollPositionChanged(position);\n }\n}\n\nclass StreamMessageRenderer {\n render({ fragment }) {\n Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => {\n withAutofocusFromFragment(fragment, () => {\n withPreservedFocus(() => {\n document.documentElement.appendChild(fragment);\n });\n });\n });\n }\n\n // Bardo delegate\n\n enteringBardo(currentPermanentElement, newPermanentElement) {\n newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n }\n\n leavingBardo() {}\n}\n\nfunction getPermanentElementMapForFragment(fragment) {\n const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n const permanentElementMap = {};\n for (const permanentElementInDocument of permanentElementsInDocument) {\n const { id } = permanentElementInDocument;\n\n for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n\n if (elementInStream) {\n permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n }\n }\n }\n\n return permanentElementMap\n}\n\nasync function withAutofocusFromFragment(fragment, callback) {\n const generatedID = `turbo-stream-autofocus-${uuid()}`;\n const turboStreams = fragment.querySelectorAll(\"turbo-stream\");\n const elementWithAutofocus = firstAutofocusableElementInStreams(turboStreams);\n let willAutofocusId = null;\n\n if (elementWithAutofocus) {\n if (elementWithAutofocus.id) {\n willAutofocusId = elementWithAutofocus.id;\n } else {\n willAutofocusId = generatedID;\n }\n\n elementWithAutofocus.id = willAutofocusId;\n }\n\n callback();\n await nextRepaint();\n\n const hasNoActiveElement = document.activeElement == null || document.activeElement == document.body;\n\n if (hasNoActiveElement && willAutofocusId) {\n const elementToAutofocus = document.getElementById(willAutofocusId);\n\n if (elementIsFocusable(elementToAutofocus)) {\n elementToAutofocus.focus();\n }\n if (elementToAutofocus && elementToAutofocus.id == generatedID) {\n elementToAutofocus.removeAttribute(\"id\");\n }\n }\n}\n\nasync function withPreservedFocus(callback) {\n const [activeElementBeforeRender, activeElementAfterRender] = await around(callback, () => document.activeElement);\n\n const restoreFocusTo = activeElementBeforeRender && activeElementBeforeRender.id;\n\n if (restoreFocusTo) {\n const elementToFocus = document.getElementById(restoreFocusTo);\n\n if (elementIsFocusable(elementToFocus) && elementToFocus != activeElementAfterRender) {\n elementToFocus.focus();\n }\n }\n}\n\nfunction firstAutofocusableElementInStreams(nodeListOfStreamElements) {\n for (const streamElement of nodeListOfStreamElements) {\n const elementWithAutofocus = queryAutofocusableElement(streamElement.templateElement.content);\n\n if (elementWithAutofocus) return elementWithAutofocus\n }\n\n return null\n}\n\nclass StreamObserver {\n sources = new Set()\n #started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.#started) {\n this.#started = true;\n addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n\n stop() {\n if (this.#started) {\n this.#started = false;\n removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n\n connectStreamSource(source) {\n if (!this.streamSourceIsConnected(source)) {\n this.sources.add(source);\n source.addEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n\n disconnectStreamSource(source) {\n if (this.streamSourceIsConnected(source)) {\n this.sources.delete(source);\n source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n\n streamSourceIsConnected(source) {\n return this.sources.has(source)\n }\n\n inspectFetchResponse = (event) => {\n const response = fetchResponseFromEvent(event);\n if (response && fetchResponseIsStream(response)) {\n event.preventDefault();\n this.receiveMessageResponse(response);\n }\n }\n\n receiveMessageEvent = (event) => {\n if (this.#started && typeof event.data == \"string\") {\n this.receiveMessageHTML(event.data);\n }\n }\n\n async receiveMessageResponse(response) {\n const html = await response.responseHTML;\n if (html) {\n this.receiveMessageHTML(html);\n }\n }\n\n receiveMessageHTML(html) {\n this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n }\n}\n\nfunction fetchResponseFromEvent(event) {\n const fetchResponse = event.detail?.fetchResponse;\n if (fetchResponse instanceof FetchResponse) {\n return fetchResponse\n }\n}\n\nfunction fetchResponseIsStream(response) {\n const contentType = response.contentType ?? \"\";\n return contentType.startsWith(StreamMessage.contentType)\n}\n\nclass ErrorRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const { documentElement, body } = document;\n\n documentElement.replaceChild(newElement, body);\n }\n\n async render() {\n this.replaceHeadAndBody();\n this.activateScriptElements();\n }\n\n replaceHeadAndBody() {\n const { documentElement, head } = document;\n documentElement.replaceChild(this.newHead, head);\n this.renderElement(this.currentElement, this.newElement);\n }\n\n activateScriptElements() {\n for (const replaceableElement of this.scriptElements) {\n const parentNode = replaceableElement.parentNode;\n if (parentNode) {\n const element = activateScriptElement(replaceableElement);\n parentNode.replaceChild(element, replaceableElement);\n }\n }\n }\n\n get newHead() {\n return this.newSnapshot.headSnapshot.element\n }\n\n get scriptElements() {\n return document.documentElement.querySelectorAll(\"script\")\n }\n}\n\nclass PageRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n if (document.body && newElement instanceof HTMLBodyElement) {\n document.body.replaceWith(newElement);\n } else {\n document.documentElement.appendChild(newElement);\n }\n }\n\n get shouldRender() {\n return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical\n }\n\n get reloadReason() {\n if (!this.newSnapshot.isVisitable) {\n return {\n reason: \"turbo_visit_control_is_reload\"\n }\n }\n\n if (!this.trackedElementsAreIdentical) {\n return {\n reason: \"tracked_element_mismatch\"\n }\n }\n }\n\n async prepareToRender() {\n this.#setLanguage();\n await this.mergeHead();\n }\n\n async render() {\n if (this.willRender) {\n await this.replaceBody();\n }\n }\n\n finishRendering() {\n super.finishRendering();\n if (!this.isPreview) {\n this.focusFirstAutofocusableElement();\n }\n }\n\n get currentHeadSnapshot() {\n return this.currentSnapshot.headSnapshot\n }\n\n get newHeadSnapshot() {\n return this.newSnapshot.headSnapshot\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n\n #setLanguage() {\n const { documentElement } = this.currentSnapshot;\n const { lang } = this.newSnapshot;\n\n if (lang) {\n documentElement.setAttribute(\"lang\", lang);\n } else {\n documentElement.removeAttribute(\"lang\");\n }\n }\n\n async mergeHead() {\n const mergedHeadElements = this.mergeProvisionalElements();\n const newStylesheetElements = this.copyNewHeadStylesheetElements();\n this.copyNewHeadScriptElements();\n\n await mergedHeadElements;\n await newStylesheetElements;\n\n if (this.willRender) {\n this.removeUnusedDynamicStylesheetElements();\n }\n }\n\n async replaceBody() {\n await this.preservingPermanentElements(async () => {\n this.activateNewBody();\n await this.assignNewBody();\n });\n }\n\n get trackedElementsAreIdentical() {\n return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature\n }\n\n async copyNewHeadStylesheetElements() {\n const loadingElements = [];\n\n for (const element of this.newHeadStylesheetElements) {\n loadingElements.push(waitForLoad(element));\n\n document.head.appendChild(element);\n }\n\n await Promise.all(loadingElements);\n }\n\n copyNewHeadScriptElements() {\n for (const element of this.newHeadScriptElements) {\n document.head.appendChild(activateScriptElement(element));\n }\n }\n\n removeUnusedDynamicStylesheetElements() {\n for (const element of this.unusedDynamicStylesheetElements) {\n document.head.removeChild(element);\n }\n }\n\n async mergeProvisionalElements() {\n const newHeadElements = [...this.newHeadProvisionalElements];\n\n for (const element of this.currentHeadProvisionalElements) {\n if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n document.head.removeChild(element);\n }\n }\n\n for (const element of newHeadElements) {\n document.head.appendChild(element);\n }\n }\n\n isCurrentElementInElementList(element, elementList) {\n for (const [index, newElement] of elementList.entries()) {\n // if title element...\n if (element.tagName == \"TITLE\") {\n if (newElement.tagName != \"TITLE\") {\n continue\n }\n if (element.innerHTML == newElement.innerHTML) {\n elementList.splice(index, 1);\n return true\n }\n }\n\n // if any other element...\n if (newElement.isEqualNode(element)) {\n elementList.splice(index, 1);\n return true\n }\n }\n\n return false\n }\n\n removeCurrentHeadProvisionalElements() {\n for (const element of this.currentHeadProvisionalElements) {\n document.head.removeChild(element);\n }\n }\n\n copyNewHeadProvisionalElements() {\n for (const element of this.newHeadProvisionalElements) {\n document.head.appendChild(element);\n }\n }\n\n activateNewBody() {\n document.adoptNode(this.newElement);\n this.activateNewBodyScriptElements();\n }\n\n activateNewBodyScriptElements() {\n for (const inertScriptElement of this.newBodyScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n\n async assignNewBody() {\n await this.renderElement(this.currentElement, this.newElement);\n }\n\n get unusedDynamicStylesheetElements() {\n return this.oldHeadStylesheetElements.filter((element) => {\n return element.getAttribute(\"data-turbo-track\") === \"dynamic\"\n })\n }\n\n get oldHeadStylesheetElements() {\n return this.currentHeadSnapshot.getStylesheetElementsNotInSnapshot(this.newHeadSnapshot)\n }\n\n get newHeadStylesheetElements() {\n return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)\n }\n\n get newHeadScriptElements() {\n return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)\n }\n\n get currentHeadProvisionalElements() {\n return this.currentHeadSnapshot.provisionalElements\n }\n\n get newHeadProvisionalElements() {\n return this.newHeadSnapshot.provisionalElements\n }\n\n get newBodyScriptElements() {\n return this.newElement.querySelectorAll(\"script\")\n }\n}\n\nclass MorphingPageRenderer extends PageRenderer {\n static renderElement(currentElement, newElement) {\n morphElements(currentElement, newElement, {\n callbacks: {\n beforeNodeMorphed: element => !canRefreshFrame(element)\n }\n });\n\n for (const frame of currentElement.querySelectorAll(\"turbo-frame\")) {\n if (canRefreshFrame(frame)) frame.reload();\n }\n\n dispatch(\"turbo:morph\", { detail: { currentElement, newElement } });\n }\n\n async preservingPermanentElements(callback) {\n return await callback()\n }\n\n get renderMethod() {\n return \"morph\"\n }\n\n get shouldAutofocus() {\n return false\n }\n}\n\nfunction canRefreshFrame(frame) {\n return frame instanceof FrameElement &&\n frame.src &&\n frame.refresh === \"morph\" &&\n !frame.closest(\"[data-turbo-permanent]\")\n}\n\nclass SnapshotCache {\n keys = []\n snapshots = {}\n\n constructor(size) {\n this.size = size;\n }\n\n has(location) {\n return toCacheKey(location) in this.snapshots\n }\n\n get(location) {\n if (this.has(location)) {\n const snapshot = this.read(location);\n this.touch(location);\n return snapshot\n }\n }\n\n put(location, snapshot) {\n this.write(location, snapshot);\n this.touch(location);\n return snapshot\n }\n\n clear() {\n this.snapshots = {};\n }\n\n // Private\n\n read(location) {\n return this.snapshots[toCacheKey(location)]\n }\n\n write(location, snapshot) {\n this.snapshots[toCacheKey(location)] = snapshot;\n }\n\n touch(location) {\n const key = toCacheKey(location);\n const index = this.keys.indexOf(key);\n if (index > -1) this.keys.splice(index, 1);\n this.keys.unshift(key);\n this.trim();\n }\n\n trim() {\n for (const key of this.keys.splice(this.size)) {\n delete this.snapshots[key];\n }\n }\n}\n\nclass PageView extends View {\n snapshotCache = new SnapshotCache(10)\n lastRenderedLocation = new URL(location.href)\n forceReloaded = false\n\n shouldTransitionTo(newSnapshot) {\n return this.snapshot.prefersViewTransitions && newSnapshot.prefersViewTransitions\n }\n\n renderPage(snapshot, isPreview = false, willRender = true, visit) {\n const shouldMorphPage = this.isPageRefresh(visit) && this.snapshot.shouldMorphPage;\n const rendererClass = shouldMorphPage ? MorphingPageRenderer : PageRenderer;\n\n const renderer = new rendererClass(this.snapshot, snapshot, isPreview, willRender);\n\n if (!renderer.shouldRender) {\n this.forceReloaded = true;\n } else {\n visit?.changeHistory();\n }\n\n return this.render(renderer)\n }\n\n renderError(snapshot, visit) {\n visit?.changeHistory();\n const renderer = new ErrorRenderer(this.snapshot, snapshot, false);\n return this.render(renderer)\n }\n\n clearSnapshotCache() {\n this.snapshotCache.clear();\n }\n\n async cacheSnapshot(snapshot = this.snapshot) {\n if (snapshot.isCacheable) {\n this.delegate.viewWillCacheSnapshot();\n const { lastRenderedLocation: location } = this;\n await nextEventLoopTick();\n const cachedSnapshot = snapshot.clone();\n this.snapshotCache.put(location, cachedSnapshot);\n return cachedSnapshot\n }\n }\n\n getCachedSnapshotForLocation(location) {\n return this.snapshotCache.get(location)\n }\n\n isPageRefresh(visit) {\n return !visit || (this.lastRenderedLocation.pathname === visit.location.pathname && visit.action === \"replace\")\n }\n\n shouldPreserveScrollPosition(visit) {\n return this.isPageRefresh(visit) && this.snapshot.shouldPreserveScrollPosition\n }\n\n get snapshot() {\n return PageSnapshot.fromElement(this.element)\n }\n}\n\nclass Preloader {\n selector = \"a[data-turbo-preload]\"\n\n constructor(delegate, snapshotCache) {\n this.delegate = delegate;\n this.snapshotCache = snapshotCache;\n }\n\n start() {\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", this.#preloadAll);\n } else {\n this.preloadOnLoadLinksForView(document.body);\n }\n }\n\n stop() {\n document.removeEventListener(\"DOMContentLoaded\", this.#preloadAll);\n }\n\n preloadOnLoadLinksForView(element) {\n for (const link of element.querySelectorAll(this.selector)) {\n if (this.delegate.shouldPreloadLink(link)) {\n this.preloadURL(link);\n }\n }\n }\n\n async preloadURL(link) {\n const location = new URL(link.href);\n\n if (this.snapshotCache.has(location)) {\n return\n }\n\n const fetchRequest = new FetchRequest(this, FetchMethod.get, location, new URLSearchParams(), link);\n await fetchRequest.perform();\n }\n\n // Fetch request delegate\n\n prepareRequest(fetchRequest) {\n fetchRequest.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n }\n\n async requestSucceededWithResponse(fetchRequest, fetchResponse) {\n try {\n const responseHTML = await fetchResponse.responseHTML;\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n\n this.snapshotCache.put(fetchRequest.url, snapshot);\n } catch (_) {\n // If we cannot preload that is ok!\n }\n }\n\n requestStarted(fetchRequest) {}\n\n requestErrored(fetchRequest) {}\n\n requestFinished(fetchRequest) {}\n\n requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n #preloadAll = () => {\n this.preloadOnLoadLinksForView(document.body);\n }\n}\n\nclass Cache {\n constructor(session) {\n this.session = session;\n }\n\n clear() {\n this.session.clearCache();\n }\n\n resetCacheControl() {\n this.#setCacheControl(\"\");\n }\n\n exemptPageFromCache() {\n this.#setCacheControl(\"no-cache\");\n }\n\n exemptPageFromPreview() {\n this.#setCacheControl(\"no-preview\");\n }\n\n #setCacheControl(value) {\n setMetaContent(\"turbo-cache-control\", value);\n }\n}\n\nclass Session {\n navigator = new Navigator(this)\n history = new History(this)\n view = new PageView(this, document.documentElement)\n adapter = new BrowserAdapter(this)\n\n pageObserver = new PageObserver(this)\n cacheObserver = new CacheObserver()\n linkPrefetchObserver = new LinkPrefetchObserver(this, document)\n linkClickObserver = new LinkClickObserver(this, window)\n formSubmitObserver = new FormSubmitObserver(this, document)\n scrollObserver = new ScrollObserver(this)\n streamObserver = new StreamObserver(this)\n formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement)\n frameRedirector = new FrameRedirector(this, document.documentElement)\n streamMessageRenderer = new StreamMessageRenderer()\n cache = new Cache(this)\n\n enabled = true\n started = false\n #pageRefreshDebouncePeriod = 150\n\n constructor(recentRequests) {\n this.recentRequests = recentRequests;\n this.preloader = new Preloader(this, this.view.snapshotCache);\n this.debouncedRefresh = this.refresh;\n this.pageRefreshDebouncePeriod = this.pageRefreshDebouncePeriod;\n }\n\n start() {\n if (!this.started) {\n this.pageObserver.start();\n this.cacheObserver.start();\n this.linkPrefetchObserver.start();\n this.formLinkClickObserver.start();\n this.linkClickObserver.start();\n this.formSubmitObserver.start();\n this.scrollObserver.start();\n this.streamObserver.start();\n this.frameRedirector.start();\n this.history.start();\n this.preloader.start();\n this.started = true;\n this.enabled = true;\n }\n }\n\n disable() {\n this.enabled = false;\n }\n\n stop() {\n if (this.started) {\n this.pageObserver.stop();\n this.cacheObserver.stop();\n this.linkPrefetchObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkClickObserver.stop();\n this.formSubmitObserver.stop();\n this.scrollObserver.stop();\n this.streamObserver.stop();\n this.frameRedirector.stop();\n this.history.stop();\n this.preloader.stop();\n this.started = false;\n }\n }\n\n registerAdapter(adapter) {\n this.adapter = adapter;\n }\n\n visit(location, options = {}) {\n const frameElement = options.frame ? document.getElementById(options.frame) : null;\n\n if (frameElement instanceof FrameElement) {\n const action = options.action || getVisitAction(frameElement);\n\n frameElement.delegate.proposeVisitIfNavigatedWithAction(frameElement, action);\n frameElement.src = location.toString();\n } else {\n this.navigator.proposeVisit(expandURL(location), options);\n }\n }\n\n refresh(url, requestId) {\n const isRecentRequest = requestId && this.recentRequests.has(requestId);\n if (!isRecentRequest && !this.navigator.currentVisit) {\n this.visit(url, { action: \"replace\", shouldCacheSnapshot: false });\n }\n }\n\n connectStreamSource(source) {\n this.streamObserver.connectStreamSource(source);\n }\n\n disconnectStreamSource(source) {\n this.streamObserver.disconnectStreamSource(source);\n }\n\n renderStreamMessage(message) {\n this.streamMessageRenderer.render(StreamMessage.wrap(message));\n }\n\n clearCache() {\n this.view.clearSnapshotCache();\n }\n\n setProgressBarDelay(delay) {\n console.warn(\n \"Please replace `session.setProgressBarDelay(delay)` with `session.progressBarDelay = delay`. The function is deprecated and will be removed in a future version of Turbo.`\"\n );\n\n this.progressBarDelay = delay;\n }\n\n set progressBarDelay(delay) {\n config.drive.progressBarDelay = delay;\n }\n\n get progressBarDelay() {\n return config.drive.progressBarDelay\n }\n\n set drive(value) {\n config.drive.enabled = value;\n }\n\n get drive() {\n return config.drive.enabled\n }\n\n set formMode(value) {\n config.forms.mode = value;\n }\n\n get formMode() {\n return config.forms.mode\n }\n\n get location() {\n return this.history.location\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier\n }\n\n get pageRefreshDebouncePeriod() {\n return this.#pageRefreshDebouncePeriod\n }\n\n set pageRefreshDebouncePeriod(value) {\n this.refresh = debounce(this.debouncedRefresh.bind(this), value);\n this.#pageRefreshDebouncePeriod = value;\n }\n\n // Preloader delegate\n\n shouldPreloadLink(element) {\n const isUnsafe = element.hasAttribute(\"data-turbo-method\");\n const isStream = element.hasAttribute(\"data-turbo-stream\");\n const frameTarget = element.getAttribute(\"data-turbo-frame\");\n const frame = frameTarget == \"_top\" ?\n null :\n document.getElementById(frameTarget) || findClosestRecursively(element, \"turbo-frame:not([disabled])\");\n\n if (isUnsafe || isStream || frame instanceof FrameElement) {\n return false\n } else {\n const location = new URL(element.href);\n\n return this.elementIsNavigatable(element) && locationIsVisitable(location, this.snapshot.rootLocation)\n }\n }\n\n // History delegate\n\n historyPoppedToLocationWithRestorationIdentifierAndDirection(location, restorationIdentifier, direction) {\n if (this.enabled) {\n this.navigator.startVisit(location, restorationIdentifier, {\n action: \"restore\",\n historyChanged: true,\n direction\n });\n } else {\n this.adapter.pageInvalidated({\n reason: \"turbo_disabled\"\n });\n }\n }\n\n // Scroll observer delegate\n\n scrollPositionChanged(position) {\n this.history.updateRestorationData({ scrollPosition: position });\n }\n\n // Form click observer delegate\n\n willSubmitFormLinkToLocation(link, location) {\n return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation)\n }\n\n submittedFormLinkToLocation() {}\n\n // Link hover observer delegate\n\n canPrefetchRequestToLocation(link, location) {\n return (\n this.elementIsNavigatable(link) &&\n locationIsVisitable(location, this.snapshot.rootLocation)\n )\n }\n\n // Link click observer delegate\n\n willFollowLinkToLocation(link, location, event) {\n return (\n this.elementIsNavigatable(link) &&\n locationIsVisitable(location, this.snapshot.rootLocation) &&\n this.applicationAllowsFollowingLinkToLocation(link, location, event)\n )\n }\n\n followedLinkToLocation(link, location) {\n const action = this.getActionForLink(link);\n const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n\n this.visit(location.href, { action, acceptsStreamResponse });\n }\n\n // Navigator delegate\n\n allowsVisitingLocationWithAction(location, action) {\n return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location)\n }\n\n visitProposedToLocation(location, options) {\n extendURLWithDeprecatedProperties(location);\n this.adapter.visitProposedToLocation(location, options);\n }\n\n // Visit delegate\n\n visitStarted(visit) {\n if (!visit.acceptsStreamResponse) {\n markAsBusy(document.documentElement);\n this.view.markVisitDirection(visit.direction);\n }\n extendURLWithDeprecatedProperties(visit.location);\n if (!visit.silent) {\n this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n }\n }\n\n visitCompleted(visit) {\n this.view.unmarkVisitDirection();\n clearBusyState(document.documentElement);\n this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n }\n\n locationWithActionIsSamePage(location, action) {\n return this.navigator.locationWithActionIsSamePage(location, action)\n }\n\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n }\n\n // Form submit observer delegate\n\n willSubmitForm(form, submitter) {\n const action = getAction$1(form, submitter);\n\n return (\n this.submissionIsNavigatable(form, submitter) &&\n locationIsVisitable(expandURL(action), this.snapshot.rootLocation)\n )\n }\n\n formSubmitted(form, submitter) {\n this.navigator.submitForm(form, submitter);\n }\n\n // Page observer delegate\n\n pageBecameInteractive() {\n this.view.lastRenderedLocation = this.location;\n this.notifyApplicationAfterPageLoad();\n }\n\n pageLoaded() {\n this.history.assumeControlOfScrollRestoration();\n }\n\n pageWillUnload() {\n this.history.relinquishControlOfScrollRestoration();\n }\n\n // Stream observer delegate\n\n receivedMessageFromStream(message) {\n this.renderStreamMessage(message);\n }\n\n // Page view delegate\n\n viewWillCacheSnapshot() {\n if (!this.navigator.currentVisit?.silent) {\n this.notifyApplicationBeforeCachingSnapshot();\n }\n }\n\n allowsImmediateRender({ element }, options) {\n const event = this.notifyApplicationBeforeRender(element, options);\n const {\n defaultPrevented,\n detail: { render }\n } = event;\n\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n\n return !defaultPrevented\n }\n\n viewRenderedSnapshot(_snapshot, _isPreview, renderMethod) {\n this.view.lastRenderedLocation = this.history.location;\n this.notifyApplicationAfterRender(renderMethod);\n }\n\n preloadOnLoadLinksForView(element) {\n this.preloader.preloadOnLoadLinksForView(element);\n }\n\n viewInvalidated(reason) {\n this.adapter.pageInvalidated(reason);\n }\n\n // Frame element\n\n frameLoaded(frame) {\n this.notifyApplicationAfterFrameLoad(frame);\n }\n\n frameRendered(fetchResponse, frame) {\n this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n }\n\n // Application events\n\n applicationAllowsFollowingLinkToLocation(link, location, ev) {\n const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n return !event.defaultPrevented\n }\n\n applicationAllowsVisitingLocation(location) {\n const event = this.notifyApplicationBeforeVisitingLocation(location);\n return !event.defaultPrevented\n }\n\n notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n return dispatch(\"turbo:click\", {\n target: link,\n detail: { url: location.href, originalEvent: event },\n cancelable: true\n })\n }\n\n notifyApplicationBeforeVisitingLocation(location) {\n return dispatch(\"turbo:before-visit\", {\n detail: { url: location.href },\n cancelable: true\n })\n }\n\n notifyApplicationAfterVisitingLocation(location, action) {\n return dispatch(\"turbo:visit\", { detail: { url: location.href, action } })\n }\n\n notifyApplicationBeforeCachingSnapshot() {\n return dispatch(\"turbo:before-cache\")\n }\n\n notifyApplicationBeforeRender(newBody, options) {\n return dispatch(\"turbo:before-render\", {\n detail: { newBody, ...options },\n cancelable: true\n })\n }\n\n notifyApplicationAfterRender(renderMethod) {\n return dispatch(\"turbo:render\", { detail: { renderMethod } })\n }\n\n notifyApplicationAfterPageLoad(timing = {}) {\n return dispatch(\"turbo:load\", {\n detail: { url: this.location.href, timing }\n })\n }\n\n notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n dispatchEvent(\n new HashChangeEvent(\"hashchange\", {\n oldURL: oldURL.toString(),\n newURL: newURL.toString()\n })\n );\n }\n\n notifyApplicationAfterFrameLoad(frame) {\n return dispatch(\"turbo:frame-load\", { target: frame })\n }\n\n notifyApplicationAfterFrameRender(fetchResponse, frame) {\n return dispatch(\"turbo:frame-render\", {\n detail: { fetchResponse },\n target: frame,\n cancelable: true\n })\n }\n\n // Helpers\n\n submissionIsNavigatable(form, submitter) {\n if (config.forms.mode == \"off\") {\n return false\n } else {\n const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n\n if (config.forms.mode == \"optin\") {\n return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null\n } else {\n return submitterIsNavigatable && this.elementIsNavigatable(form)\n }\n }\n }\n\n elementIsNavigatable(element) {\n const container = findClosestRecursively(element, \"[data-turbo]\");\n const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n\n // Check if Drive is enabled on the session or we're within a Frame.\n if (config.drive.enabled || withinFrame) {\n // Element is navigatable by default, unless `data-turbo=\"false\"`.\n if (container) {\n return container.getAttribute(\"data-turbo\") != \"false\"\n } else {\n return true\n }\n } else {\n // Element isn't navigatable by default, unless `data-turbo=\"true\"`.\n if (container) {\n return container.getAttribute(\"data-turbo\") == \"true\"\n } else {\n return false\n }\n }\n }\n\n // Private\n\n getActionForLink(link) {\n return getVisitAction(link) || \"advance\"\n }\n\n get snapshot() {\n return this.view.snapshot\n }\n}\n\n// Older versions of the Turbo Native adapters referenced the\n// `Location#absoluteURL` property in their implementations of\n// the `Adapter#visitProposedToLocation()` and `#visitStarted()`\n// methods. The Location class has since been removed in favor\n// of the DOM URL API, and accordingly all Adapter methods now\n// receive URL objects.\n//\n// We alias #absoluteURL to #toString() here to avoid crashing\n// older adapters which do not expect URL objects. We should\n// consider removing this support at some point in the future.\n\nfunction extendURLWithDeprecatedProperties(url) {\n Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n absoluteURL: {\n get() {\n return this.toString()\n }\n }\n};\n\nconst session = new Session(recentRequests);\nconst { cache, navigator: navigator$1 } = session;\n\n/**\n * Starts the main session.\n * This initialises any necessary observers such as those to monitor\n * link interactions.\n */\nfunction start() {\n session.start();\n}\n\n/**\n * Registers an adapter for the main session.\n *\n * @param adapter Adapter to register\n */\nfunction registerAdapter(adapter) {\n session.registerAdapter(adapter);\n}\n\n/**\n * Performs an application visit to the given location.\n *\n * @param location Location to visit (a URL or path)\n * @param options Options to apply\n * @param options.action Type of history navigation to apply (\"restore\",\n * \"replace\" or \"advance\")\n * @param options.historyChanged Specifies whether the browser history has\n * already been changed for this visit or not\n * @param options.referrer Specifies the referrer of this visit such that\n * navigations to the same page will not result in a new history entry.\n * @param options.snapshotHTML Cached snapshot to render\n * @param options.response Response of the specified location\n */\nfunction visit(location, options) {\n session.visit(location, options);\n}\n\n/**\n * Connects a stream source to the main session.\n *\n * @param source Stream source to connect\n */\nfunction connectStreamSource(source) {\n session.connectStreamSource(source);\n}\n\n/**\n * Disconnects a stream source from the main session.\n *\n * @param source Stream source to disconnect\n */\nfunction disconnectStreamSource(source) {\n session.disconnectStreamSource(source);\n}\n\n/**\n * Renders a stream message to the main session by appending it to the\n * current document.\n *\n * @param message Message to render\n */\nfunction renderStreamMessage(message) {\n session.renderStreamMessage(message);\n}\n\n/**\n * Removes all entries from the Turbo Drive page cache.\n * Call this when state has changed on the server that may affect cached pages.\n *\n * @deprecated since version 7.2.0 in favor of `Turbo.cache.clear()`\n */\nfunction clearCache() {\n console.warn(\n \"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n session.clearCache();\n}\n\n/**\n * Sets the delay after which the progress bar will appear during navigation.\n *\n * The progress bar appears after 500ms by default.\n *\n * Note that this method has no effect when used with the iOS or Android\n * adapters.\n *\n * @param delay Time to delay in milliseconds\n */\nfunction setProgressBarDelay(delay) {\n console.warn(\n \"Please replace `Turbo.setProgressBarDelay(delay)` with `Turbo.config.drive.progressBarDelay = delay`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n config.drive.progressBarDelay = delay;\n}\n\nfunction setConfirmMethod(confirmMethod) {\n console.warn(\n \"Please replace `Turbo.setConfirmMethod(confirmMethod)` with `Turbo.config.forms.confirm = confirmMethod`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n config.forms.confirm = confirmMethod;\n}\n\nfunction setFormMode(mode) {\n console.warn(\n \"Please replace `Turbo.setFormMode(mode)` with `Turbo.config.forms.mode = mode`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n config.forms.mode = mode;\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n __proto__: null,\n navigator: navigator$1,\n session: session,\n cache: cache,\n PageRenderer: PageRenderer,\n PageSnapshot: PageSnapshot,\n FrameRenderer: FrameRenderer,\n fetch: fetchWithTurboHeaders,\n config: config,\n start: start,\n registerAdapter: registerAdapter,\n visit: visit,\n connectStreamSource: connectStreamSource,\n disconnectStreamSource: disconnectStreamSource,\n renderStreamMessage: renderStreamMessage,\n clearCache: clearCache,\n setProgressBarDelay: setProgressBarDelay,\n setConfirmMethod: setConfirmMethod,\n setFormMode: setFormMode\n});\n\nclass TurboFrameMissingError extends Error {}\n\nclass FrameController {\n fetchResponseLoaded = (_fetchResponse) => Promise.resolve()\n #currentFetchRequest = null\n #resolveVisitPromise = () => {}\n #connected = false\n #hasBeenLoaded = false\n #ignoredAttributes = new Set()\n #shouldMorphFrame = false\n action = null\n\n constructor(element) {\n this.element = element;\n this.view = new FrameView(this, this.element);\n this.appearanceObserver = new AppearanceObserver(this, this.element);\n this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n this.linkInterceptor = new LinkInterceptor(this, this.element);\n this.restorationIdentifier = uuid();\n this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n }\n\n // Frame delegate\n\n connect() {\n if (!this.#connected) {\n this.#connected = true;\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n } else {\n this.#loadSourceURL();\n }\n this.formLinkClickObserver.start();\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n }\n\n disconnect() {\n if (this.#connected) {\n this.#connected = false;\n this.appearanceObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n }\n\n disabledChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager) {\n this.#loadSourceURL();\n }\n }\n\n sourceURLChanged() {\n if (this.#isIgnoringChangesTo(\"src\")) return\n\n if (this.element.isConnected) {\n this.complete = false;\n }\n\n if (this.loadingStyle == FrameLoadingStyle.eager || this.#hasBeenLoaded) {\n this.#loadSourceURL();\n }\n }\n\n sourceURLReloaded() {\n const { refresh, src } = this.element;\n\n this.#shouldMorphFrame = src && refresh === \"morph\";\n\n this.element.removeAttribute(\"complete\");\n this.element.src = null;\n this.element.src = src;\n return this.element.loaded\n }\n\n loadingStyleChanged() {\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n } else {\n this.appearanceObserver.stop();\n this.#loadSourceURL();\n }\n }\n\n async #loadSourceURL() {\n if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n this.element.loaded = this.#visit(expandURL(this.sourceURL));\n this.appearanceObserver.stop();\n await this.element.loaded;\n this.#hasBeenLoaded = true;\n }\n }\n\n async loadResponse(fetchResponse) {\n if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n this.sourceURL = fetchResponse.response.url;\n }\n\n try {\n const html = await fetchResponse.responseHTML;\n if (html) {\n const document = parseHTMLDocument(html);\n const pageSnapshot = PageSnapshot.fromDocument(document);\n\n if (pageSnapshot.isVisitable) {\n await this.#loadFrameResponse(fetchResponse, document);\n } else {\n await this.#handleUnvisitableFrameResponse(fetchResponse);\n }\n }\n } finally {\n this.#shouldMorphFrame = false;\n this.fetchResponseLoaded = () => Promise.resolve();\n }\n }\n\n // Appearance observer delegate\n\n elementAppearedInViewport(element) {\n this.proposeVisitIfNavigatedWithAction(element, getVisitAction(element));\n this.#loadSourceURL();\n }\n\n // Form link click observer delegate\n\n willSubmitFormLinkToLocation(link) {\n return this.#shouldInterceptNavigation(link)\n }\n\n submittedFormLinkToLocation(link, _location, form) {\n const frame = this.#findFrameElement(link);\n if (frame) form.setAttribute(\"data-turbo-frame\", frame.id);\n }\n\n // Link interceptor delegate\n\n shouldInterceptLinkClick(element, _location, _event) {\n return this.#shouldInterceptNavigation(element)\n }\n\n linkClickIntercepted(element, location) {\n this.#navigateFrame(element, location);\n }\n\n // Form submit observer delegate\n\n willSubmitForm(element, submitter) {\n return element.closest(\"turbo-frame\") == this.element && this.#shouldInterceptNavigation(element, submitter)\n }\n\n formSubmitted(element, submitter) {\n if (this.formSubmission) {\n this.formSubmission.stop();\n }\n\n this.formSubmission = new FormSubmission(this, element, submitter);\n const { fetchRequest } = this.formSubmission;\n this.prepareRequest(fetchRequest);\n this.formSubmission.start();\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n request.headers[\"Turbo-Frame\"] = this.id;\n\n if (this.currentNavigationElement?.hasAttribute(\"data-turbo-stream\")) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted(_request) {\n markAsBusy(this.element);\n }\n\n requestPreventedHandlingResponse(_request, _response) {\n this.#resolveVisitPromise();\n }\n\n async requestSucceededWithResponse(request, response) {\n await this.loadResponse(response);\n this.#resolveVisitPromise();\n }\n\n async requestFailedWithResponse(request, response) {\n await this.loadResponse(response);\n this.#resolveVisitPromise();\n }\n\n requestErrored(request, error) {\n console.error(error);\n this.#resolveVisitPromise();\n }\n\n requestFinished(_request) {\n clearBusyState(this.element);\n }\n\n // Form submission delegate\n\n formSubmissionStarted({ formElement }) {\n markAsBusy(formElement, this.#findFrameElement(formElement));\n }\n\n formSubmissionSucceededWithResponse(formSubmission, response) {\n const frame = this.#findFrameElement(formSubmission.formElement, formSubmission.submitter);\n\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(formSubmission.submitter, formSubmission.formElement, frame));\n frame.delegate.loadResponse(response);\n\n if (!formSubmission.isSafe) {\n session.clearCache();\n }\n }\n\n formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n this.element.delegate.loadResponse(fetchResponse);\n session.clearCache();\n }\n\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n\n formSubmissionFinished({ formElement }) {\n clearBusyState(formElement, this.#findFrameElement(formElement));\n }\n\n // View delegate\n\n allowsImmediateRender({ element: newFrame }, options) {\n const event = dispatch(\"turbo:before-frame-render\", {\n target: this.element,\n detail: { newFrame, ...options },\n cancelable: true\n });\n\n const {\n defaultPrevented,\n detail: { render }\n } = event;\n\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n\n return !defaultPrevented\n }\n\n viewRenderedSnapshot(_snapshot, _isPreview, _renderMethod) {}\n\n preloadOnLoadLinksForView(element) {\n session.preloadOnLoadLinksForView(element);\n }\n\n viewInvalidated() {}\n\n // Frame renderer delegate\n\n willRenderFrame(currentElement, _newElement) {\n this.previousFrameElement = currentElement.cloneNode(true);\n }\n\n visitCachedSnapshot = ({ element }) => {\n const frame = element.querySelector(\"#\" + this.element.id);\n\n if (frame && this.previousFrameElement) {\n frame.replaceChildren(...this.previousFrameElement.children);\n }\n\n delete this.previousFrameElement;\n }\n\n // Private\n\n async #loadFrameResponse(fetchResponse, document) {\n const newFrameElement = await this.extractForeignFrameElement(document.body);\n const rendererClass = this.#shouldMorphFrame ? MorphingFrameRenderer : FrameRenderer;\n\n if (newFrameElement) {\n const snapshot = new Snapshot(newFrameElement);\n const renderer = new rendererClass(this, this.view.snapshot, snapshot, false, false);\n if (this.view.renderPromise) await this.view.renderPromise;\n this.changeHistory();\n\n await this.view.render(renderer);\n this.complete = true;\n session.frameRendered(fetchResponse, this.element);\n session.frameLoaded(this.element);\n await this.fetchResponseLoaded(fetchResponse);\n } else if (this.#willHandleFrameMissingFromResponse(fetchResponse)) {\n this.#handleFrameMissingFromResponse(fetchResponse);\n }\n }\n\n async #visit(url) {\n const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n\n this.#currentFetchRequest?.cancel();\n this.#currentFetchRequest = request;\n\n return new Promise((resolve) => {\n this.#resolveVisitPromise = () => {\n this.#resolveVisitPromise = () => {};\n this.#currentFetchRequest = null;\n resolve();\n };\n request.perform();\n })\n }\n\n #navigateFrame(element, url, submitter) {\n const frame = this.#findFrameElement(element, submitter);\n\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(submitter, element, frame));\n\n this.#withCurrentNavigationElement(element, () => {\n frame.src = url;\n });\n }\n\n proposeVisitIfNavigatedWithAction(frame, action = null) {\n this.action = action;\n\n if (this.action) {\n const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n const { visitCachedSnapshot } = frame.delegate;\n\n frame.delegate.fetchResponseLoaded = async (fetchResponse) => {\n if (frame.src) {\n const { statusCode, redirected } = fetchResponse;\n const responseHTML = await fetchResponse.responseHTML;\n const response = { statusCode, redirected, responseHTML };\n const options = {\n response,\n visitCachedSnapshot,\n willRender: false,\n updateHistory: false,\n restorationIdentifier: this.restorationIdentifier,\n snapshot: pageSnapshot\n };\n\n if (this.action) options.action = this.action;\n\n session.visit(frame.src, options);\n }\n };\n }\n }\n\n changeHistory() {\n if (this.action) {\n const method = getHistoryMethodForAction(this.action);\n session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n }\n }\n\n async #handleUnvisitableFrameResponse(fetchResponse) {\n console.warn(\n `The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`\n );\n\n await this.#visitResponse(fetchResponse.response);\n }\n\n #willHandleFrameMissingFromResponse(fetchResponse) {\n this.element.setAttribute(\"complete\", \"\");\n\n const response = fetchResponse.response;\n const visit = async (url, options) => {\n if (url instanceof Response) {\n this.#visitResponse(url);\n } else {\n session.visit(url, options);\n }\n };\n\n const event = dispatch(\"turbo:frame-missing\", {\n target: this.element,\n detail: { response, visit },\n cancelable: true\n });\n\n return !event.defaultPrevented\n }\n\n #handleFrameMissingFromResponse(fetchResponse) {\n this.view.missing();\n this.#throwFrameMissingError(fetchResponse);\n }\n\n #throwFrameMissingError(fetchResponse) {\n const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n throw new TurboFrameMissingError(message)\n }\n\n async #visitResponse(response) {\n const wrapped = new FetchResponse(response);\n const responseHTML = await wrapped.responseHTML;\n const { location, redirected, statusCode } = wrapped;\n\n return session.visit(location, { response: { redirected, statusCode, responseHTML } })\n }\n\n #findFrameElement(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n return getFrameElementById(id) ?? this.element\n }\n\n async extractForeignFrameElement(container) {\n let element;\n const id = CSS.escape(this.id);\n\n try {\n element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n if (element) {\n return element\n }\n\n element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n if (element) {\n await element.loaded;\n return await this.extractForeignFrameElement(element)\n }\n } catch (error) {\n console.error(error);\n return new FrameElement()\n }\n\n return null\n }\n\n #formActionIsVisitable(form, submitter) {\n const action = getAction$1(form, submitter);\n\n return locationIsVisitable(expandURL(action), this.rootLocation)\n }\n\n #shouldInterceptNavigation(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n\n if (element instanceof HTMLFormElement && !this.#formActionIsVisitable(element, submitter)) {\n return false\n }\n\n if (!this.enabled || id == \"_top\") {\n return false\n }\n\n if (id) {\n const frameElement = getFrameElementById(id);\n if (frameElement) {\n return !frameElement.disabled\n }\n }\n\n if (!session.elementIsNavigatable(element)) {\n return false\n }\n\n if (submitter && !session.elementIsNavigatable(submitter)) {\n return false\n }\n\n return true\n }\n\n // Computed properties\n\n get id() {\n return this.element.id\n }\n\n get enabled() {\n return !this.element.disabled\n }\n\n get sourceURL() {\n if (this.element.src) {\n return this.element.src\n }\n }\n\n set sourceURL(sourceURL) {\n this.#ignoringChangesToAttribute(\"src\", () => {\n this.element.src = sourceURL ?? null;\n });\n }\n\n get loadingStyle() {\n return this.element.loading\n }\n\n get isLoading() {\n return this.formSubmission !== undefined || this.#resolveVisitPromise() !== undefined\n }\n\n get complete() {\n return this.element.hasAttribute(\"complete\")\n }\n\n set complete(value) {\n if (value) {\n this.element.setAttribute(\"complete\", \"\");\n } else {\n this.element.removeAttribute(\"complete\");\n }\n }\n\n get isActive() {\n return this.element.isActive && this.#connected\n }\n\n get rootLocation() {\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const root = meta?.content ?? \"/\";\n return expandURL(root)\n }\n\n #isIgnoringChangesTo(attributeName) {\n return this.#ignoredAttributes.has(attributeName)\n }\n\n #ignoringChangesToAttribute(attributeName, callback) {\n this.#ignoredAttributes.add(attributeName);\n callback();\n this.#ignoredAttributes.delete(attributeName);\n }\n\n #withCurrentNavigationElement(element, callback) {\n this.currentNavigationElement = element;\n callback();\n delete this.currentNavigationElement;\n }\n}\n\nfunction getFrameElementById(id) {\n if (id != null) {\n const element = document.getElementById(id);\n if (element instanceof FrameElement) {\n return element\n }\n }\n}\n\nfunction activateElement(element, currentURL) {\n if (element) {\n const src = element.getAttribute(\"src\");\n if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`)\n }\n if (element.ownerDocument !== document) {\n element = document.importNode(element, true);\n }\n\n if (element instanceof FrameElement) {\n element.connectedCallback();\n element.disconnectedCallback();\n return element\n }\n }\n}\n\nconst StreamActions = {\n after() {\n this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e.nextSibling));\n },\n\n append() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.append(this.templateContent));\n },\n\n before() {\n this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e));\n },\n\n prepend() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.prepend(this.templateContent));\n },\n\n remove() {\n this.targetElements.forEach((e) => e.remove());\n },\n\n replace() {\n const method = this.getAttribute(\"method\");\n\n this.targetElements.forEach((targetElement) => {\n if (method === \"morph\") {\n morphElements(targetElement, this.templateContent);\n } else {\n targetElement.replaceWith(this.templateContent);\n }\n });\n },\n\n update() {\n const method = this.getAttribute(\"method\");\n\n this.targetElements.forEach((targetElement) => {\n if (method === \"morph\") {\n morphChildren(targetElement, this.templateContent);\n } else {\n targetElement.innerHTML = \"\";\n targetElement.append(this.templateContent);\n }\n });\n },\n\n refresh() {\n session.refresh(this.baseURI, this.requestId);\n }\n};\n\n// <turbo-stream action=replace target=id><template>...\n\n/**\n * Renders updates to the page from a stream of messages.\n *\n * Using the `action` attribute, this can be configured one of eight ways:\n *\n * - `after` - inserts the result after the target\n * - `append` - appends the result to the target\n * - `before` - inserts the result before the target\n * - `prepend` - prepends the result to the target\n * - `refresh` - initiates a page refresh\n * - `remove` - removes the target\n * - `replace` - replaces the outer HTML of the target\n * - `update` - replaces the inner HTML of the target\n *\n * @customElement turbo-stream\n * @example\n * <turbo-stream action=\"append\" target=\"dom_id\">\n * <template>\n * Content to append to target designated with the dom_id.\n * </template>\n * </turbo-stream>\n */\nclass StreamElement extends HTMLElement {\n static async renderElement(newElement) {\n await newElement.performAction();\n }\n\n async connectedCallback() {\n try {\n await this.render();\n } catch (error) {\n console.error(error);\n } finally {\n this.disconnect();\n }\n }\n\n async render() {\n return (this.renderPromise ??= (async () => {\n const event = this.beforeRenderEvent;\n\n if (this.dispatchEvent(event)) {\n await nextRepaint();\n await event.detail.render(this);\n }\n })())\n }\n\n disconnect() {\n try {\n this.remove();\n // eslint-disable-next-line no-empty\n } catch {}\n }\n\n /**\n * Removes duplicate children (by ID)\n */\n removeDuplicateTargetChildren() {\n this.duplicateChildren.forEach((c) => c.remove());\n }\n\n /**\n * Gets the list of duplicate children (i.e. those with the same ID)\n */\n get duplicateChildren() {\n const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.id);\n const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.id).map((c) => c.id);\n\n return existingChildren.filter((c) => newChildrenIds.includes(c.id))\n }\n\n /**\n * Gets the action function to be performed.\n */\n get performAction() {\n if (this.action) {\n const actionFunction = StreamActions[this.action];\n if (actionFunction) {\n return actionFunction\n }\n this.#raise(\"unknown action\");\n }\n this.#raise(\"action attribute is missing\");\n }\n\n /**\n * Gets the target elements which the template will be rendered to.\n */\n get targetElements() {\n if (this.target) {\n return this.targetElementsById\n } else if (this.targets) {\n return this.targetElementsByQuery\n } else {\n this.#raise(\"target or targets attribute is missing\");\n }\n }\n\n /**\n * Gets the contents of the main `<template>`.\n */\n get templateContent() {\n return this.templateElement.content.cloneNode(true)\n }\n\n /**\n * Gets the main `<template>` used for rendering\n */\n get templateElement() {\n if (this.firstElementChild === null) {\n const template = this.ownerDocument.createElement(\"template\");\n this.appendChild(template);\n return template\n } else if (this.firstElementChild instanceof HTMLTemplateElement) {\n return this.firstElementChild\n }\n this.#raise(\"first child element must be a <template> element\");\n }\n\n /**\n * Gets the current action.\n */\n get action() {\n return this.getAttribute(\"action\")\n }\n\n /**\n * Gets the current target (an element ID) to which the result will\n * be rendered.\n */\n get target() {\n return this.getAttribute(\"target\")\n }\n\n /**\n * Gets the current \"targets\" selector (a CSS selector)\n */\n get targets() {\n return this.getAttribute(\"targets\")\n }\n\n /**\n * Reads the request-id attribute\n */\n get requestId() {\n return this.getAttribute(\"request-id\")\n }\n\n #raise(message) {\n throw new Error(`${this.description}: ${message}`)\n }\n\n get description() {\n return (this.outerHTML.match(/<[^>]+>/) ?? [])[0] ?? \"<turbo-stream>\"\n }\n\n get beforeRenderEvent() {\n return new CustomEvent(\"turbo:before-stream-render\", {\n bubbles: true,\n cancelable: true,\n detail: { newStream: this, render: StreamElement.renderElement }\n })\n }\n\n get targetElementsById() {\n const element = this.ownerDocument?.getElementById(this.target);\n\n if (element !== null) {\n return [element]\n } else {\n return []\n }\n }\n\n get targetElementsByQuery() {\n const elements = this.ownerDocument?.querySelectorAll(this.targets);\n\n if (elements.length !== 0) {\n return Array.prototype.slice.call(elements)\n } else {\n return []\n }\n }\n}\n\nclass StreamSourceElement extends HTMLElement {\n streamSource = null\n\n connectedCallback() {\n this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n\n connectStreamSource(this.streamSource);\n }\n\n disconnectedCallback() {\n if (this.streamSource) {\n this.streamSource.close();\n\n disconnectStreamSource(this.streamSource);\n }\n }\n\n get src() {\n return this.getAttribute(\"src\") || \"\"\n }\n}\n\nFrameElement.delegateConstructor = FrameController;\n\nif (customElements.get(\"turbo-frame\") === undefined) {\n customElements.define(\"turbo-frame\", FrameElement);\n}\n\nif (customElements.get(\"turbo-stream\") === undefined) {\n customElements.define(\"turbo-stream\", StreamElement);\n}\n\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n let element = document.currentScript;\n if (!element) return\n if (element.hasAttribute(\"data-turbo-suppress-warning\")) return\n\n element = element.parentElement;\n while (element) {\n if (element == document.body) {\n return console.warn(\n unindent`\n You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n Load your application’s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n ——\n Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n `,\n element.outerHTML\n )\n }\n\n element = element.parentElement;\n }\n})();\n\nwindow.Turbo = { ...Turbo, StreamActions };\nstart();\n\nexport { FetchEnctype, FetchMethod, FetchRequest, FetchResponse, FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, config, connectStreamSource, disconnectStreamSource, fetchWithTurboHeaders as fetch, fetchEnctypeFromString, fetchMethodFromString, isSafe, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n","let consumer\n\nexport async function getConsumer() {\n return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n const { subscriptions } = await getConsumer()\n return subscriptions.create(channel, mixin)\n}\n","// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport default function walk (obj) {\n if (!obj || typeof obj !== 'object') return obj;\n if (obj instanceof Date || obj instanceof RegExp) return obj;\n if (Array.isArray(obj)) return obj.map(walk);\n return Object.keys(obj).reduce(function (acc, key) {\n var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function (m, x) {\n return '_' + x.toLowerCase();\n });\n acc[camel] = walk(obj[key]);\n return acc;\n }, {});\n};","import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\nimport snakeize from \"./snakeize\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n static observedAttributes = [\"channel\", \"signed-stream-name\"]\n\n async connectedCallback() {\n connectStreamSource(this)\n this.subscription = await subscribeTo(this.channel, {\n received: this.dispatchMessageEvent.bind(this),\n connected: this.subscriptionConnected.bind(this),\n disconnected: this.subscriptionDisconnected.bind(this)\n })\n }\n\n disconnectedCallback() {\n disconnectStreamSource(this)\n if (this.subscription) this.subscription.unsubscribe()\n this.subscriptionDisconnected()\n }\n\n attributeChangedCallback() {\n if (this.subscription) {\n this.disconnectedCallback()\n this.connectedCallback()\n }\n }\n\n dispatchMessageEvent(data) {\n const event = new MessageEvent(\"message\", { data })\n return this.dispatchEvent(event)\n }\n\n subscriptionConnected() {\n this.setAttribute(\"connected\", \"\")\n }\n\n subscriptionDisconnected() {\n this.removeAttribute(\"connected\")\n }\n\n get channel() {\n const channel = this.getAttribute(\"channel\")\n const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n return { channel, signed_stream_name, ...snakeize({ ...this.dataset }) }\n }\n}\n\n\nif (customElements.get(\"turbo-cable-stream-source\") === undefined) {\n customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n}\n","import \"./cable_stream_source_element\"\n\nimport * as Turbo from \"@hotwired/turbo\"\nexport { Turbo }\n\nimport * as cable from \"./cable\"\nexport { cable }\n\nimport { encodeMethodIntoRequestBody } from \"./fetch_requests\"\n\nwindow.Turbo = Turbo\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody)\n","export function encodeMethodIntoRequestBody(event) {\n if (event.target instanceof HTMLFormElement) {\n const { target: form, detail: { fetchOptions } } = event\n\n form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams()\n const method = determineFetchMethod(submitter, body, form)\n\n if (!/get/i.test(method)) {\n if (/post/i.test(method)) {\n body.delete(\"_method\")\n } else {\n body.set(\"_method\", method)\n }\n\n fetchOptions.method = \"post\"\n }\n }, { once: true })\n }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n const formMethod = determineFormMethod(submitter)\n const overrideMethod = body.get(\"_method\")\n const method = form.getAttribute(\"method\") || \"get\"\n\n if (typeof formMethod == \"string\") {\n return formMethod\n } else if (typeof overrideMethod == \"string\") {\n return overrideMethod\n } else {\n return method\n }\n}\n\nfunction determineFormMethod(submitter) {\n if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n // Rails 7 ActionView::Helpers::FormBuilder#button method has an override\n // for formmethod if the button does not have name or value attributes\n // set, which is the default. This means that if you use <%= f.button\n // formmethod: :delete %>, it will generate a <button name=\"_method\"\n // value=\"delete\" formmethod=\"post\">. Therefore, if the submitter's name\n // is already _method, it's value attribute already contains the desired\n // method.\n if (submitter.name === '_method') {\n return submitter.value\n } else if (submitter.hasAttribute(\"formmethod\")) {\n return submitter.formMethod\n } else {\n return null\n }\n } else {\n return null\n }\n}\n\nfunction isBodyInit(body) {\n return body instanceof FormData || body instanceof URLSearchParams\n}\n","/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/et\",[],function(){return{inputTooLong:function(e){var n=e.input.length-e.maximum,t=\"Sisesta \"+n+\" täht\";return 1!=n&&(t+=\"e\"),t+=\" vähem\"},inputTooShort:function(e){var n=e.minimum-e.input.length,t=\"Sisesta \"+n+\" täht\";return 1!=n&&(t+=\"e\"),t+=\" rohkem\"},loadingMore:function(){return\"Laen tulemusi…\"},maximumSelected:function(e){var n=\"Saad vaid \"+e.maximum+\" tulemus\";return 1==e.maximum?n+=\"e\":n+=\"t\",n+=\" valida\"},noResults:function(){return\"Tulemused puuduvad\"},searching:function(){return\"Otsin…\"},removeAllItems:function(){return\"Eemalda kõik esemed\"}}}),e.define,e.require}();","(function($) {\n\n var cocoon_element_counter = 0;\n\n var create_new_id = function() {\n return (new Date().getTime() + cocoon_element_counter++);\n }\n\n var newcontent_braced = function(id) {\n return '[' + id + ']$1';\n }\n\n var newcontent_underscord = function(id) {\n return '_' + id + '_$1';\n }\n\n var getInsertionNodeElem = function(insertionNode, insertionTraversal, $this){\n\n if (!insertionNode){\n return $this.parent();\n }\n\n if (typeof insertionNode == 'function'){\n if(insertionTraversal){\n console.warn('association-insertion-traversal is ignored, because association-insertion-node is given as a function.')\n }\n return insertionNode($this);\n }\n\n if(typeof insertionNode == 'string'){\n if (insertionTraversal){\n return $this[insertionTraversal](insertionNode);\n }else{\n return insertionNode == \"this\" ? $this : $(insertionNode);\n }\n }\n\n }\n\n $(document).on('click', '.add_fields', function(e) {\n e.preventDefault();\n e.stopPropagation();\n \n var $this = $(this),\n assoc = $this.data('association'),\n assocs = $this.data('associations'),\n content = $this.data('association-insertion-template'),\n insertionMethod = $this.data('association-insertion-method') || $this.data('association-insertion-position') || 'before',\n insertionNode = $this.data('association-insertion-node'),\n insertionTraversal = $this.data('association-insertion-traversal'),\n count = parseInt($this.data('count'), 10),\n regexp_braced = new RegExp('\\\\[new_' + assoc + '\\\\](.*?\\\\s)', 'g'),\n regexp_underscord = new RegExp('_new_' + assoc + '_(\\\\w*)', 'g'),\n new_id = create_new_id(),\n new_content = content.replace(regexp_braced, newcontent_braced(new_id)),\n new_contents = [],\n originalEvent = e;\n\n\n if (new_content == content) {\n regexp_braced = new RegExp('\\\\[new_' + assocs + '\\\\](.*?\\\\s)', 'g');\n regexp_underscord = new RegExp('_new_' + assocs + '_(\\\\w*)', 'g');\n new_content = content.replace(regexp_braced, newcontent_braced(new_id));\n }\n\n new_content = new_content.replace(regexp_underscord, newcontent_underscord(new_id));\n new_contents = [new_content];\n\n count = (isNaN(count) ? 1 : Math.max(count, 1));\n count -= 1;\n\n while (count) {\n new_id = create_new_id();\n new_content = content.replace(regexp_braced, newcontent_braced(new_id));\n new_content = new_content.replace(regexp_underscord, newcontent_underscord(new_id));\n new_contents.push(new_content);\n\n count -= 1;\n }\n\n var insertionNodeElem = getInsertionNodeElem(insertionNode, insertionTraversal, $this)\n\n if( !insertionNodeElem || (insertionNodeElem.length == 0) ){\n console.warn(\"Couldn't find the element to insert the template. Make sure your `data-association-insertion-*` on `link_to_add_association` is correct.\")\n }\n\n $.each(new_contents, function(i, node) {\n var contentNode = $(node);\n\n var before_insert = jQuery.Event('cocoon:before-insert');\n insertionNodeElem.trigger(before_insert, [contentNode, originalEvent]);\n\n if (!before_insert.isDefaultPrevented()) {\n // allow any of the jquery dom manipulation methods (after, before, append, prepend, etc)\n // to be called on the node. allows the insertion node to be the parent of the inserted\n // code and doesn't force it to be a sibling like after/before does. default: 'before'\n var addedContent = insertionNodeElem[insertionMethod](contentNode);\n\n insertionNodeElem.trigger('cocoon:after-insert', [contentNode,\n originalEvent]);\n }\n });\n });\n\n $(document).on('click', '.remove_fields.dynamic, .remove_fields.existing', function(e) {\n var $this = $(this),\n wrapper_class = $this.data('wrapper-class') || 'nested-fields',\n node_to_delete = $this.closest('.' + wrapper_class),\n trigger_node = node_to_delete.parent(),\n originalEvent = e;\n\n e.preventDefault();\n e.stopPropagation();\n\n var before_remove = jQuery.Event('cocoon:before-remove');\n trigger_node.trigger(before_remove, [node_to_delete, originalEvent]);\n\n if (!before_remove.isDefaultPrevented()) {\n var timeout = trigger_node.data('remove-timeout') || 0;\n\n setTimeout(function() {\n if ($this.hasClass('dynamic')) {\n node_to_delete.detach();\n } else {\n $this.prev(\"input[type=hidden]\").val(\"1\");\n node_to_delete.hide();\n }\n trigger_node.trigger('cocoon:after-remove', [node_to_delete,\n originalEvent]);\n }, timeout);\n }\n });\n\n\n $(document).on(\"ready page:load turbolinks:load\", function() {\n $('.remove_fields.existing.destroyed').each(function(i, obj) {\n var $this = $(this),\n wrapper_class = $this.data('wrapper-class') || 'nested-fields';\n\n $this.closest('.' + wrapper_class).hide();\n });\n });\n\n})(jQuery);\n\n\n","/*!\n * Datepicker for Bootstrap v1.10.0 (https://github.com/uxsolutions/bootstrap-datepicker)\n *\n * Licensed under the Apache License v2.0 (https://www.apache.org/licenses/LICENSE-2.0)\n */\n\n(function(factory){\n if (typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (typeof exports === 'object') {\n factory(require('jquery'));\n } else {\n factory(jQuery);\n }\n}(function($, undefined){\n\tfunction UTCDate(){\n\t\treturn new Date(Date.UTC.apply(Date, arguments));\n\t}\n\tfunction UTCToday(){\n\t\tvar today = new Date();\n\t\treturn UTCDate(today.getFullYear(), today.getMonth(), today.getDate());\n\t}\n\tfunction isUTCEquals(date1, date2) {\n\t\treturn (\n\t\t\tdate1.getUTCFullYear() === date2.getUTCFullYear() &&\n\t\t\tdate1.getUTCMonth() === date2.getUTCMonth() &&\n\t\t\tdate1.getUTCDate() === date2.getUTCDate()\n\t\t);\n\t}\n\tfunction alias(method, deprecationMsg){\n\t\treturn function(){\n\t\t\tif (deprecationMsg !== undefined) {\n\t\t\t\t$.fn.datepicker.deprecated(deprecationMsg);\n\t\t\t}\n\n\t\t\treturn this[method].apply(this, arguments);\n\t\t};\n\t}\n\tfunction isValidDate(d) {\n\t\treturn d && !isNaN(d.getTime());\n\t}\n\n\tvar DateArray = (function(){\n\t\tvar extras = {\n\t\t\tget: function(i){\n\t\t\t\treturn this.slice(i)[0];\n\t\t\t},\n\t\t\tcontains: function(d){\n\t\t\t\t// Array.indexOf is not cross-browser;\n\t\t\t\t// $.inArray doesn't work with Dates\n\t\t\t\tvar val = d && d.valueOf();\n\t\t\t\tfor (var i=0, l=this.length; i < l; i++)\n // Use date arithmetic to allow dates with different times to match\n if (0 <= this[i].valueOf() - val && this[i].valueOf() - val < 1000*60*60*24)\n\t\t\t\t\t\treturn i;\n\t\t\t\treturn -1;\n\t\t\t},\n\t\t\tremove: function(i){\n\t\t\t\tthis.splice(i,1);\n\t\t\t},\n\t\t\treplace: function(new_array){\n\t\t\t\tif (!new_array)\n\t\t\t\t\treturn;\n\t\t\t\tif (!Array.isArray(new_array))\n\t\t\t\t\tnew_array = [new_array];\n\t\t\t\tthis.clear();\n\t\t\t\tthis.push.apply(this, new_array);\n\t\t\t},\n\t\t\tclear: function(){\n\t\t\t\tthis.length = 0;\n\t\t\t},\n\t\t\tcopy: function(){\n\t\t\t\tvar a = new DateArray();\n\t\t\t\ta.replace(this);\n\t\t\t\treturn a;\n\t\t\t}\n\t\t};\n\n\t\treturn function(){\n\t\t\tvar a = [];\n\t\t\ta.push.apply(a, arguments);\n\t\t\t$.extend(a, extras);\n\t\t\treturn a;\n\t\t};\n\t})();\n\n\n\t// Picker object\n\n\tvar Datepicker = function(element, options){\n\t\t$.data(element, 'datepicker', this);\n\n\t\tthis._events = [];\n\t\tthis._secondaryEvents = [];\n\n\t\tthis._process_options(options);\n\n\t\tthis.dates = new DateArray();\n\t\tthis.viewDate = this.o.defaultViewDate;\n\t\tthis.focusDate = null;\n\n\t\tthis.element = $(element);\n\t\tthis.isInput = this.element.is('input');\n\t\tthis.inputField = this.isInput ? this.element : this.element.find('input');\n\t\tthis.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .input-group-append, .input-group-prepend, .btn') : false;\n\t\tif (this.component && this.component.length === 0){\n\t\t\tthis.component = false;\n }\n\n\t\tif (this.o.isInline === null){\n\t\t\tthis.isInline = !this.component && !this.isInput;\n\t\t} else {\n\t\t\tthis.isInline = this.o.isInline;\n\t\t}\n\n\t\tthis.picker = $(DPGlobal.template);\n\n\t\t// Checking templates and inserting\n\t\tif (this._check_template(this.o.templates.leftArrow)) {\n\t\t\tthis.picker.find('.prev').html(this.o.templates.leftArrow);\n\t\t}\n\n\t\tif (this._check_template(this.o.templates.rightArrow)) {\n\t\t\tthis.picker.find('.next').html(this.o.templates.rightArrow);\n\t\t}\n\n\t\tthis._buildEvents();\n\t\tthis._attachEvents();\n\n\t\tif (this.isInline){\n\t\t\tthis.picker.addClass('datepicker-inline').appendTo(this.element);\n\t\t}\n\t\telse {\n\t\t\tthis.picker.addClass('datepicker-dropdown dropdown-menu');\n\t\t}\n\n\t\tif (this.o.rtl){\n\t\t\tthis.picker.addClass('datepicker-rtl');\n\t\t}\n\n\t\tif (this.o.calendarWeeks) {\n\t\t\tthis.picker.find('.datepicker-days .datepicker-switch, thead .datepicker-title, tfoot .today, tfoot .clear')\n\t\t\t\t.attr('colspan', function(i, val){\n\t\t\t\t\treturn Number(val) + 1;\n\t\t\t\t});\n\t\t}\n\n\t\tthis._process_options({\n\t\t\tstartDate: this._o.startDate,\n\t\t\tendDate: this._o.endDate,\n\t\t\tdaysOfWeekDisabled: this.o.daysOfWeekDisabled,\n\t\t\tdaysOfWeekHighlighted: this.o.daysOfWeekHighlighted,\n\t\t\tdatesDisabled: this.o.datesDisabled\n\t\t});\n\n\t\tthis._allow_update = false;\n\t\tthis.setViewMode(this.o.startView);\n\t\tthis._allow_update = true;\n\n\t\tthis.fillDow();\n\t\tthis.fillMonths();\n\n\t\tthis.update();\n\n\t\tif (this.isInline){\n\t\t\tthis.show();\n\t\t}\n\t};\n\n\tDatepicker.prototype = {\n\t\tconstructor: Datepicker,\n\n\t\t_resolveViewName: function(view){\n\t\t\t$.each(DPGlobal.viewModes, function(i, viewMode){\n\t\t\t\tif (view === i || $.inArray(view, viewMode.names) !== -1){\n\t\t\t\t\tview = i;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn view;\n\t\t},\n\n\t\t_resolveDaysOfWeek: function(daysOfWeek){\n\t\t\tif (!Array.isArray(daysOfWeek))\n\t\t\t\tdaysOfWeek = daysOfWeek.split(/[,\\s]*/);\n\t\t\treturn $.map(daysOfWeek, Number);\n\t\t},\n\n\t\t_check_template: function(tmp){\n\t\t\ttry {\n\t\t\t\t// If empty\n\t\t\t\tif (tmp === undefined || tmp === \"\") {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// If no html, everything ok\n\t\t\t\tif ((tmp.match(/[<>]/g) || []).length <= 0) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// Checking if html is fine\n\t\t\t\tvar jDom = $(tmp);\n\t\t\t\treturn jDom.length > 0;\n\t\t\t}\n\t\t\tcatch (ex) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t_process_options: function(opts){\n\t\t\t// Store raw options for reference\n\t\t\tthis._o = $.extend({}, this._o, opts);\n\t\t\t// Processed options\n\t\t\tvar o = this.o = $.extend({}, this._o);\n\n\t\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t\t// fallback to 2 letter code eg \"de\"\n\t\t\tvar lang = o.language;\n\t\t\tif (!dates[lang]){\n\t\t\t\tlang = lang.split('-')[0];\n\t\t\t\tif (!dates[lang])\n\t\t\t\t\tlang = defaults.language;\n\t\t\t}\n\t\t\to.language = lang;\n\n\t\t\t// Retrieve view index from any aliases\n\t\t\to.startView = this._resolveViewName(o.startView);\n\t\t\to.minViewMode = this._resolveViewName(o.minViewMode);\n\t\t\to.maxViewMode = this._resolveViewName(o.maxViewMode);\n\n\t\t\t// Check view is between min and max\n\t\t\to.startView = Math.max(this.o.minViewMode, Math.min(this.o.maxViewMode, o.startView));\n\n\t\t\t// true, false, or Number > 0\n\t\t\tif (o.multidate !== true){\n\t\t\t\to.multidate = Number(o.multidate) || false;\n\t\t\t\tif (o.multidate !== false)\n\t\t\t\t\to.multidate = Math.max(0, o.multidate);\n\t\t\t}\n\t\t\to.multidateSeparator = String(o.multidateSeparator);\n\n\t\t\to.weekStart %= 7;\n\t\t\to.weekEnd = (o.weekStart + 6) % 7;\n\n\t\t\tvar format = DPGlobal.parseFormat(o.format);\n\t\t\tif (o.startDate !== -Infinity){\n\t\t\t\tif (!!o.startDate){\n\t\t\t\t\tif (o.startDate instanceof Date)\n\t\t\t\t\t\to.startDate = this._local_to_utc(this._zero_time(o.startDate));\n\t\t\t\t\telse\n\t\t\t\t\t\to.startDate = DPGlobal.parseDate(o.startDate, format, o.language, o.assumeNearbyYear);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to.startDate = -Infinity;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (o.endDate !== Infinity){\n\t\t\t\tif (!!o.endDate){\n\t\t\t\t\tif (o.endDate instanceof Date)\n\t\t\t\t\t\to.endDate = this._local_to_utc(this._zero_time(o.endDate));\n\t\t\t\t\telse\n\t\t\t\t\t\to.endDate = DPGlobal.parseDate(o.endDate, format, o.language, o.assumeNearbyYear);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to.endDate = Infinity;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\to.daysOfWeekDisabled = this._resolveDaysOfWeek(o.daysOfWeekDisabled||[]);\n\t\t\to.daysOfWeekHighlighted = this._resolveDaysOfWeek(o.daysOfWeekHighlighted||[]);\n\n\t\t\to.datesDisabled = o.datesDisabled||[];\n\t\t\tif (!Array.isArray(o.datesDisabled)) {\n\t\t\t\to.datesDisabled = o.datesDisabled.split(',');\n\t\t\t}\n\t\t\to.datesDisabled = $.map(o.datesDisabled, function(d){\n\t\t\t\treturn DPGlobal.parseDate(d, format, o.language, o.assumeNearbyYear);\n\t\t\t});\n\n\t\t\tvar plc = String(o.orientation).toLowerCase().split(/\\s+/g),\n\t\t\t\t_plc = o.orientation.toLowerCase();\n\t\t\tplc = $.grep(plc, function(word){\n\t\t\t\treturn /^auto|left|right|top|bottom$/.test(word);\n\t\t\t});\n\t\t\to.orientation = {x: 'auto', y: 'auto'};\n\t\t\tif (!_plc || _plc === 'auto')\n\t\t\t\t; // no action\n\t\t\telse if (plc.length === 1){\n\t\t\t\tswitch (plc[0]){\n\t\t\t\t\tcase 'top':\n\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\to.orientation.y = plc[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'left':\n\t\t\t\t\tcase 'right':\n\t\t\t\t\t\to.orientation.x = plc[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_plc = $.grep(plc, function(word){\n\t\t\t\t\treturn /^left|right$/.test(word);\n\t\t\t\t});\n\t\t\t\to.orientation.x = _plc[0] || 'auto';\n\n\t\t\t\t_plc = $.grep(plc, function(word){\n\t\t\t\t\treturn /^top|bottom$/.test(word);\n\t\t\t\t});\n\t\t\t\to.orientation.y = _plc[0] || 'auto';\n\t\t\t}\n\t\t\tif (o.defaultViewDate instanceof Date || typeof o.defaultViewDate === 'string') {\n\t\t\t\to.defaultViewDate = DPGlobal.parseDate(o.defaultViewDate, format, o.language, o.assumeNearbyYear);\n\t\t\t} else if (o.defaultViewDate) {\n\t\t\t\tvar year = o.defaultViewDate.year || new Date().getFullYear();\n\t\t\t\tvar month = o.defaultViewDate.month || 0;\n\t\t\t\tvar day = o.defaultViewDate.day || 1;\n\t\t\t\to.defaultViewDate = UTCDate(year, month, day);\n\t\t\t} else {\n\t\t\t\to.defaultViewDate = UTCToday();\n\t\t\t}\n\t\t},\n\t\t_applyEvents: function(evs){\n\t\t\tfor (var i=0, el, ch, ev; i < evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tif (evs[i].length === 2){\n\t\t\t\t\tch = undefined;\n\t\t\t\t\tev = evs[i][1];\n\t\t\t\t} else if (evs[i].length === 3){\n\t\t\t\t\tch = evs[i][1];\n\t\t\t\t\tev = evs[i][2];\n\t\t\t\t}\n\t\t\t\tel.on(ev, ch);\n\t\t\t}\n\t\t},\n\t\t_unapplyEvents: function(evs){\n\t\t\tfor (var i=0, el, ev, ch; i < evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tif (evs[i].length === 2){\n\t\t\t\t\tch = undefined;\n\t\t\t\t\tev = evs[i][1];\n\t\t\t\t} else if (evs[i].length === 3){\n\t\t\t\t\tch = evs[i][1];\n\t\t\t\t\tev = evs[i][2];\n\t\t\t\t}\n\t\t\t\tel.off(ev, ch);\n\t\t\t}\n\t\t},\n\t\t_buildEvents: function(){\n var events = {\n keyup: $.proxy(function(e){\n if ($.inArray(e.keyCode, [27, 37, 39, 38, 40, 32, 13, 9]) === -1)\n this.update();\n }, this),\n keydown: $.proxy(this.keydown, this),\n paste: $.proxy(this.paste, this)\n };\n\n if (this.o.showOnFocus === true) {\n events.focus = $.proxy(this.show, this);\n }\n\n if (this.isInput) { // single input\n this._events = [\n [this.element, events]\n ];\n }\n // component: input + button\n else if (this.component && this.inputField.length) {\n this._events = [\n // For components that are not readonly, allow keyboard nav\n [this.inputField, events],\n [this.component, {\n click: $.proxy(this.show, this)\n }]\n ];\n }\n\t\t\telse {\n\t\t\t\tthis._events = [\n\t\t\t\t\t[this.element, {\n\t\t\t\t\t\tclick: $.proxy(this.show, this),\n\t\t\t\t\t\tkeydown: $.proxy(this.keydown, this)\n\t\t\t\t\t}]\n\t\t\t\t];\n\t\t\t}\n\t\t\tthis._events.push(\n\t\t\t\t// Component: listen for blur on element descendants\n\t\t\t\t[this.element, '*', {\n\t\t\t\t\tblur: $.proxy(function(e){\n\t\t\t\t\t\tthis._focused_from = e.target;\n\t\t\t\t\t}, this)\n\t\t\t\t}],\n\t\t\t\t// Input: listen for blur on element\n\t\t\t\t[this.element, {\n\t\t\t\t\tblur: $.proxy(function(e){\n\t\t\t\t\t\tthis._focused_from = e.target;\n\t\t\t\t\t}, this)\n\t\t\t\t}]\n\t\t\t);\n\n\t\t\tif (this.o.immediateUpdates) {\n\t\t\t\t// Trigger input updates immediately on changed year/month\n\t\t\t\tthis._events.push([this.element, {\n\t\t\t\t\t'changeYear changeMonth': $.proxy(function(e){\n\t\t\t\t\t\tthis.update(e.date);\n\t\t\t\t\t}, this)\n\t\t\t\t}]);\n\t\t\t}\n\n\t\t\tthis._secondaryEvents = [\n\t\t\t\t[this.picker, {\n\t\t\t\t\tclick: $.proxy(this.click, this)\n\t\t\t\t}],\n\t\t\t\t[this.picker, '.prev, .next', {\n\t\t\t\t\tclick: $.proxy(this.navArrowsClick, this)\n\t\t\t\t}],\n\t\t\t\t[this.picker, '.day:not(.disabled)', {\n\t\t\t\t\tclick: $.proxy(this.dayCellClick, this)\n\t\t\t\t}],\n\t\t\t\t[$(window), {\n\t\t\t\t\tresize: $.proxy(this.place, this)\n\t\t\t\t}],\n\t\t\t\t[$(document), {\n\t\t\t\t\t'mousedown touchstart': $.proxy(function(e){\n\t\t\t\t\t\t// Clicked outside the datepicker, hide it\n\t\t\t\t\t\tif (!(\n\t\t\t\t\t\t\tthis.element.is(e.target) ||\n\t\t\t\t\t\t\tthis.element.find(e.target).length ||\n\t\t\t\t\t\t\tthis.picker.is(e.target) ||\n\t\t\t\t\t\t\tthis.picker.find(e.target).length ||\n\t\t\t\t\t\t\tthis.isInline\n\t\t\t\t\t\t)){\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this)\n\t\t\t\t}]\n\t\t\t];\n\t\t},\n\t\t_attachEvents: function(){\n\t\t\tthis._detachEvents();\n\t\t\tthis._applyEvents(this._events);\n\t\t},\n\t\t_detachEvents: function(){\n\t\t\tthis._unapplyEvents(this._events);\n\t\t},\n\t\t_attachSecondaryEvents: function(){\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis._applyEvents(this._secondaryEvents);\n\t\t},\n\t\t_detachSecondaryEvents: function(){\n\t\t\tthis._unapplyEvents(this._secondaryEvents);\n\t\t},\n\t\t_trigger: function(event, altdate){\n\t\t\tvar date = altdate || this.dates.get(-1),\n\t\t\t\tlocal_date = this._utc_to_local(date);\n\n\t\t\tthis.element.trigger({\n\t\t\t\ttype: event,\n\t\t\t\tdate: local_date,\n\t\t\t\tviewMode: this.viewMode,\n\t\t\t\tdates: $.map(this.dates, this._utc_to_local),\n\t\t\t\tformat: $.proxy(function(ix, format){\n\t\t\t\t\tif (arguments.length === 0){\n\t\t\t\t\t\tix = this.dates.length - 1;\n\t\t\t\t\t\tformat = this.o.format;\n\t\t\t\t\t} else if (typeof ix === 'string'){\n\t\t\t\t\t\tformat = ix;\n\t\t\t\t\t\tix = this.dates.length - 1;\n\t\t\t\t\t}\n\t\t\t\t\tformat = format || this.o.format;\n\t\t\t\t\tvar date = this.dates.get(ix);\n\t\t\t\t\treturn DPGlobal.formatDate(date, format, this.o.language);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t},\n\n\t\tshow: function(){\n\t\t\tif (this.inputField.is(':disabled') || (this.inputField.prop('readonly') && this.o.enableOnReadonly === false))\n\t\t\t\treturn;\n\t\t\tif (!this.isInline)\n\t\t\t\tthis.picker.appendTo(this.o.container);\n\t\t\tthis.place();\n\t\t\tthis.picker.show();\n\t\t\tthis._attachSecondaryEvents();\n\t\t\tthis._trigger('show');\n\t\t\tif ((window.navigator.msMaxTouchPoints || 'ontouchstart' in document) && this.o.disableTouchKeyboard) {\n\t\t\t\t$(this.element).blur();\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\thide: function(){\n\t\t\tif (this.isInline || !this.picker.is(':visible'))\n\t\t\t\treturn this;\n\t\t\tthis.focusDate = null;\n\t\t\tthis.picker.hide().detach();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.setViewMode(this.o.startView);\n\n\t\t\tif (this.o.forceParse && this.inputField.val())\n\t\t\t\tthis.setValue();\n\t\t\tthis._trigger('hide');\n\t\t\treturn this;\n\t\t},\n\n\t\tdestroy: function(){\n\t\t\tthis.hide();\n\t\t\tthis._detachEvents();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.picker.remove();\n\t\t\tdelete this.element.data().datepicker;\n\t\t\tif (!this.isInput){\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\tpaste: function(e){\n\t\t\tvar dateString;\n\t\t\tif (e.originalEvent.clipboardData && e.originalEvent.clipboardData.types\n\t\t\t\t&& $.inArray('text/plain', e.originalEvent.clipboardData.types) !== -1) {\n\t\t\t\tdateString = e.originalEvent.clipboardData.getData('text/plain');\n\t\t\t} else if (window.clipboardData) {\n\t\t\t\tdateString = window.clipboardData.getData('Text');\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.setDate(dateString);\n\t\t\tthis.update();\n\t\t\te.preventDefault();\n\t\t},\n\n\t\t_utc_to_local: function(utc){\n\t\t\tif (!utc) {\n\t\t\t\treturn utc;\n\t\t\t}\n\n\t\t\tvar local = new Date(utc.getTime() + (utc.getTimezoneOffset() * 60000));\n\n\t\t\tif (local.getTimezoneOffset() !== utc.getTimezoneOffset()) {\n\t\t\t\tlocal = new Date(utc.getTime() + (local.getTimezoneOffset() * 60000));\n\t\t\t}\n\n\t\t\treturn local;\n\t\t},\n\t\t_local_to_utc: function(local){\n\t\t\treturn local && new Date(local.getTime() - (local.getTimezoneOffset()*60000));\n\t\t},\n\t\t_zero_time: function(local){\n\t\t\treturn local && new Date(local.getFullYear(), local.getMonth(), local.getDate());\n\t\t},\n\t\t_zero_utc_time: function(utc){\n\t\t\treturn utc && UTCDate(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate());\n\t\t},\n\n\t\tgetDates: function(){\n\t\t\treturn $.map(this.dates, this._utc_to_local);\n\t\t},\n\n\t\tgetUTCDates: function(){\n\t\t\treturn $.map(this.dates, function(d){\n\t\t\t\treturn new Date(d);\n\t\t\t});\n\t\t},\n\n\t\tgetDate: function(){\n\t\t\treturn this._utc_to_local(this.getUTCDate());\n\t\t},\n\n\t\tgetUTCDate: function(){\n\t\t\tvar selected_date = this.dates.get(-1);\n\t\t\tif (selected_date !== undefined) {\n\t\t\t\treturn new Date(selected_date);\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\n\t\tclearDates: function(){\n\t\t\tthis.inputField.val('');\n\t\t\tthis._trigger('changeDate');\n\t\t\tthis.update();\n\t\t\tif (this.o.autoclose) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t},\n\n\t\tsetDates: function(){\n\t\t\tvar args = Array.isArray(arguments[0]) ? arguments[0] : arguments;\n\t\t\tthis.update.apply(this, args);\n\t\t\tthis._trigger('changeDate');\n\t\t\tthis.setValue();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetUTCDates: function(){\n\t\t\tvar args = Array.isArray(arguments[0]) ? arguments[0] : arguments;\n\t\t\tthis.setDates.apply(this, $.map(args, this._utc_to_local));\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDate: alias('setDates'),\n\t\tsetUTCDate: alias('setUTCDates'),\n\t\tremove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead'),\n\n\t\tsetValue: function(){\n\t\t\tvar formatted = this.getFormattedDate();\n\t\t\tthis.inputField.val(formatted);\n\t\t\treturn this;\n\t\t},\n\n\t\tgetFormattedDate: function(format){\n\t\t\tif (format === undefined)\n\t\t\t\tformat = this.o.format;\n\n\t\t\tvar lang = this.o.language;\n\t\t\treturn $.map(this.dates, function(d){\n\t\t\t\treturn DPGlobal.formatDate(d, format, lang);\n\t\t\t}).join(this.o.multidateSeparator);\n\t\t},\n\n\t\tgetStartDate: function(){\n\t\t\treturn this.o.startDate;\n\t\t},\n\n\t\tsetStartDate: function(startDate){\n\t\t\tthis._process_options({startDate: startDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t\treturn this;\n\t\t},\n\n\t\tgetEndDate: function(){\n\t\t\treturn this.o.endDate;\n\t\t},\n\n\t\tsetEndDate: function(endDate){\n\t\t\tthis._process_options({endDate: endDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDaysOfWeekDisabled: function(daysOfWeekDisabled){\n\t\t\tthis._process_options({daysOfWeekDisabled: daysOfWeekDisabled});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDaysOfWeekHighlighted: function(daysOfWeekHighlighted){\n\t\t\tthis._process_options({daysOfWeekHighlighted: daysOfWeekHighlighted});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDatesDisabled: function(datesDisabled){\n\t\t\tthis._process_options({datesDisabled: datesDisabled});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tplace: function(){\n\t\t\tif (this.isInline)\n\t\t\t\treturn this;\n\t\t\tvar calendarWidth = this.picker.outerWidth(),\n\t\t\t\tcalendarHeight = this.picker.outerHeight(),\n\t\t\t\tvisualPadding = 10,\n\t\t\t\tcontainer = $(this.o.container),\n\t\t\t\twindowWidth = container.width(),\n\t\t\t\tscrollTop = this.o.container === 'body' ? $(document).scrollTop() : container.scrollTop(),\n\t\t\t\tappendOffset = container.offset();\n\n\t\t\tvar parentsZindex = [0];\n\t\t\tthis.element.parents().each(function(){\n\t\t\t\tvar itemZIndex = $(this).css('z-index');\n\t\t\t\tif (itemZIndex !== 'auto' && Number(itemZIndex) !== 0) parentsZindex.push(Number(itemZIndex));\n\t\t\t});\n\t\t\tvar zIndex = Math.max.apply(Math, parentsZindex) + this.o.zIndexOffset;\n\t\t\tvar offset = this.component ? this.component.parent().offset() : this.element.offset();\n\t\t\tvar height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);\n\t\t\tvar width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);\n\t\t\tvar left = offset.left - appendOffset.left;\n\t\t\tvar top = offset.top - appendOffset.top;\n\n\t\t\tif (this.o.container !== 'body') {\n\t\t\t\ttop += scrollTop;\n\t\t\t}\n\n\t\t\tthis.picker.removeClass(\n\t\t\t\t'datepicker-orient-top datepicker-orient-bottom '+\n\t\t\t\t'datepicker-orient-right datepicker-orient-left'\n\t\t\t);\n\n\t\t\tif (this.o.orientation.x !== 'auto'){\n\t\t\t\tthis.picker.addClass('datepicker-orient-' + this.o.orientation.x);\n\t\t\t\tif (this.o.orientation.x === 'right')\n\t\t\t\t\tleft -= calendarWidth - width;\n\t\t\t}\n\t\t\t// auto x orientation is best-placement: if it crosses a window\n\t\t\t// edge, fudge it sideways\n\t\t\telse {\n\t\t\t\tif (offset.left < 0) {\n\t\t\t\t\t// component is outside the window on the left side. Move it into visible range\n\t\t\t\t\tthis.picker.addClass('datepicker-orient-left');\n\t\t\t\t\tleft -= offset.left - visualPadding;\n\t\t\t\t} else if (left + calendarWidth > windowWidth) {\n\t\t\t\t\t// the calendar passes the widow right edge. Align it to component right side\n\t\t\t\t\tthis.picker.addClass('datepicker-orient-right');\n\t\t\t\t\tleft += width - calendarWidth;\n\t\t\t\t} else {\n\t\t\t\t\tif (this.o.rtl) {\n\t\t\t\t\t\t// Default to right\n\t\t\t\t\t\tthis.picker.addClass('datepicker-orient-right');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Default to left\n\t\t\t\t\t\tthis.picker.addClass('datepicker-orient-left');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// auto y orientation is best-situation: top or bottom, no fudging,\n\t\t\t// decision based on which shows more of the calendar\n\t\t\tvar yorient = this.o.orientation.y,\n\t\t\t\ttop_overflow;\n\t\t\tif (yorient === 'auto'){\n\t\t\t\ttop_overflow = -scrollTop + top - calendarHeight;\n\t\t\t\tyorient = top_overflow < 0 ? 'bottom' : 'top';\n\t\t\t}\n\n\t\t\tthis.picker.addClass('datepicker-orient-' + yorient);\n\t\t\tif (yorient === 'top')\n\t\t\t\ttop -= calendarHeight + parseInt(this.picker.css('padding-top'));\n\t\t\telse\n\t\t\t\ttop += height;\n\n\t\t\tif (this.o.rtl) {\n\t\t\t\tvar right = windowWidth - (left + width);\n\t\t\t\tthis.picker.css({\n\t\t\t\t\ttop: top,\n\t\t\t\t\tright: right,\n\t\t\t\t\tzIndex: zIndex\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.picker.css({\n\t\t\t\t\ttop: top,\n\t\t\t\t\tleft: left,\n\t\t\t\t\tzIndex: zIndex\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\t_allow_update: true,\n\t\tupdate: function(){\n\t\t\tif (!this._allow_update)\n\t\t\t\treturn this;\n\n\t\t\tvar oldDates = this.dates.copy(),\n\t\t\t\tdates = [],\n\t\t\t\tfromArgs = false;\n\t\t\tif (arguments.length){\n\t\t\t\t$.each(arguments, $.proxy(function(i, date){\n\t\t\t\t\tif (date instanceof Date)\n\t\t\t\t\t\tdate = this._local_to_utc(date);\n\t\t\t\t\tdates.push(date);\n\t\t\t\t}, this));\n\t\t\t\tfromArgs = true;\n\t\t\t} else {\n\t\t\t\tdates = this.isInput\n\t\t\t\t\t\t? this.element.val()\n\t\t\t\t\t\t: this.element.data('date') || this.inputField.val();\n\t\t\t\tif (dates && this.o.multidate)\n\t\t\t\t\tdates = dates.split(this.o.multidateSeparator);\n\t\t\t\telse\n\t\t\t\t\tdates = [dates];\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\n\t\t\tdates = $.map(dates, $.proxy(function(date){\n\t\t\t\treturn DPGlobal.parseDate(date, this.o.format, this.o.language, this.o.assumeNearbyYear);\n\t\t\t}, this));\n\t\t\tdates = $.grep(dates, $.proxy(function(date){\n\t\t\t\treturn (\n\t\t\t\t\t!this.dateWithinRange(date) ||\n\t\t\t\t\t!date\n\t\t\t\t);\n\t\t\t}, this), true);\n\t\t\tthis.dates.replace(dates);\n\n\t\t\tif (this.o.updateViewDate) {\n\t\t\t\tif (this.dates.length)\n\t\t\t\t\tthis.viewDate = new Date(this.dates.get(-1));\n\t\t\t\telse if (this.viewDate < this.o.startDate)\n\t\t\t\t\tthis.viewDate = new Date(this.o.startDate);\n\t\t\t\telse if (this.viewDate > this.o.endDate)\n\t\t\t\t\tthis.viewDate = new Date(this.o.endDate);\n\t\t\t\telse\n\t\t\t\t\tthis.viewDate = this.o.defaultViewDate;\n\t\t\t}\n\n\t\t\tif (fromArgs){\n\t\t\t\t// setting date by clicking\n\t\t\t\tthis.setValue();\n\t\t\t\tthis.element.change();\n\t\t\t}\n\t\t\telse if (this.dates.length){\n\t\t\t\t// setting date by typing\n\t\t\t\tif (String(oldDates) !== String(this.dates) && fromArgs) {\n\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t\t\tthis.element.change();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!this.dates.length && oldDates.length) {\n\t\t\t\tthis._trigger('clearDate');\n\t\t\t\tthis.element.change();\n\t\t\t}\n\n\t\t\tthis.fill();\n\t\t\treturn this;\n\t\t},\n\n\t\tfillDow: function(){\n if (this.o.showWeekDays) {\n\t\t\tvar dowCnt = this.o.weekStart,\n\t\t\t\thtml = '<tr>';\n\t\t\tif (this.o.calendarWeeks){\n\t\t\t\thtml += '<th class=\"cw\"> </th>';\n\t\t\t}\n\t\t\twhile (dowCnt < this.o.weekStart + 7){\n\t\t\t\thtml += '<th class=\"dow';\n if ($.inArray(dowCnt, this.o.daysOfWeekDisabled) !== -1)\n html += ' disabled';\n html += '\">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>';\n\t\t\t}\n\t\t\thtml += '</tr>';\n\t\t\tthis.picker.find('.datepicker-days thead').append(html);\n }\n\t\t},\n\n\t\tfillMonths: function(){\n var localDate = this._utc_to_local(this.viewDate);\n\t\t\tvar html = '';\n\t\t\tvar focused;\n\t\t\tfor (var i = 0; i < 12; i++){\n\t\t\t\tfocused = localDate && localDate.getMonth() === i ? ' focused' : '';\n\t\t\t\thtml += '<span class=\"month' + focused + '\">' + dates[this.o.language].monthsShort[i] + '</span>';\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-months td').html(html);\n\t\t},\n\n\t\tsetRange: function(range){\n\t\t\tif (!range || !range.length)\n\t\t\t\tdelete this.range;\n\t\t\telse\n\t\t\t\tthis.range = $.map(range, function(d){\n\t\t\t\t\treturn d.valueOf();\n\t\t\t\t});\n\t\t\tthis.fill();\n\t\t},\n\n\t\tgetClassNames: function(date){\n\t\t\tvar cls = [],\n\t\t\t\tyear = this.viewDate.getUTCFullYear(),\n\t\t\t\tmonth = this.viewDate.getUTCMonth(),\n\t\t\t\ttoday = UTCToday();\n\t\t\tif (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){\n\t\t\t\tcls.push('old');\n\t\t\t} else if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){\n\t\t\t\tcls.push('new');\n\t\t\t}\n\t\t\tif (this.focusDate && date.valueOf() === this.focusDate.valueOf())\n\t\t\t\tcls.push('focused');\n\t\t\t// Compare internal UTC date with UTC today, not local today\n\t\t\tif (this.o.todayHighlight && isUTCEquals(date, today)) {\n\t\t\t\tcls.push('today');\n\t\t\t}\n\t\t\tif (this.dates.contains(date) !== -1)\n\t\t\t\tcls.push('active');\n\t\t\tif (!this.dateWithinRange(date)){\n\t\t\t\tcls.push('disabled');\n\t\t\t}\n\t\t\tif (this.dateIsDisabled(date)){\n\t\t\t\tcls.push('disabled', 'disabled-date');\n\t\t\t}\n\t\t\tif ($.inArray(date.getUTCDay(), this.o.daysOfWeekHighlighted) !== -1){\n\t\t\t\tcls.push('highlighted');\n\t\t\t}\n\n\t\t\tif (this.range){\n\t\t\t\tif (date > this.range[0] && date < this.range[this.range.length-1]){\n\t\t\t\t\tcls.push('range');\n\t\t\t\t}\n\t\t\t\tif ($.inArray(date.valueOf(), this.range) !== -1){\n\t\t\t\t\tcls.push('selected');\n\t\t\t\t}\n\t\t\t\tif (date.valueOf() === this.range[0]){\n cls.push('range-start');\n }\n if (date.valueOf() === this.range[this.range.length-1]){\n cls.push('range-end');\n }\n\t\t\t}\n\t\t\treturn cls;\n\t\t},\n\n\t\t_fill_yearsView: function(selector, cssClass, factor, year, startYear, endYear, beforeFn){\n\t\t\tvar html = '';\n\t\t\tvar step = factor / 10;\n\t\t\tvar view = this.picker.find(selector);\n\t\t\tvar startVal = Math.floor(year / factor) * factor;\n\t\t\tvar endVal = startVal + step * 9;\n\t\t\tvar focusedVal = Math.floor(this.viewDate.getFullYear() / step) * step;\n\t\t\tvar selected = $.map(this.dates, function(d){\n\t\t\t\treturn Math.floor(d.getUTCFullYear() / step) * step;\n\t\t\t});\n\n\t\t\tvar classes, tooltip, before;\n\t\t\tfor (var currVal = startVal - step; currVal <= endVal + step; currVal += step) {\n\t\t\t\tclasses = [cssClass];\n\t\t\t\ttooltip = null;\n\n\t\t\t\tif (currVal === startVal - step) {\n\t\t\t\t\tclasses.push('old');\n\t\t\t\t} else if (currVal === endVal + step) {\n\t\t\t\t\tclasses.push('new');\n\t\t\t\t}\n\t\t\t\tif ($.inArray(currVal, selected) !== -1) {\n\t\t\t\t\tclasses.push('active');\n\t\t\t\t}\n\t\t\t\tif (currVal < startYear || currVal > endYear) {\n\t\t\t\t\tclasses.push('disabled');\n\t\t\t\t}\n\t\t\t\tif (currVal === focusedVal) {\n\t\t\t\t classes.push('focused');\n }\n\n\t\t\t\tif (beforeFn !== $.noop) {\n\t\t\t\t\tbefore = beforeFn(new Date(currVal, 0, 1));\n\t\t\t\t\tif (before === undefined) {\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\t} else if (typeof before === 'boolean') {\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\t} else if (typeof before === 'string') {\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\t}\n\t\t\t\t\tif (before.enabled === false) {\n\t\t\t\t\t\tclasses.push('disabled');\n\t\t\t\t\t}\n\t\t\t\t\tif (before.classes) {\n\t\t\t\t\t\tclasses = classes.concat(before.classes.split(/\\s+/));\n\t\t\t\t\t}\n\t\t\t\t\tif (before.tooltip) {\n\t\t\t\t\t\ttooltip = before.tooltip;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\thtml += '<span class=\"' + classes.join(' ') + '\"' + (tooltip ? ' title=\"' + tooltip + '\"' : '') + '>' + currVal + '</span>';\n\t\t\t}\n\n\t\t\tview.find('.datepicker-switch').text(startVal + '-' + endVal);\n\t\t\tview.find('td').html(html);\n\t\t},\n\n\t\tfill: function(){\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth(),\n\t\t\t\tstartYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n\t\t\t\tstartMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n\t\t\t\tendYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n\t\t\t\tendMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n\t\t\t\ttodaytxt = dates[this.o.language].today || dates['en'].today || '',\n\t\t\t\tcleartxt = dates[this.o.language].clear || dates['en'].clear || '',\n titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat,\n todayDate = UTCToday(),\n titleBtnVisible = (this.o.todayBtn === true || this.o.todayBtn === 'linked') && todayDate >= this.o.startDate && todayDate <= this.o.endDate && !this.weekOfDateIsDisabled(todayDate),\n\t\t\t\ttooltip,\n\t\t\t\tbefore;\n\t\t\tif (isNaN(year) || isNaN(month))\n\t\t\t\treturn;\n\t\t\tthis.picker.find('.datepicker-days .datepicker-switch')\n\t\t\t\t\t\t.text(DPGlobal.formatDate(d, titleFormat, this.o.language));\n\t\t\tthis.picker.find('tfoot .today')\n\t\t\t\t\t\t.text(todaytxt)\n .css('display', titleBtnVisible ? 'table-cell' : 'none');\n\t\t\tthis.picker.find('tfoot .clear')\n\t\t\t\t\t\t.text(cleartxt)\n\t\t\t\t\t\t.css('display', this.o.clearBtn === true ? 'table-cell' : 'none');\n\t\t\tthis.picker.find('thead .datepicker-title')\n\t\t\t\t\t\t.text(this.o.title)\n\t\t\t\t\t\t.css('display', typeof this.o.title === 'string' && this.o.title !== '' ? 'table-cell' : 'none');\n\t\t\tthis.updateNavArrows();\n\t\t\tthis.fillMonths();\n\t\t\tvar prevMonth = UTCDate(year, month, 0),\n\t\t\t\tday = prevMonth.getUTCDate();\n\t\t\tprevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7);\n\t\t\tvar nextMonth = new Date(prevMonth);\n\t\t\tif (prevMonth.getUTCFullYear() < 100){\n nextMonth.setUTCFullYear(prevMonth.getUTCFullYear());\n }\n\t\t\tnextMonth.setUTCDate(nextMonth.getUTCDate() + 42);\n\t\t\tnextMonth = nextMonth.valueOf();\n\t\t\tvar html = [];\n\t\t\tvar weekDay, clsName;\n\t\t\twhile (prevMonth.valueOf() < nextMonth){\n\t\t\t\tweekDay = prevMonth.getUTCDay();\n\t\t\t\tif (weekDay === this.o.weekStart){\n\t\t\t\t\thtml.push('<tr>');\n\t\t\t\t\tif (this.o.calendarWeeks){\n\t\t\t\t\t\t// ISO 8601: First week contains first thursday.\n\t\t\t\t\t\t// ISO also states week starts on Monday, but we can be more abstract here.\n\t\t\t\t\t\tvar\n\t\t\t\t\t\t\t// Start of current week: based on weekstart/current date\n\t\t\t\t\t\t\tws = new Date(+prevMonth + (this.o.weekStart - weekDay - 7) % 7 * 864e5),\n\t\t\t\t\t\t\t// Thursday of this week\n\t\t\t\t\t\t\tth = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),\n\t\t\t\t\t\t\t// First Thursday of year, year from thursday\n\t\t\t\t\t\t\tyth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay()) % 7 * 864e5),\n\t\t\t\t\t\t\t// Calendar week: ms between thursdays, div ms per day, div 7 days\n\t\t\t\t\t\t\tcalWeek = (th - yth) / 864e5 / 7 + 1;\n\t\t\t\t\t\thtml.push('<td class=\"cw\">'+ calWeek +'</td>');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tclsName = this.getClassNames(prevMonth);\n\t\t\t\tclsName.push('day');\n\n\t\t\t\tvar content = prevMonth.getUTCDate();\n\n\t\t\t\tif (this.o.beforeShowDay !== $.noop){\n\t\t\t\t\tbefore = this.o.beforeShowDay(this._utc_to_local(prevMonth));\n\t\t\t\t\tif (before === undefined)\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\telse if (typeof before === 'boolean')\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\telse if (typeof before === 'string')\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\tif (before.enabled === false)\n\t\t\t\t\t\tclsName.push('disabled');\n\t\t\t\t\tif (before.classes)\n\t\t\t\t\t\tclsName = clsName.concat(before.classes.split(/\\s+/));\n\t\t\t\t\tif (before.tooltip)\n\t\t\t\t\t\ttooltip = before.tooltip;\n\t\t\t\t\tif (before.content)\n\t\t\t\t\t\tcontent = before.content;\n\t\t\t\t}\n\n\t\t\t\t//Check if uniqueSort exists (supported by jquery >=1.12 and >=2.2)\n\t\t\t\t//Fallback to unique function for older jquery versions\n\t\t\t\tif (typeof $.uniqueSort === \"function\") {\n\t\t\t\t\tclsName = $.uniqueSort(clsName);\n\t\t\t\t} else {\n\t\t\t\t\tclsName = $.unique(clsName);\n\t\t\t\t}\n\n\t\t\t\thtml.push('<td class=\"'+clsName.join(' ')+'\"' + (tooltip ? ' title=\"'+tooltip+'\"' : '') + ' data-date=\"' + prevMonth.getTime().toString() + '\">' + content + '</td>');\n\t\t\t\ttooltip = null;\n\t\t\t\tif (weekDay === this.o.weekEnd){\n\t\t\t\t\thtml.push('</tr>');\n\t\t\t\t}\n\t\t\t\tprevMonth.setUTCDate(prevMonth.getUTCDate() + 1);\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-days tbody').html(html.join(''));\n\n\t\t\tvar monthsTitle = dates[this.o.language].monthsTitle || dates['en'].monthsTitle || 'Months';\n\t\t\tvar months = this.picker.find('.datepicker-months')\n\t\t\t\t\t\t.find('.datepicker-switch')\n\t\t\t\t\t\t\t.text(this.o.maxViewMode < 2 ? monthsTitle : year)\n\t\t\t\t\t\t\t.end()\n\t\t\t\t\t\t.find('tbody span').removeClass('active');\n\n\t\t\t$.each(this.dates, function(i, d){\n\t\t\t\tif (d.getUTCFullYear() === year)\n\t\t\t\t\tmonths.eq(d.getUTCMonth()).addClass('active');\n\t\t\t});\n\n\t\t\tif (year < startYear || year > endYear){\n\t\t\t\tmonths.addClass('disabled');\n\t\t\t}\n\t\t\tif (year === startYear){\n\t\t\t\tmonths.slice(0, startMonth).addClass('disabled');\n\t\t\t}\n\t\t\tif (year === endYear){\n\t\t\t\tmonths.slice(endMonth+1).addClass('disabled');\n\t\t\t}\n\n\t\t\tif (this.o.beforeShowMonth !== $.noop){\n\t\t\t\tvar that = this;\n\t\t\t\t$.each(months, function(i, month){\n var moDate = new Date(year, i, 1);\n var before = that.o.beforeShowMonth(moDate);\n\t\t\t\t\tif (before === undefined)\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\telse if (typeof before === 'boolean')\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\telse if (typeof before === 'string')\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\tif (before.enabled === false && !$(month).hasClass('disabled'))\n\t\t\t\t\t $(month).addClass('disabled');\n\t\t\t\t\tif (before.classes)\n\t\t\t\t\t $(month).addClass(before.classes);\n\t\t\t\t\tif (before.tooltip)\n\t\t\t\t\t $(month).prop('title', before.tooltip);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Generating decade/years picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-years',\n\t\t\t\t'year',\n\t\t\t\t10,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowYear\n\t\t\t);\n\n\t\t\t// Generating century/decades picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-decades',\n\t\t\t\t'decade',\n\t\t\t\t100,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowDecade\n\t\t\t);\n\n\t\t\t// Generating millennium/centuries picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-centuries',\n\t\t\t\t'century',\n\t\t\t\t1000,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowCentury\n\t\t\t);\n\t\t},\n\n\t\tupdateNavArrows: function(){\n\t\t\tif (!this._allow_update)\n\t\t\t\treturn;\n\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth(),\n\t\t\t\tstartYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n\t\t\t\tstartMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n\t\t\t\tendYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n\t\t\t\tendMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n\t\t\t\tprevIsDisabled,\n\t\t\t\tnextIsDisabled,\n\t\t\t\tfactor = 1;\n\t\t\tswitch (this.viewMode){\n\t\t\t\tcase 4:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 3:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 2:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 1:\n\t\t\t\t\tprevIsDisabled = Math.floor(year / factor) * factor <= startYear;\n\t\t\t\t\tnextIsDisabled = Math.floor(year / factor) * factor + factor > endYear;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0:\n\t\t\t\t\tprevIsDisabled = year <= startYear && month <= startMonth;\n\t\t\t\t\tnextIsDisabled = year >= endYear && month >= endMonth;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.picker.find('.prev').toggleClass('disabled', prevIsDisabled);\n\t\t\tthis.picker.find('.next').toggleClass('disabled', nextIsDisabled);\n\t\t},\n\n\t\tclick: function(e){\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tvar target, dir, day, year, month;\n\t\t\ttarget = $(e.target);\n\n\t\t\t// Clicked on the switch\n\t\t\tif (target.hasClass('datepicker-switch') && this.viewMode !== this.o.maxViewMode){\n\t\t\t\tthis.setViewMode(this.viewMode + 1);\n\t\t\t}\n\n\t\t\t// Clicked on today button\n\t\t\tif (target.hasClass('today') && !target.hasClass('day')){\n\t\t\t\tthis.setViewMode(0);\n\t\t\t\tthis._setDate(UTCToday(), this.o.todayBtn === 'linked' ? null : 'view');\n\t\t\t}\n\n\t\t\t// Clicked on clear button\n\t\t\tif (target.hasClass('clear')){\n\t\t\t\tthis.clearDates();\n\t\t\t}\n\n\t\t\tif (!target.hasClass('disabled')){\n\t\t\t\t// Clicked on a month, year, decade, century\n\t\t\t\tif (target.hasClass('month')\n\t\t\t\t\t\t|| target.hasClass('year')\n\t\t\t\t\t\t|| target.hasClass('decade')\n\t\t\t\t\t\t|| target.hasClass('century')) {\n\t\t\t\t\tthis.viewDate.setUTCDate(1);\n\n\t\t\t\t\tday = 1;\n\t\t\t\t\tif (this.viewMode === 1){\n\t\t\t\t\t\tmonth = target.parent().find('span').index(target);\n\t\t\t\t\t\tyear = this.viewDate.getUTCFullYear();\n\t\t\t\t\t\tthis.viewDate.setUTCMonth(month);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmonth = 0;\n\t\t\t\t\t\tyear = Number(target.text());\n\t\t\t\t\t\tthis.viewDate.setUTCFullYear(year);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._trigger(DPGlobal.viewModes[this.viewMode - 1].e, this.viewDate);\n\n\t\t\t\t\tif (this.viewMode === this.o.minViewMode){\n\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.setViewMode(this.viewMode - 1);\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.picker.is(':visible') && this._focused_from){\n\t\t\t\tthis._focused_from.focus();\n\t\t\t}\n\t\t\tdelete this._focused_from;\n\t\t},\n\n\t\tdayCellClick: function(e){\n\t\t\tvar $target = $(e.currentTarget);\n\t\t\tvar timestamp = $target.data('date');\n\t\t\tvar date = new Date(timestamp);\n\n\t\t\tif (this.o.updateViewDate) {\n\t\t\t\tif (date.getUTCFullYear() !== this.viewDate.getUTCFullYear()) {\n\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n\t\t\t\t}\n\n\t\t\t\tif (date.getUTCMonth() !== this.viewDate.getUTCMonth()) {\n\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._setDate(date);\n\t\t},\n\n\t\t// Clicked on prev or next\n\t\tnavArrowsClick: function(e){\n\t\t\tvar $target = $(e.currentTarget);\n\t\t\tvar dir = $target.hasClass('prev') ? -1 : 1;\n\t\t\tif (this.viewMode !== 0){\n\t\t\t\tdir *= DPGlobal.viewModes[this.viewMode].navStep * 12;\n\t\t\t}\n\t\t\tthis.viewDate = this.moveMonth(this.viewDate, dir);\n\t\t\tthis._trigger(DPGlobal.viewModes[this.viewMode].e, this.viewDate);\n\t\t\tthis.fill();\n\t\t},\n\n\t\t_toggle_multidate: function(date){\n\t\t\tvar ix = this.dates.contains(date);\n\t\t\tif (!date){\n\t\t\t\tthis.dates.clear();\n\t\t\t}\n\n\t\t\tif (ix !== -1){\n\t\t\t\tif (this.o.multidate === true || this.o.multidate > 1 || this.o.toggleActive){\n\t\t\t\t\tthis.dates.remove(ix);\n\t\t\t\t}\n\t\t\t} else if (this.o.multidate === false) {\n\t\t\t\tthis.dates.clear();\n\t\t\t\tthis.dates.push(date);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.dates.push(date);\n\t\t\t}\n\n\t\t\tif (typeof this.o.multidate === 'number')\n\t\t\t\twhile (this.dates.length > this.o.multidate)\n\t\t\t\t\tthis.dates.remove(0);\n\t\t},\n\n\t\t_setDate: function(date, which){\n\t\t\tif (!which || which === 'date')\n\t\t\t\tthis._toggle_multidate(date && new Date(date));\n\t\t\tif ((!which && this.o.updateViewDate) || which === 'view')\n\t\t\t\tthis.viewDate = date && new Date(date);\n\n\t\t\tthis.fill();\n\t\t\tthis.setValue();\n\t\t\tif (!which || which !== 'view') {\n\t\t\t\tthis._trigger('changeDate');\n\t\t\t}\n\t\t\tthis.inputField.trigger('change');\n\t\t\tif (this.o.autoclose && (!which || which === 'date')){\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t},\n\n\t\tmoveDay: function(date, dir){\n\t\t\tvar newDate = new Date(date);\n\t\t\tnewDate.setUTCDate(date.getUTCDate() + dir);\n\n\t\t\treturn newDate;\n\t\t},\n\n\t\tmoveWeek: function(date, dir){\n\t\t\treturn this.moveDay(date, dir * 7);\n\t\t},\n\n\t\tmoveMonth: function(date, dir){\n\t\t\tif (!isValidDate(date))\n\t\t\t\treturn this.o.defaultViewDate;\n\t\t\tif (!dir)\n\t\t\t\treturn date;\n\t\t\tvar new_date = new Date(date.valueOf()),\n\t\t\t\tday = new_date.getUTCDate(),\n\t\t\t\tmonth = new_date.getUTCMonth(),\n\t\t\t\tmag = Math.abs(dir),\n\t\t\t\tnew_month, test;\n\t\t\tdir = dir > 0 ? 1 : -1;\n\t\t\tif (mag === 1){\n\t\t\t\ttest = dir === -1\n\t\t\t\t\t// If going back one month, make sure month is not current month\n\t\t\t\t\t// (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t? function(){\n\t\t\t\t\t\treturn new_date.getUTCMonth() === month;\n\t\t\t\t\t}\n\t\t\t\t\t// If going forward one month, make sure month is as expected\n\t\t\t\t\t// (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t: function(){\n\t\t\t\t\t\treturn new_date.getUTCMonth() !== new_month;\n\t\t\t\t\t};\n\t\t\t\tnew_month = month + dir;\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t\t// Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11\n\t\t\t\tnew_month = (new_month + 12) % 12;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// For magnitudes >1, move one month at a time...\n\t\t\t\tfor (var i=0; i < mag; i++)\n\t\t\t\t\t// ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...\n\t\t\t\t\tnew_date = this.moveMonth(new_date, dir);\n\t\t\t\t// ...then reset the day, keeping it in the new month\n\t\t\t\tnew_month = new_date.getUTCMonth();\n\t\t\t\tnew_date.setUTCDate(day);\n\t\t\t\ttest = function(){\n\t\t\t\t\treturn new_month !== new_date.getUTCMonth();\n\t\t\t\t};\n\t\t\t}\n\t\t\t// Common date-resetting loop -- if date is beyond end of month, make it\n\t\t\t// end of month\n\t\t\twhile (test()){\n\t\t\t\tnew_date.setUTCDate(--day);\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t}\n\t\t\treturn new_date;\n\t\t},\n\n\t\tmoveYear: function(date, dir){\n\t\t\treturn this.moveMonth(date, dir*12);\n\t\t},\n\n\t\tmoveAvailableDate: function(date, dir, fn){\n\t\t\tdo {\n\t\t\t\tdate = this[fn](date, dir);\n\n\t\t\t\tif (!this.dateWithinRange(date))\n\t\t\t\t\treturn false;\n\n\t\t\t\tfn = 'moveDay';\n\t\t\t}\n\t\t\twhile (this.dateIsDisabled(date));\n\n\t\t\treturn date;\n\t\t},\n\n\t\tweekOfDateIsDisabled: function(date){\n\t\t\treturn $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1;\n\t\t},\n\n\t\tdateIsDisabled: function(date){\n\t\t\treturn (\n\t\t\t\tthis.weekOfDateIsDisabled(date) ||\n\t\t\t\t$.grep(this.o.datesDisabled, function(d){\n\t\t\t\t\treturn isUTCEquals(date, d);\n\t\t\t\t}).length > 0\n\t\t\t);\n\t\t},\n\n\t\tdateWithinRange: function(date){\n\t\t\treturn date >= this.o.startDate && date <= this.o.endDate;\n\t\t},\n\n\t\tkeydown: function(e){\n\t\t\tif (!this.picker.is(':visible')){\n\t\t\t\tif (e.keyCode === 40 || e.keyCode === 27) { // allow down to re-show picker\n\t\t\t\t\tthis.show();\n\t\t\t\t\te.stopPropagation();\n }\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar dateChanged = false,\n\t\t\t\tdir, newViewDate,\n\t\t\t\tfocusDate = this.focusDate || this.viewDate;\n\t\t\tswitch (e.keyCode){\n\t\t\t\tcase 27: // escape\n\t\t\t\t\tif (this.focusDate){\n\t\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.hide();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37: // left\n\t\t\t\tcase 38: // up\n\t\t\t\tcase 39: // right\n\t\t\t\tcase 40: // down\n\t\t\t\t\tif (!this.o.keyboardNavigation || this.o.daysOfWeekDisabled.length === 7)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdir = e.keyCode === 37 || e.keyCode === 38 ? -1 : 1;\n if (this.viewMode === 0) {\n \t\t\t\t\tif (e.ctrlKey){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n\n \t\t\t\t\t\tif (newViewDate)\n \t\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n \t\t\t\t\t} else if (e.shiftKey){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n\n \t\t\t\t\t\tif (newViewDate)\n \t\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n \t\t\t\t\t} else if (e.keyCode === 37 || e.keyCode === 39){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveDay');\n \t\t\t\t\t} else if (!this.weekOfDateIsDisabled(focusDate)){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveWeek');\n \t\t\t\t\t}\n } else if (this.viewMode === 1) {\n if (e.keyCode === 38 || e.keyCode === 40) {\n dir = dir * 4;\n }\n newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n } else if (this.viewMode === 2) {\n if (e.keyCode === 38 || e.keyCode === 40) {\n dir = dir * 4;\n }\n newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n }\n\t\t\t\t\tif (newViewDate){\n\t\t\t\t\t\tthis.focusDate = this.viewDate = newViewDate;\n\t\t\t\t\t\tthis.setValue();\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 13: // enter\n\t\t\t\t\tif (!this.o.forceParse)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tfocusDate = this.focusDate || this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tif (this.o.keyboardNavigation) {\n\t\t\t\t\t\tthis._toggle_multidate(focusDate);\n\t\t\t\t\t\tdateChanged = true;\n\t\t\t\t\t}\n\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis.setValue();\n\t\t\t\t\tthis.fill();\n\t\t\t\t\tif (this.picker.is(':visible')){\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tif (this.o.autoclose)\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 9: // tab\n\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis.fill();\n\t\t\t\t\tthis.hide();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (dateChanged){\n\t\t\t\tif (this.dates.length)\n\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t\telse\n\t\t\t\t\tthis._trigger('clearDate');\n\t\t\t\tthis.inputField.trigger('change');\n\t\t\t}\n\t\t},\n\n\t\tsetViewMode: function(viewMode){\n\t\t\tthis.viewMode = viewMode;\n\t\t\tthis.picker\n\t\t\t\t.children('div')\n\t\t\t\t.hide()\n\t\t\t\t.filter('.datepicker-' + DPGlobal.viewModes[this.viewMode].clsName)\n\t\t\t\t\t.show();\n\t\t\tthis.updateNavArrows();\n this._trigger('changeViewMode', new Date(this.viewDate));\n\t\t}\n\t};\n\n\tvar DateRangePicker = function(element, options){\n\t\t$.data(element, 'datepicker', this);\n\t\tthis.element = $(element);\n\t\tthis.inputs = $.map(options.inputs, function(i){\n\t\t\treturn i.jquery ? i[0] : i;\n\t\t});\n\t\tdelete options.inputs;\n\n\t\tthis.keepEmptyValues = options.keepEmptyValues;\n\t\tdelete options.keepEmptyValues;\n\n\t\tdatepickerPlugin.call($(this.inputs), options)\n\t\t\t.on('changeDate', $.proxy(this.dateUpdated, this));\n\n\t\tthis.pickers = $.map(this.inputs, function(i){\n\t\t\treturn $.data(i, 'datepicker');\n\t\t});\n\t\tthis.updateDates();\n\t};\n\tDateRangePicker.prototype = {\n\t\tupdateDates: function(){\n\t\t\tthis.dates = $.map(this.pickers, function(i){\n\t\t\t\treturn i.getUTCDate();\n\t\t\t});\n\t\t\tthis.updateRanges();\n\t\t},\n\t\tupdateRanges: function(){\n\t\t\tvar range = $.map(this.dates, function(d){\n\t\t\t\treturn d.valueOf();\n\t\t\t});\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tp.setRange(range);\n\t\t\t});\n\t\t},\n\t\tclearDates: function(){\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tp.clearDates();\n\t\t\t});\n\t\t},\n\t\tdateUpdated: function(e){\n\t\t\t// `this.updating` is a workaround for preventing infinite recursion\n\t\t\t// between `changeDate` triggering and `setUTCDate` calling. Until\n\t\t\t// there is a better mechanism.\n\t\t\tif (this.updating)\n\t\t\t\treturn;\n\t\t\tthis.updating = true;\n\n\t\t\tvar dp = $.data(e.target, 'datepicker');\n\n\t\t\tif (dp === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar new_date = dp.getUTCDate(),\n\t\t\t\tkeep_empty_values = this.keepEmptyValues,\n\t\t\t\ti = $.inArray(e.target, this.inputs),\n\t\t\t\tj = i - 1,\n\t\t\t\tk = i + 1,\n\t\t\t\tl = this.inputs.length;\n\t\t\tif (i === -1)\n\t\t\t\treturn;\n\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tif (!p.getUTCDate() && (p === dp || !keep_empty_values))\n\t\t\t\t\tp.setUTCDate(new_date);\n\t\t\t});\n\n\t\t\tif (new_date < this.dates[j]){\n\t\t\t\t// Date being moved earlier/left\n\t\t\t\twhile (j >= 0 && new_date < this.dates[j] && (this.pickers[j].element.val() || \"\").length > 0) {\n\t\t\t\t\tthis.pickers[j--].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t} else if (new_date > this.dates[k]){\n\t\t\t\t// Date being moved later/right\n\t\t\t\twhile (k < l && new_date > this.dates[k] && (this.pickers[k].element.val() || \"\").length > 0) {\n\t\t\t\t\tthis.pickers[k++].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.updateDates();\n\n\t\t\tdelete this.updating;\n\t\t},\n\t\tdestroy: function(){\n\t\t\t$.map(this.pickers, function(p){ p.destroy(); });\n\t\t\t$(this.inputs).off('changeDate', this.dateUpdated);\n\t\t\tdelete this.element.data().datepicker;\n\t\t},\n\t\tremove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead')\n\t};\n\n\tfunction opts_from_el(el, prefix){\n\t\t// Derive options from element data-attrs\n\t\tvar data = $(el).data(),\n\t\t\tout = {}, inkey,\n\t\t\treplace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');\n\t\tprefix = new RegExp('^' + prefix.toLowerCase());\n\t\tfunction re_lower(_,a){\n\t\t\treturn a.toLowerCase();\n\t\t}\n\t\tfor (var key in data)\n\t\t\tif (prefix.test(key)){\n\t\t\t\tinkey = key.replace(replace, re_lower);\n\t\t\t\tout[inkey] = data[key];\n\t\t\t}\n\t\treturn out;\n\t}\n\n\tfunction opts_from_locale(lang){\n\t\t// Derive options from locale plugins\n\t\tvar out = {};\n\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t// fallback to 2 letter code eg \"de\"\n\t\tif (!dates[lang]){\n\t\t\tlang = lang.split('-')[0];\n\t\t\tif (!dates[lang])\n\t\t\t\treturn;\n\t\t}\n\t\tvar d = dates[lang];\n\t\t$.each(locale_opts, function(i,k){\n\t\t\tif (k in d)\n\t\t\t\tout[k] = d[k];\n\t\t});\n\t\treturn out;\n\t}\n\n\tvar old = $.fn.datepicker;\n\tvar datepickerPlugin = function(option){\n\t\tvar args = Array.apply(null, arguments);\n\t\targs.shift();\n\t\tvar internal_return;\n\t\tthis.each(function(){\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('datepicker'),\n\t\t\t\toptions = typeof option === 'object' && option;\n\t\t\tif (!data){\n\t\t\t\tvar elopts = opts_from_el(this, 'date'),\n\t\t\t\t\t// Preliminary otions\n\t\t\t\t\txopts = $.extend({}, defaults, elopts, options),\n\t\t\t\t\tlocopts = opts_from_locale(xopts.language),\n\t\t\t\t\t// Options priority: js args, data-attrs, locales, defaults\n\t\t\t\t\topts = $.extend({}, defaults, locopts, elopts, options);\n\t\t\t\tif ($this.hasClass('input-daterange') || opts.inputs){\n\t\t\t\t\t$.extend(opts, {\n\t\t\t\t\t\tinputs: opts.inputs || $this.find('input').toArray()\n\t\t\t\t\t});\n\t\t\t\t\tdata = new DateRangePicker(this, opts);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdata = new Datepicker(this, opts);\n\t\t\t\t}\n\t\t\t\t$this.data('datepicker', data);\n\t\t\t}\n\t\t\tif (typeof option === 'string' && typeof data[option] === 'function'){\n\t\t\t\tinternal_return = data[option].apply(data, args);\n\t\t\t}\n\t\t});\n\n\t\tif (\n\t\t\tinternal_return === undefined ||\n\t\t\tinternal_return instanceof Datepicker ||\n\t\t\tinternal_return instanceof DateRangePicker\n\t\t)\n\t\t\treturn this;\n\n\t\tif (this.length > 1)\n\t\t\tthrow new Error('Using only allowed for the collection of a single element (' + option + ' function)');\n\t\telse\n\t\t\treturn internal_return;\n\t};\n\t$.fn.datepicker = datepickerPlugin;\n\n\tvar defaults = $.fn.datepicker.defaults = {\n\t\tassumeNearbyYear: false,\n\t\tautoclose: false,\n\t\tbeforeShowDay: $.noop,\n\t\tbeforeShowMonth: $.noop,\n\t\tbeforeShowYear: $.noop,\n\t\tbeforeShowDecade: $.noop,\n\t\tbeforeShowCentury: $.noop,\n\t\tcalendarWeeks: false,\n\t\tclearBtn: false,\n\t\ttoggleActive: false,\n\t\tdaysOfWeekDisabled: [],\n\t\tdaysOfWeekHighlighted: [],\n\t\tdatesDisabled: [],\n\t\tendDate: Infinity,\n\t\tforceParse: true,\n\t\tformat: 'mm/dd/yyyy',\n\t\tisInline: null,\n\t\tkeepEmptyValues: false,\n\t\tkeyboardNavigation: true,\n\t\tlanguage: 'en',\n\t\tminViewMode: 0,\n\t\tmaxViewMode: 4,\n\t\tmultidate: false,\n\t\tmultidateSeparator: ',',\n\t\torientation: \"auto\",\n\t\trtl: false,\n\t\tstartDate: -Infinity,\n\t\tstartView: 0,\n\t\ttodayBtn: false,\n\t\ttodayHighlight: false,\n\t\tupdateViewDate: true,\n\t\tweekStart: 0,\n\t\tdisableTouchKeyboard: false,\n\t\tenableOnReadonly: true,\n\t\tshowOnFocus: true,\n\t\tzIndexOffset: 10,\n\t\tcontainer: 'body',\n\t\timmediateUpdates: false,\n\t\ttitle: '',\n\t\ttemplates: {\n\t\t\tleftArrow: '«',\n\t\t\trightArrow: '»'\n\t\t},\n showWeekDays: true\n\t};\n\tvar locale_opts = $.fn.datepicker.locale_opts = [\n\t\t'format',\n\t\t'rtl',\n\t\t'weekStart'\n\t];\n\t$.fn.datepicker.Constructor = Datepicker;\n\tvar dates = $.fn.datepicker.dates = {\n\t\ten: {\n\t\t\tdays: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t\t\tdaysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n\t\t\tdaysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n\t\t\tmonths: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\t\t\ttoday: \"Today\",\n\t\t\tclear: \"Clear\",\n\t\t\ttitleFormat: \"MM yyyy\"\n\t\t}\n\t};\n\n\tvar DPGlobal = {\n\t\tviewModes: [\n\t\t\t{\n\t\t\t\tnames: ['days', 'month'],\n\t\t\t\tclsName: 'days',\n\t\t\t\te: 'changeMonth'\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['months', 'year'],\n\t\t\t\tclsName: 'months',\n\t\t\t\te: 'changeYear',\n\t\t\t\tnavStep: 1\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['years', 'decade'],\n\t\t\t\tclsName: 'years',\n\t\t\t\te: 'changeDecade',\n\t\t\t\tnavStep: 10\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['decades', 'century'],\n\t\t\t\tclsName: 'decades',\n\t\t\t\te: 'changeCentury',\n\t\t\t\tnavStep: 100\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['centuries', 'millennium'],\n\t\t\t\tclsName: 'centuries',\n\t\t\t\te: 'changeMillennium',\n\t\t\t\tnavStep: 1000\n\t\t\t}\n\t\t],\n\t\tvalidParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,\n\t\tnonpunctuation: /[^ -\\/:-@\\u5e74\\u6708\\u65e5\\[-`{-~\\t\\n\\r]+/g,\n\t\tparseFormat: function(format){\n\t\t\tif (typeof format.toValue === 'function' && typeof format.toDisplay === 'function')\n return format;\n // IE treats \\0 as a string end in inputs (truncating the value),\n\t\t\t// so it's a bad format delimiter, anyway\n\t\t\tvar separators = format.replace(this.validParts, '\\0').split('\\0'),\n\t\t\t\tparts = format.match(this.validParts);\n\t\t\tif (!separators || !separators.length || !parts || parts.length === 0){\n\t\t\t\tthrow new Error(\"Invalid date format.\");\n\t\t\t}\n\t\t\treturn {separators: separators, parts: parts};\n\t\t},\n\t\tparseDate: function(date, format, language, assumeNearby){\n\t\t\tif (!date)\n\t\t\t\treturn undefined;\n\t\t\tif (date instanceof Date)\n\t\t\t\treturn date;\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tif (format.toValue)\n\t\t\t\treturn format.toValue(date, format, language);\n\t\t\tvar fn_map = {\n\t\t\t\t\td: 'moveDay',\n\t\t\t\t\tm: 'moveMonth',\n\t\t\t\t\tw: 'moveWeek',\n\t\t\t\t\ty: 'moveYear'\n\t\t\t\t},\n\t\t\t\tdateAliases = {\n\t\t\t\t\tyesterday: '-1d',\n\t\t\t\t\ttoday: '+0d',\n\t\t\t\t\ttomorrow: '+1d'\n\t\t\t\t},\n\t\t\t\tparts, part, dir, i, fn;\n\t\t\tif (date in dateAliases){\n\t\t\t\tdate = dateAliases[date];\n\t\t\t}\n\t\t\tif (/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/i.test(date)){\n\t\t\t\tparts = date.match(/([\\-+]\\d+)([dmwy])/gi);\n\t\t\t\tdate = new Date();\n\t\t\t\tfor (i=0; i < parts.length; i++){\n\t\t\t\t\tpart = parts[i].match(/([\\-+]\\d+)([dmwy])/i);\n\t\t\t\t\tdir = Number(part[1]);\n\t\t\t\t\tfn = fn_map[part[2].toLowerCase()];\n\t\t\t\t\tdate = Datepicker.prototype[fn](date, dir);\n\t\t\t\t}\n\t\t\t\treturn Datepicker.prototype._zero_utc_time(date);\n\t\t\t}\n\n\t\t\tparts = date && date.match(this.nonpunctuation) || [];\n\n\t\t\tfunction applyNearbyYear(year, threshold){\n\t\t\t\tif (threshold === true)\n\t\t\t\t\tthreshold = 10;\n\n\t\t\t\t// if year is 2 digits or less, than the user most likely is trying to get a recent century\n\t\t\t\tif (year < 100){\n\t\t\t\t\tyear += 2000;\n\t\t\t\t\t// if the new year is more than threshold years in advance, use last century\n\t\t\t\t\tif (year > ((new Date()).getFullYear()+threshold)){\n\t\t\t\t\t\tyear -= 100;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn year;\n\t\t\t}\n\n\t\t\tvar parsed = {},\n\t\t\t\tsetters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],\n\t\t\t\tsetters_map = {\n\t\t\t\t\tyyyy: function(d,v){\n\t\t\t\t\t\treturn d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v);\n\t\t\t\t\t},\n\t\t\t\t\tm: function(d,v){\n\t\t\t\t\t\tif (isNaN(d))\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\tv -= 1;\n\t\t\t\t\t\twhile (v < 0) v += 12;\n\t\t\t\t\t\tv %= 12;\n\t\t\t\t\t\td.setUTCMonth(v);\n\t\t\t\t\t\twhile (d.getUTCMonth() !== v)\n\t\t\t\t\t\t\td.setUTCDate(d.getUTCDate()-1);\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t},\n\t\t\t\t\td: function(d,v){\n\t\t\t\t\t\treturn d.setUTCDate(v);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tval, filtered;\n\t\t\tsetters_map['yy'] = setters_map['yyyy'];\n\t\t\tsetters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\n\t\t\tsetters_map['dd'] = setters_map['d'];\n\t\t\tdate = UTCToday();\n\t\t\tvar fparts = format.parts.slice();\n\t\t\t// Remove noop parts\n\t\t\tif (parts.length !== fparts.length){\n\t\t\t\tfparts = $(fparts).filter(function(i,p){\n\t\t\t\t\treturn $.inArray(p, setters_order) !== -1;\n\t\t\t\t}).toArray();\n\t\t\t}\n\t\t\t// Process remainder\n\t\t\tfunction match_part(){\n\t\t\t\tvar m = this.slice(0, parts[i].length),\n\t\t\t\t\tp = parts[i].slice(0, m.length);\n\t\t\t\treturn m.toLowerCase() === p.toLowerCase();\n\t\t\t}\n\t\t\tif (parts.length === fparts.length){\n\t\t\t\tvar cnt;\n\t\t\t\tfor (i=0, cnt = fparts.length; i < cnt; i++){\n\t\t\t\t\tval = parseInt(parts[i], 10);\n\t\t\t\t\tpart = fparts[i];\n\t\t\t\t\tif (isNaN(val)){\n\t\t\t\t\t\tswitch (part){\n\t\t\t\t\t\t\tcase 'MM':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].months).filter(match_part);\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].months) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'M':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].monthsShort).filter(match_part);\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].monthsShort) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tparsed[part] = val;\n\t\t\t\t}\n\t\t\t\tvar _date, s;\n\t\t\t\tfor (i=0; i < setters_order.length; i++){\n\t\t\t\t\ts = setters_order[i];\n\t\t\t\t\tif (s in parsed && !isNaN(parsed[s])){\n\t\t\t\t\t\t_date = new Date(date);\n\t\t\t\t\t\tsetters_map[s](_date, parsed[s]);\n\t\t\t\t\t\tif (!isNaN(_date))\n\t\t\t\t\t\t\tdate = _date;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn date;\n\t\t},\n\t\tformatDate: function(date, format, language){\n\t\t\tif (!date)\n\t\t\t\treturn '';\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tif (format.toDisplay)\n return format.toDisplay(date, format, language);\n var val = {\n\t\t\t\td: date.getUTCDate(),\n\t\t\t\tD: dates[language].daysShort[date.getUTCDay()],\n\t\t\t\tDD: dates[language].days[date.getUTCDay()],\n\t\t\t\tm: date.getUTCMonth() + 1,\n\t\t\t\tM: dates[language].monthsShort[date.getUTCMonth()],\n\t\t\t\tMM: dates[language].months[date.getUTCMonth()],\n\t\t\t\tyy: date.getUTCFullYear().toString().substring(2),\n\t\t\t\tyyyy: date.getUTCFullYear()\n\t\t\t};\n\t\t\tval.dd = (val.d < 10 ? '0' : '') + val.d;\n\t\t\tval.mm = (val.m < 10 ? '0' : '') + val.m;\n\t\t\tdate = [];\n\t\t\tvar seps = $.extend([], format.separators);\n\t\t\tfor (var i=0, cnt = format.parts.length; i <= cnt; i++){\n\t\t\t\tif (seps.length)\n\t\t\t\t\tdate.push(seps.shift());\n\t\t\t\tdate.push(val[format.parts[i]]);\n\t\t\t}\n\t\t\treturn date.join('');\n\t\t},\n\t\theadTemplate: '<thead>'+\n\t\t\t '<tr>'+\n\t\t\t '<th colspan=\"7\" class=\"datepicker-title\"></th>'+\n\t\t\t '</tr>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th class=\"prev\">'+defaults.templates.leftArrow+'</th>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"5\" class=\"datepicker-switch\"></th>'+\n\t\t\t\t\t\t\t\t'<th class=\"next\">'+defaults.templates.rightArrow+'</th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t'</thead>',\n\t\tcontTemplate: '<tbody><tr><td colspan=\"7\"></td></tr></tbody>',\n\t\tfootTemplate: '<tfoot>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"7\" class=\"today\"></th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"7\" class=\"clear\"></th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t'</tfoot>'\n\t};\n\tDPGlobal.template = '<div class=\"datepicker\">'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-days\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\t'<tbody></tbody>'+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-months\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-years\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-decades\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-centuries\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t'</div>';\n\n\t$.fn.datepicker.DPGlobal = DPGlobal;\n\n\n\t/* DATEPICKER NO CONFLICT\n\t* =================== */\n\n\t$.fn.datepicker.noConflict = function(){\n\t\t$.fn.datepicker = old;\n\t\treturn this;\n\t};\n\n\t/* DATEPICKER VERSION\n\t * =================== */\n\t$.fn.datepicker.version = '1.10.0';\n\n\t$.fn.datepicker.deprecated = function(msg){\n\t\tvar console = window.console;\n\t\tif (console && console.warn) {\n\t\t\tconsole.warn('DEPRECATED: ' + msg);\n\t\t}\n\t};\n\n\n\t/* DATEPICKER DATA-API\n\t* ================== */\n\n\t$(document).on(\n\t\t'focus.datepicker.data-api click.datepicker.data-api',\n\t\t'[data-provide=\"datepicker\"]',\n\t\tfunction(e){\n\t\t\tvar $this = $(this);\n\t\t\tif ($this.data('datepicker'))\n\t\t\t\treturn;\n\t\t\te.preventDefault();\n\t\t\t// component click requires us to explicitly show it\n\t\t\tdatepickerPlugin.call($this, 'show');\n\t\t}\n\t);\n\t$(function(){\n\t\tdatepickerPlugin.call($('[data-provide=\"datepicker-inline\"]'));\n\t});\n\n}));\n"],"names":["Symbol","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread2","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_typeof","obj","iterator","constructor","prototype","value","configurable","writable","_extends","assign","hasOwnProperty","call","this","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","userAgent","pattern","window","navigator","match","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","on","el","event","fn","addEventListener","off","removeEventListener","matches","selector","substring","msMatchesSelector","webkitMatchesSelector","_","getParentOrHost","host","document","nodeType","parentNode","closest","ctx","includeCTX","_throttleTimeout","R_SPACE","toggleClass","name","state","classList","className","replace","css","prop","val","style","defaultView","getComputedStyle","currentStyle","matrix","selfOnly","appliedTransforms","transform","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","find","tagName","list","getElementsByTagName","n","getWindowScrollingElement","scrollingElement","documentElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","getBoundingClientRect","elRect","top","left","bottom","right","height","width","innerHeight","innerWidth","containerRect","parseInt","elMatrix","scaleX","a","scaleY","d","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","options","includeDragEl","currentChild","children","display","Sortable","ghost","dragged","draggable","lastChild","last","lastElementChild","previousElementSibling","index","nodeName","toUpperCase","clone","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","body","isRectEqual","rect1","rect2","Math","round","throttle","callback","ms","args","setTimeout","scrollBy","x","y","Polymer","$","jQuery","Zepto","dom","cloneNode","getChildContainingRectFromElement","ghostEl","rect","Array","from","child","_rect$left","_rect$top","_rect$right","_rect$bottom","animated","childRect","min","Infinity","max","expando","Date","getTime","AnimationStateManager","animationCallbackId","animationStates","captureAnimationState","animation","slice","fromRect","thisAnimationDuration","childMatrix","f","e","addAnimationState","removeAnimationState","splice","arr","Number","indexOfObject","animateAll","_this","clearTimeout","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","sqrt","pow","calculateRealTime","animate","animationResetTimer","currentRect","duration","translateX","translateY","animatingX","animatingY","forRepaintDummy","offsetWidth","repaint","easing","plugins","defaults","initializeByDefault","PluginManager","mount","plugin","option","p","pluginName","concat","pluginEvent","eventName","sortable","evt","eventCanceled","cancel","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","dispatchEvent","_ref","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","charAt","substr","CustomEvent","createEvent","initEvent","bubbles","cancelable","to","item","pullMode","lastPutMode","undefined","allEventProperties","_excluded","data","bind","dragEl","parentEl","nextEl","lastDownEl","cloneHidden","dragStarted","moved","activeSortable","active","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","info","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","createElement","supportCssPointerEvents","cssText","pointerEvents","_detectDirection","elCSS","elWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","split","touchingSideChild2","clear","_prepareGroup","toFn","pull","sameGroup","group","otherGroup","join","originalGroup","checkPull","checkPut","put","revertClone","preventDefault","stopPropagation","stopImmediatePropagation","nearestEmptyInsertDetectEvent","touches","nearest","clientX","clientY","some","threshold","emptyInsertThreshold","insideHorizontally","insideVertically","ret","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","toString","sort","disabled","store","handle","test","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","direction","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","setData","dataTransfer","textContent","dropBubble","dragoverBubble","dataIdAttr","delay","delayOnTouchOnly","touchStartThreshold","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","get","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_generateId","str","src","href","sum","charCodeAt","_nextTick","_cancelNextTick","id","contains","_getDirection","type","touch","pointerType","originalTarget","shadowRoot","path","composedPath","root","inputs","idx","checked","_saveInputCheckedState","button","isContentEditable","criteria","trim","_prepareDragStart","dragStartFn","ownerDocument","nextSibling","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","abs","floor","_onTouchMove","_onDragStart","selection","empty","getSelection","removeAllRanges","err","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","ghostMatrix","relativeScrollOffset","dx","dy","b","c","cssMatrix","appendChild","removeAttribute","_hideClone","cloneId","insertBefore","_loopId","setInterval","effectAllowed","_dragStartId","revert","vertical","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","lastElRect","childContainingRect","spacer","_ghostIsLast","changed","firstElRect","_ghostIsFirst","firstChild","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_dragElInRowColumn","side1","scrolledPastTop","scrollBefore","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_getSwapDirection","dragIndex","nextElementSibling","after","moveVector","extra","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","removeChild","save","handleEvent","dropEffect","_globalDragOver","toArray","order","getAttribute","useAnimation","items","set","destroy","querySelectorAll","utils","is","extend","dst","nextTick","cancelNextTick","detectDirection","element","_len","_key","create","version","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","clearAutoScrolls","autoScroll","pid","clearPointerElemChangedInterval","isFallback","scroll","scrollCustomFn","sens","scrollSensitivity","speed","scrollSpeed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","bubbleScroll","drop","toSortable","changedTouches","onSpill","Revert","Remove","startIndex","dragStart","_ref2","_ref3","_ref4","parentSortable","AutoScroll","forceAutoScrollFallback","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","dragOverBubble","nulling","ogElemScroller","newElem","module","exports","LTS","LT","L","LL","LLL","LLLL","t","r","o","s","h","zone","offset","u","meridiem","A","afternoon","Q","month","S","milliseconds","SS","SSS","ss","m","mm","H","HH","hh","D","DD","Do","ordinal","day","w","ww","M","MM","MMM","map","Error","MMMM","Y","YY","year","YYYY","Z","ZZ","l","formats","regex","parser","exec","hours","customParseFormat","parseTwoDigitYear","parse","date","utc","$u","$locale","Ls","$d","minutes","seconds","week","getDate","getFullYear","v","getMonth","g","UTC","toDate","init","$L","locale","format","isValid","freeSelf","self","Function","isArray","freeGlobal","global","objectProto","nativeObjectToString","symToStringTag","toStringTag","isOwn","tag","unmasked","result","EventListener","eventTarget","eventOptions","unorderedBindings","Set","connect","disconnect","bindingConnected","binding","add","bindingDisconnected","delete","extendedEvent","immediatePropagationStopped","extendEvent","bindings","hasBindings","size","leftIndex","rightIndex","Dispatcher","application","eventListenerMaps","Map","started","start","eventListeners","eventListener","stop","values","reduce","listeners","fetchEventListenerForBinding","clearEventListeners","clearEventListenersForBinding","handleError","error","message","detail","removeMappedEventListenerFor","eventListenerMap","fetchEventListenerMapForEventTarget","cacheKey","fetchEventListener","createEventListener","parts","defaultActionDescriptorFilters","prevent","descriptorPattern","parseEventTarget","eventTargetName","camelize","char","namespaceCamelize","capitalize","dasherize","toLowerCase","isSomething","hasProperty","property","allModifiers","Action","descriptor","schema","defaultEventNames","getDefaultEventNameForElement","identifier","methodName","keyFilter","forToken","token","descriptorString","includes","parseActionDescriptorString","content","eventFilter","shouldIgnoreKeyboardEvent","filters","keyFilterDissatisfied","standardFilter","keyMappings","shouldIgnoreMouseEvent","params","RegExp","attributes","typecast","meta","ctrl","alt","shift","modifier","metaKey","ctrlKey","altKey","shiftKey","form","details","input","select","textarea","JSON","o_O","Binding","context","action","actionEvent","prepareActionEvent","willBeInvokedByEvent","applyEventModifiers","invokeWithEvent","method","controller","actionDescriptorFilters","passes","entries","currentTarget","logDebugActivity","KeyboardEvent","MouseEvent","Element","scope","containsElement","ElementObserver","delegate","mutationObserverInit","childList","subtree","elements","mutationObserver","MutationObserver","mutations","processMutations","observe","refresh","pause","takeRecords","matchElementsInTree","has","removeElement","addElement","mutation","processMutation","processAttributeChange","attributeName","processRemovedNodes","removedNodes","processAddedNodes","addedNodes","elementAttributeChanged","matchElement","nodes","node","elementFromNode","processTree","elementIsActive","tree","processor","Node","ELEMENT_NODE","isConnected","elementMatched","elementUnmatched","AttributeObserver","elementObserver","hasAttribute","elementMatchedAttribute","elementUnmatchedAttribute","elementAttributeValueChanged","fetch","del","prune","Multimap","valuesByKey","hasKey","hasValue","getValuesForKey","getKeysForValue","_values","SelectorObserver","_selector","matchesByElement","selectorMatchElement","selectorMatched","selectors","selectorUnmatched","_attributeName","matchedBefore","StringMapObserver","stringMap","attributeOldValue","knownAttributeNames","refreshAttribute","oldValue","getStringMapKeyForAttribute","stringMapKeyAdded","stringMapValueChanged","stringMapKeyRemoved","currentAttributeNames","recordedAttributeNames","attribute","TokenListObserver","attributeObserver","tokensByElement","tokensMatched","readTokensForElement","unmatchedTokens","matchedTokens","refreshTokensForElement","tokensUnmatched","tokens","tokenMatched","tokenUnmatched","previousTokens","currentTokens","firstDifferingIndex","zip","findIndex","previousToken","currentToken","tokenString","parseTokenString","ValueListObserver","tokenListObserver","parseResultsByToken","WeakMap","valuesByTokenByElement","fetchParseResultForToken","fetchValuesByTokenForElement","elementMatchedValue","elementUnmatchedValue","parseResult","parseToken","valuesByToken","parseValueForToken","BindingObserver","bindingsByAction","valueListObserver","actionAttribute","disconnectAllActions","connectAction","disconnectAction","ValueObserver","receiver","stringMapObserver","valueDescriptorMap","invokeChangedCallbacksForDefaultValues","invokeChangedCallback","writer","defaultValue","valueDescriptorNameMap","valueDescriptors","rawValue","rawOldValue","changedMethodName","changedMethod","reader","TypeError","descriptors","hasMethodName","TargetObserver","targetsByName","disconnectAllTargets","connectTarget","disconnectTarget","_a","targetConnected","targetDisconnected","readInheritableStaticArrayValues","propertyName","ancestors","getAncestorsForConstructor","definition","getOwnStaticArrayValues","readInheritableStaticObjectPairs","pairs","getOwnStaticObjectPairs","getPrototypeOf","reverse","OutletObserver","outletsByName","outletElementsByName","selectorObserverMap","attributeObserverMap","outletDefinitions","outletName","setupSelectorObserverForOutlet","setupAttributeObserverForOutlet","dependentContexts","observer","disconnectAllOutlets","stopSelectorObservers","stopAttributeObservers","outlet","getOutlet","connectOutlet","getOutletFromMap","disconnectOutlet","hasOutlet","hasOutletController","controllerAttribute","_element","getOutletNameFromOutletAttributeName","updateSelectorObserverForOutlet","outletConnected","outletDisconnected","selectorObserver","attributeNameForOutletName","outlets","getSelectorForOutletName","outletAttributeForScope","outletDependencies","dependencies","router","modules","controllerConstructor","dependentControllerIdentifiers","identifiers","contexts","getControllerForElementAndIdentifier","Context","functionName","bindingObserver","dispatcher","valueObserver","targetObserver","outletObserver","initialize","parentElement","invokeControllerMethod","bless","properties","shadowConstructor","shadowProperties","getOwnKeys","shadowingDescriptor","getShadowedDescriptor","getShadowProperties","shadow","blessings","blessedProperties","blessing","getBlessedProperties","getOwnPropertyNames","extendWithReflect","extended","Reflect","construct","setPrototypeOf","testReflectExtension","Module","blessDefinition","contextsByScope","connectedContexts","connectContextForScope","fetchContextForScope","disconnectContextForScope","ClassMap","getDataKey","getAll","getAttributeName","getAttributeNameForKey","DataMap","setAttribute","Guide","logger","warnedKeysByObject","warn","warnedKeys","attributeValueContainsToken","TargetSet","targetName","targetNames","findTarget","findLegacyTarget","findAll","targets","findAllTargets","findAllLegacyTargets","getSelectorForTargetName","findElement","findAllElements","targetAttributeForScope","getLegacySelectorForTargetName","deprecate","targetDescriptor","targetAttribute","revisedAttributeName","guide","OutletSet","controllerElement","outletNames","findOutlet","findAllOutlets","queryElements","matchesElement","Scope","classes","controllerSelector","documentScope","isDocumentScope","ScopeObserver","scopesByIdentifierByElement","scopeReferenceCounts","parseValueForElementAndIdentifier","scopesByIdentifier","fetchScopesByIdentifierForElement","createScopeForElementAndIdentifier","referenceCount","scopeConnected","scopeDisconnected","Router","scopeObserver","modulesByIdentifier","loadDefinition","unloadIdentifier","connectModule","afterLoad","disconnectModule","getContextForElementAndIdentifier","proposeToConnectScopeForElementAndIdentifier","console","defaultSchema","enter","tab","esc","space","up","down","home","end","page_up","page_down","objectFromEntries","array","memo","k","Application","debug","logFormattedMessage","Promise","resolve","readyState","register","load","registerActionOption","head","rest","shouldLoad","unload","controllers","onerror","groupCollapsed","log","groupEnd","getOutletController","getControllerAndEnsureConnectedScope","outletController","parseValueDefinitionPair","typeDefinition","payload","typeObject","typeFromObject","hasType","hasDefault","default","fullObject","onlyType","onlyDefault","parseValueTypeConstant","typeFromDefaultValue","parseValueTypeDefault","parseValueTypeObject","typeFromConstant","propertyPath","parseValueTypeDefinition","constant","defaultValuesByType","constantFromType","defaultValueForDefinition","hasCustomDefaultValue","readers","writers","valueDescriptorForTokenAndTypeDefinition","Boolean","String","boolean","number","string","writeJSON","stringify","Controller","_identifier","_application","dispatch","prefix","classDefinition","targetDefinition","valueDefinitionPairs","propertyDescriptorMap","valueDefinitionPair","valueDescriptor","read","write","propertiesForValueDefinitionPair","outletDefinition","camelizedName","outletElement","propertiesForOutletDefinition","definitionsFromContext","logicalName","identifierForContextKey","definitionForModuleAndIdentifier","definitionForModuleWithContextAndKey","sparkMd5","undefined$1","hex_chr","md5cycle","md5blk","md5blks","md5blk_array","md51","tail","tmp","lo","hi","md51_array","subarray","Uint8Array","rhex","j","hex","toUtf8","unescape","encodeURIComponent","utf8Str2ArrayBuffer","returnUInt8Array","buff","ArrayBuffer","arrayBuffer2Utf8Str","fromCharCode","concatenateArrayBuffers","first","second","byteLength","buffer","hexToBinaryString","bytes","SparkMD5","reset","clamp","num","targetArray","sourceArray","begin","append","appendBinary","contents","_buff","_length","_hash","raw","_finish","getState","hash","setState","hashBinary","factory","fileSlice","File","mozSlice","webkitSlice","FileChecksum","file","chunkSize","chunkCount","ceil","chunkIndex","md5Buffer","fileReader","FileReader","fileReaderDidLoad","fileReaderDidError","readNextChunk","binaryDigest","base64digest","btoa","readAsArrayBuffer","querySelector","eventInit","BlobRecord","checksum","url","customHeaders","filename","content_type","byte_size","xhr","XMLHttpRequest","open","responseType","setRequestHeader","headerKey","csrfToken","getMetaValue","requestDidLoad","requestDidError","status","response","send","blob","direct_upload","directUploadData","toJSON","BlobUpload","headers","DirectUpload","notify","upload","messages","DirectUploadController","directUpload","hiddenInput","insertAdjacentElement","dispatchError","signed_id","uploadRequestDidProgress","progress","loaded","total","defaultPrevented","alert","directUploadWillCreateBlobWithXHR","directUploadWillStoreFileWithXHR","DirectUploadsController","files","createDirectUploadControllers","startNextController","processingAttribute","submitButtonsByForm","didClick","didSubmitForm","didSubmitRemoteElement","handleFormSubmissionEvent","disable","enable","focus","click","submitForm","ActiveStorage","datepicker","dates","et","days","daysShort","daysMin","months","monthsShort","today","weekStart","__data__","other","pop","ListCache","entry","uid","maskSrcKey","IE_PROTO","func","funcToString","reIsHostCtor","reIsNative","Hash","MapCache","LARGE_ARRAY_SIZE","Stack","fromRight","iteratee","keysFunc","iterable","props","freeExports","freeModule","Buffer","allocUnsafe","isDeep","copy","arrayBuffer","typedArray","byteOffset","objectCreate","proto","arg","Ctor","isObjectLike","isArguments","isBuffer","objectCtorString","typedArrayTags","freeProcess","process","nodeUtil","types","require","nodeIsTypedArray","isTypedArray","objValue","customizer","isNew","newValue","reIsUint","inherited","isArr","isArg","isBuff","isType","skipIndexes","isProto","srcIndex","mergeFunc","stack","srcValue","stacked","isCommon","isTyped","baseMerge","thisArg","nativeMax","otherArgs","nativeNow","now","count","lastCalled","stamp","remaining","assigner","sources","guard","yy","weekdays","weekdaysShort","weekdaysMin","relativeTime","future","past","dd","z","utcOffset","O","$x","$offset","NaN","$y","$M","$D","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isSame","startOf","endOf","isAfter","isBefore","$g","unix","valueOf","$set","daysInMonth","subtract","invalidDate","getTimezoneOffset","diff","toISOString","toUTCString","$i","isDayjs","en","noGlobal","getProto","flat","class2type","hasOwn","fnToString","ObjectFunctionString","support","isFunction","isWindow","preservedScriptAttributes","nonce","noModule","DOMEval","code","doc","script","text","toType","rhtmlSuffix","isArrayLike","jquery","pushStack","elems","merge","prevObject","each","eq","even","grep","_elem","odd","len","copyIsArray","deep","isPlainObject","random","isReady","msg","noop","isEmptyObject","globalEval","nodeValue","makeArray","results","inArray","isXMLDoc","namespace","namespaceURI","docElem","callbackExpect","guid","_i","whitespace","rtrimCSS","bup","compareDocumentPosition","rcssescape","fcssescape","ch","asCodePoint","escapeSelector","sel","preferredDoc","pushNative","Expr","outermostContext","sortInput","hasDuplicate","documentIsHTML","rbuggyQSA","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","booleans","pseudos","rwhitespace","rcomma","rleadingCombinator","rdescend","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","unloadHandler","setDocument","inDisabledFieldset","addCombinator","dir","next","childNodes","els","seed","nid","groups","newSelector","newContext","getElementById","getElementsByClassName","testContext","tokenize","toSelector","qsaError","cache","cacheLength","markFunction","assert","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","subWindow","getById","getElementsByName","disconnectedMatch","cssHas","attrId","getAttributeNode","innerHTML","compare","sortDetached","expr","matchesSelector","attr","attrHandle","uniqueSort","duplicates","sortStable","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","expectedNodeName","operator","check","what","_argument","simple","forward","ofType","_context","xml","outerCache","nodeIndex","useCache","pseudo","setFilters","matched","not","matcher","compile","unmatched","lang","elemLang","location","activeElement","safeActiveElement","hasFocus","tabIndex","enabled","selected","selectedIndex","header","_matchIndexes","lt","gt","nth","radio","checkbox","password","image","submit","parseOnly","soFar","preFilters","cached","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","matcherOut","preMap","postMap","preexisting","multipleContexts","matcherIn","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","compiled","unique","getText","isXML","until","truncate","siblings","rneedsContext","rsingleTag","winnow","qualifier","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","prev","cur","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","rnothtmlwhite","Identity","Thrower","ex","adoptValue","reject","noValue","promise","fail","then","Callbacks","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","lock","fireWith","Deferred","tuples","always","deferred","pipe","fns","newDefer","tuple","returned","onFulfilled","onRejected","onProgress","maxDepth","depth","handler","special","that","mightThrow","notifyWith","resolveWith","exceptionHook","rejectWith","getErrorHook","getStackHook","stateString","when","singleValue","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","asyncError","readyException","readyList","catch","readyWait","wait","doScroll","access","chainable","emptyGet","bulk","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","camelCase","acceptData","owner","Data","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","getData","removeData","_data","_removeData","attrs","dequeue","startLength","hooks","_queueHooks","unshift","setter","clearQueue","defer","pnum","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","show","hide","toggle","div","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","noCloneChecked","wrapMap","thead","col","tr","td","_default","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","rhtml","buildFragment","scripts","ignored","wrap","attached","fragment","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","one","origFn","leverageNative","isSetup","saved","isTrigger","delegateType","trigger","isImmediatePropagationStopped","handleObjIn","eventHandle","events","handleObj","handlers","namespaces","origType","elemData","triggered","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","Event","noBubble","beforeunload","returnValue","isDefaultPrevented","relatedTarget","timeStamp","isSimulated","eventPhase","pageX","pageY","view","charCode","keyCode","buttons","offsetX","offsetY","pointerId","screenX","screenY","targetTouches","toElement","which","blur","focusMappedHandler","documentMode","simulate","attaches","dataHolder","mouseenter","mouseleave","pointerenter","pointerleave","orig","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","prepend","before","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","rcustomProp","getStyles","opener","swap","old","rboxStyle","curCSS","computed","minWidth","maxWidth","isCustomProp","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","measure","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","borderTopWidth","borderBottomWidth","offsetHeight","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","delta","marginDelta","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","cssHooks","opacity","animationIterationCount","aspectRatio","borderImageSlice","columnCount","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","orphans","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeMiterlimit","strokeOpacity","origName","setProperty","isFinite","scrollboxSizeBuggy","margin","padding","border","suffix","expand","expanded","propHooks","run","percent","eased","pos","step","fx","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","Animation","tweeners","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","complete","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","prefilter","opt","speeds","fadeTo","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","timeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","addClass","classNames","curValue","finalValue","removeClass","stateVal","isValidValue","hasClass","rreturn","valHooks","optionSet","rquery","parseXML","parserErrorElem","DOMParser","parseFromString","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","triggerHandler","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","valueOrFunction","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","lastModified","etag","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","overrideMimeType","mimeType","abort","statusText","finalText","crossDomain","hasContent","ifModified","beforeSend","success","nativeStatusText","responses","isSuccess","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","xhrSuccessStatus","xhrSupported","cors","errorCallback","username","xhrFields","onload","onabort","ontimeout","onreadystatechange","responseText","binary","scriptAttrs","charset","scriptCharset","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","unbind","undelegate","hover","fnOver","fnOut","rtrim","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","_jQuery","_$","noConflict","S2","select2","amd","requirejs","define","undef","main","req","makeMap","defined","waiting","config","defining","aps","jsSuffixRegExp","hasProp","normalize","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","part","baseParts","starMap","nodeIdCompat","makeRequire","relName","forceSync","makeNormalize","makeLoad","depName","callDep","splitPrefix","makeRelParts","makeConfig","relParts","relResourceName","pr","uri","deps","cjsModule","usingExports","callbackType","cfg","_defined","Utils","getMethods","theClass","methods","Extend","ChildClass","SuperClass","__hasProp","BaseConstructor","__super__","Decorate","DecoratorClass","decoratedMethods","superMethods","DecoratedClass","argCount","calledConstructor","ctr","displayName","superMethod","calledMethod","originalMethod","decoratedMethod","Observable","_type","invoke","generateChars","chars","_convertData","originalKey","dataLevel","hasScroll","$el","escapeMarkup","markup","replaceMap","__cache","GetUniqueElementId","select2Id","StoreData","GetData","RemoveData","copyNonInternalCssClasses","destinationClasses","clazz","sourceClasses","replacements","Results","$element","dataAdapter","render","$results","displayMessage","hideLoading","$message","hideMessages","$options","$option","$dropdown","sorter","highlightFirstItem","$selected","ensureHighlightVisible","setClasses","selectedIds","showLoading","loading","loadingMore","$loading","_resultId","title","role","label","template","$children","$child","$childrenContainer","$container","isOpen","$highlighted","getHighlightedResults","currentIndex","nextIndex","$next","currentOffset","nextTop","nextOffset","outerHeight","nextBottom","mousewheel","deltaY","isAtTop","isAtBottom","$this","offsetDelta","BACKSPACE","TAB","ENTER","SHIFT","CTRL","ALT","ESC","SPACE","PAGE_UP","PAGE_DOWN","END","HOME","LEFT","UP","RIGHT","DOWN","DELETE","KEYS","BaseSelection","$selection","_tabindex","resultsId","_handleBlur","update","_attachCloseHandler","_detachCloseHandler","$select","isEnabled","SingleSelection","$rendered","selectionContainer","formatted","MultipleSelection","$selections","selectionIdPrefix","selectionId","removeItem","$remove","Placeholder","decorated","placeholder","normalizePlaceholder","createPlaceholder","$placeholder","placeholderTitle","singlePlaceholder","AllowClear","_handleClear","_handleKeyboardClear","$clear","previousVal","unselectData","prevented","removeAll","Search","searchLabel","$search","$searchContainer","_transferTabIndex","resizeSearch","_keyUpPrevented","$previousChoice","searchRemoveChoice","msie","disableInputEvents","handleSearch","searchHadFocus","term","SelectionCSS","selectionCssClass","EventRelay","relayEvents","preventableEvents","Translation","dict","all","translation","_cache","loadPath","translations","BaseAdapter","query","generateResultId","SelectAdapter","selectedElement","currentData","unselect","addOptions","innerText","normalizedData","_normalizeItem","ArrayAdapter","_dataToConvert","convertToOptions","elm","$existing","existingIds","onlyItem","$existingOption","existingData","newData","$newOption","AjaxAdapter","ajaxOptions","_applyDefaults","processResults","q","failure","$request","_request","request","_queryTimeout","Tags","tags","createTag","insertTag","wrapper","checkChildren","_removeOldTags","page","Tokenizer","tokenizer","dropdown","createAndSelect","tokenData","separators","termChar","MinimumInputLength","$e","minimumInputLength","minimum","MaximumInputLength","maximumInputLength","maximum","MaximumSelectionLength","maximumSelectionLength","_checkIfMaximumSelected","successCallback","Dropdown","showSearch","HidePlaceholder","removePlaceholder","modifiedData","InfiniteScroll","lastParams","$loadingMore","createLoadingMore","showLoadingMore","loadMoreIfNeeded","isLoadMoreVisible","loadMore","pagination","more","AttachBody","$dropdownParent","_showDropdown","_attachPositioningHandler","_bindContainerResultHandlers","_hideDropdown","_detachPositioningHandler","$dropdownContainer","_containerResultsHandlersBound","_positionDropdown","_resizeDropdown","scrollEvent","resizeEvent","orientationEvent","$watchers","ev","$window","isCurrentlyAbove","isCurrentlyBelow","newDirection","viewport","enoughRoomAbove","enoughRoomBelow","$offsetParent","outerWidth","countResults","MinimumResultsForSearch","minimumResultsForSearch","SelectOnClose","_handleSelectOnClose","originalSelect2Event","$highlightedResults","CloseOnSelect","_selectTriggered","DropdownCSS","dropdownCssClass","TagsSearchHighlight","$firstOption","firstElement","errorLoading","inputTooLong","overChars","inputTooShort","maximumSelected","noResults","searching","removeAllItems","search","ResultsList","SelectionSearch","DIACRITICS","SelectData","ArrayData","AjaxData","DropdownSearch","EnglishTranslation","Defaults","tokenSeparators","resultsAdapter","selectOnClose","dropdownAdapter","multiple","SearchableDropdown","closeOnSelect","selectionAdapter","allowClear","language","_resolveLanguage","uniqueLanguages","_processTranslations","stripDiacritics","amdLanguageBase","autocomplete","dropdownAutoWidth","scrollAfterSelect","templateResult","templateSelection","theme","applyFromElement","optionLanguage","defaultLanguage","elementLanguage","parentLanguage","languages","resolvedLanguages","baseLanguage","languageData","convertedData","Options","fromElement","excludedData","dataset","upperCaseLetter","dataName","dataValue","Select2","DataAdapter","_placeContainer","SelectionAdapter","DropdownAdapter","ResultsAdapter","_bindAdapters","_registerDomEvents","_registerDataEvents","_registerSelectionEvents","_registerDropdownEvents","_registerResultsEvents","_registerEvents","initialData","_syncAttributes","_resolveWidth","WIDTH","styleWidth","elementWidth","_syncA","_syncS","_syncSubtree","_observer","nonRelayEvents","toggleDropdown","close","_isChangeMutation","actualTrigger","preTriggerMap","preTriggerName","preTriggerArgs","newVal","thisMethods","instanceOptions","instance","adapters","WebSocket","secondsSince","ConnectionMonitor","connection","visibilityDidChange","reconnectAttempts","isRunning","startedAt","stoppedAt","startPolling","staleThreshold","stopPolling","recordMessage","pingedAt","recordConnect","disconnectedAt","recordDisconnect","poll","pollTimeout","reconnectIfStale","getPollInterval","reconnectionBackoffRate","connectionIsStale","refreshedAt","disconnectedRecently","reopen","visibilityState","INTERNAL","message_types","welcome","ping","confirmation","rejection","disconnect_reasons","unauthorized","invalid_request","server_restart","remote","default_mount_path","protocols","supportedProtocols","Connection","consumer","subscriptions","monitor","disconnected","webSocket","isActive","socketProtocols","subprotocols","uninstallEventHandlers","installEventHandlers","allowReconnect","reopenDelay","getProtocol","isState","triedToReconnect","isProtocolSupported","states","reason","reconnect","reconnectAttempted","reload","confirmSubscription","reconnected","notifyAll","willAttemptReconnect","Subscription","mixin","perform","command","unsubscribe","SubscriptionGuarantor","pendingSubscriptions","guarantee","subscription","startGuaranteeing","forget","stopGuaranteeing","retrySubscribing","retryTimeout","subscribe","Subscriptions","guarantor","channelName","channel","ensureActiveConnection","sendCommand","Consumer","_url","createWebSocketURL","addSubProtocol","subprotocol","createConsumer","getConfig","symbolProto","symbolToString","baseToString","reHasUnicode","rsAstral","rsCombo","rsFitz","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsOptVar","rsSeq","rsSymbol","reUnicode","strSymbols","chr","trailing","accumulator","initAccum","reLatin","reComboMark","reAsciiWord","reHasUnicodeWord","rsDingbatRange","rsLowerRange","rsUpperRange","rsBreakRange","rsMathOpRange","rsBreak","rsDigits","rsDingbat","rsLower","rsMisc","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","rsEmoji","reUnicodeWord","reApos","word","ReflectOwnKeys","R","ReflectApply","NumberIsNaN","EventEmitter","emitter","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","flags","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","_addListener","existing","warning","newListener","emit","warned","onceWrapper","wrapFn","_onceWrap","wrapped","_listeners","evlistener","unwrapListeners","arrayClone","listenerCount","wrapListener","RangeError","setMaxListeners","getMaxListeners","doError","er","addListener","prependListener","prependOnceListener","originalListener","spliceOne","removeAllListeners","rawListeners","eventNames","Chart","registerables","lim","p2b","n2b","b2n","n2p","map$1","B","C","E","F","h1","h2","hexString","isShort","alpha","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","rgb","rgb2hsl","hueValue","calln","hsl2rgb","hue","hueParse","p1","p2","hwb2rgb","hsv2rgb","X","W","V","U","T","P","N","K","G","I","J","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","names","nameParse","unpacked","tkeys","ok","nk","unpack","transparent","RGB_RE","modHSL","ratio","fromObject","functionParse","rgbParse","Color","_rgb","_valid","valid","rgbString","hslString","mix","color","weight","c1","c2","w2","w1","interpolate","rgb1","rgb2","clearer","greyscale","opaquer","negate","lighten","darken","saturate","desaturate","rotate","deg","isNullOrUndef","isObject","isNumberFinite","finiteOrDefault","valueOrDefault","toDimension","endsWith","loopable","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","klen","isValidKey","_merger","tval","sval","merger","mergeIf","_mergerIf","keyResolvers","resolveObjectKey","_splitKey","_getKeyResolver","_capitalize","setsEqual","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","almostEquals","epsilon","niceNum","range","roundedRange","niceRange","fraction","isNumber","toPrimitive","isNonPrimitive","_setMinAndMaxByKey","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_isBetween","_lookup","cmp","mid","_lookupByKey","ti","_rlookupByKey","arrayEvents","unlistenArrayEvents","stub","_chartjs","_arrayUnique","requestAnimFrame","throttled","argsToUse","ticking","_toLeftRightCenter","align","_alignStartEnd","_getStartAndCountOfVisiblePoints","points","animationsDisabled","pointCount","_sorted","iScale","vScale","_parsed","spanGaps","minDefined","maxDefined","getUserBounds","getPixelForValue","distanceToDefinedLo","point","distanceToDefinedHi","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","atEdge","elasticIn","sin","elasticOut","effects","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","isPatternOrGradient","getHoverColor","numbers","colors","intlCache","formatNumber","formatter","Intl","NumberFormat","getNumberFormat","formatters","numeric","tickValue","ticks","chart","notation","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","remain","significand","Ticks","overrides","getScope$1","_descriptors","_appliers","backgroundColor","borderColor","datasets","platform","getDevicePixelRatio","font","family","hoverBackgroundColor","hoverBorderColor","hoverColor","indexAxis","interaction","mode","intersect","includeInvisible","maintainAspectRatio","onHover","onClick","parsing","responsive","scales","showLine","drawActiveElementsOnTop","describe","override","route","targetScope","scopeObject","targetScopeObject","privateName","local","appliers","_scriptable","startsWith","_indexable","_fallback","loop","resize","animations","autoPadding","beginAtZero","bounds","clip","grace","grid","lineWidth","drawOnChartArea","drawTicks","tickLength","tickWidth","_ctx","tickColor","dash","dashOffset","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","_measureText","gc","longest","textWidth","measureText","_longestText","arrayOfThings","garbageCollect","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","xOffsetW","yOffsetW","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","fill","borderWidth","stroke","_isPointInArea","area","clipArea","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","decorateText","line","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","strokeStyle","fillStyle","decorationWidth","drawBackdrop","oldColor","fillRect","renderText","lines","strokeWidth","strokeColor","textAlign","textBaseline","setRenderOpts","backdrop","strokeText","fillText","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","_readValueToProps","objProps","toTRBL","toTRBLCorners","toPadding","toFont","toFontString","cacheable","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","finalRootScopes","_resolve","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","readKey","needsSubResolver","createSubResolver","_resolveWithPrefixes","getKeysFromAllScopes","storage","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_subProxy","_stack","setContext","isScriptable","getValue","_resolveScriptable","isIndexable","_resolveArray","_resolveWithContext","allKeys","scriptable","indexable","_allKeys","resolveFallback","getScope","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","EPSILON","getPoint","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","splineCurveMonotone","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","monotoneAdjust","iPixel","vPixel","monotoneCompute","capControlPoint","pt","_updateBezierControlPoints","controlPoints","cubicInterpolationMode","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","positions","getPositionedStyle","getRelativePosition","borderBox","boxSizing","paddings","borders","useOffsetPos","getCanvasPosition","round1","getMaximumSize","bbWidth","bbHeight","margins","maxHeight","containerSize","containerStyle","containerBorder","containerPadding","getContainerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","readUsedSize","getStyle","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","getRtlAdapter","rtl","rectX","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_itemWidth","overrideTextDirection","getPropertyPriority","prevTextDirection","restoreTextDirection","propertyFn","between","normalizeSegment","_boundSegment","segment","startBound","endBound","getSegment","prevValue","inside","subStart","shouldStart","shouldStop","_boundSegments","segments","sub","splitByStyles","segmentOptions","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","st","p0","p0DataIndex","p1DataIndex","styleChanged","doSplitByStyles","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","replacer","Animator","_charts","_running","_lastDate","_notify","anims","callbacks","numSteps","currentStep","_refresh","_update","running","draw","_active","_total","_getAnims","charts","listen","cb","acc","_duration","animator","interpolators","factor","c0","_fn","_easing","_start","_loop","_target","_prop","_from","_to","_promises","elapsed","promises","res","rej","resolved","Animations","_properties","configure","animationOptions","animatedProps","_animateOptions","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","awaitAll","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","dsIndex","singleMode","otherValue","found","isStacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","positive","getMatchingVisibleMetas","updateStacks","_cachedMeta","_stacks","iAxis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","_visualValues","getFirstScaleId","clearStacks","isDirectUpdateMode","cloneIfNotShared","shared","DatasetController","_cachedDataOpts","getMeta","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","datasetElementType","dataElementType","linkScales","_stacked","addElements","isPluginEnabled","updateIndex","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","_getOtherScale","_destroy","_dataCheck","iAxisKey","vAxisKey","adata","convertObjectDataToArray","isExtensible","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","getMinMax","canStack","otherScale","createStack","NEGATIVE_INFINITY","otherMin","otherMax","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","getLabelForValue","_clip","toClip","defaultClip","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","createDataContext","createDatasetContext","_resolveElementOptions","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","freeze","_resolveAnimations","transition","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_sync","_dataChanges","_onDataPush","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","computeMinSampleSize","$bar","visibleMetas","getAllScaleValues","curr","updateMinAndPrev","getPixelForTick","parseValue","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","edge","borderSkipped","horizontal","borderProps","enableBorderRadius","parseEdge","v2","startEnd","setInflateAmount","inflateAmount","BarController","super","bars","getBasePixel","isHorizontal","ruler","_getRuler","vpixels","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","_getStacks","grouped","currentParsed","iScaleValue","skipNull","_getStackCount","_getStackIndex","pixels","barThickness","_startPixel","_endPixel","stackCount","categoryPercentage","barPercentage","baseValue","minBarLength","actualBase","floating","getDataVisibility","barSign","startPixel","getPixelForDecimal","endPixel","getValueForPixel","halfGrid","getLineWidthForValue","maxBarThickness","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","rects","_index_","_value_","BubbleController","DoughnutController","innerRadius","outerRadius","_getRotation","_getCircumference","circumference","_getRotationExtents","isDatasetVisible","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","cutout","toPercentage","chartWeight","_getRingWeight","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","_circumference","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","legend","generateLabels","fontColor","legendItem","toggleDataVisibility","LineController","_dataset","_decimated","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","lastPoint","updateControlPoints","PolarAreaController","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","circular","pointLabels","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","ScatterController","registry","getElement","abstract","DateAdapterBase","members","binarySearch","metaset","lookupMethod","_reversePixels","getRange","evaluateInteractionItems","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","isPointInArea","inRange","getNearestCartesianItems","distanceMetric","useX","useY","deltaX","getDistanceMetricForAxis","minDistance","getCenterPoint","getNearestItems","getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","setLayoutDims","layouts","stackWeight","placed","buildStacks","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","availableWidth","availableHeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","newHeight","widthChanged","heightChanged","same","getMargins","marginForPositions","fitBoxes","boxes","refitBoxes","refit","setBoxDims","placeBoxes","userPadding","addBox","_layers","removeBox","layoutItem","minPadding","layoutBoxes","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","updatePos","change","handleMaxPadding","BasePlatform","acquireContext","releaseContext","updateConfig","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerdown","pointermove","pointerup","pointerout","isNullOrEmpty","eventListenerOptions","nodeListContains","nodeList","createAttachObserver","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","unlistenDevicePixelRatioChanges","createProxyAndListen","native","fromNativeEvent","DomPlatform","renderHeight","renderWidth","displayWidth","displayHeight","initCanvas","proxies","$proxies","attach","tooltipPosition","tickOpts","determinedMaxTicks","_tickSize","maxScale","maxChart","_maxLength","determineMaxTicks","ticksLimit","maxTicksLimit","majorIndices","getMajorIndices","numMajorIndices","newTicks","skipMajors","evenMajorSpacing","getEvenSpacing","factors","_factorize","calculateSpacing","avgMajorSpacing","majorStart","majorEnd","offsetFromEdge","getTicksLimit","ticksLength","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","Scale","_margins","paddingTop","paddingBottom","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","getLabelItems","_computeLabelItems","beforeUpdate","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","keepZero","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetRight","isFullSize","_computeLabelSizes","caches","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","decimal","getDecimalForPixel","getBaseValue","createTickContext","optionTicks","rot","_computeGridLineItems","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","positionAxisID","limit","optsAtIndex","optsAtIndexBorder","lineColor","tickBorderDash","tickBorderDashOffset","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","tickTextAlign","labelPadding","_computeLabelArea","drawBackground","drawGrid","drawLine","setLineDash","lineDashOffset","drawBorder","lastLineWidth","drawLabels","renderTextOptions","drawTitle","titleX","titleY","titleArgs","tz","gz","bz","axisID","_maxDigits","fontSize","TypedRegistry","isForType","isPrototypeOf","parentScope","isIChartComponent","itemDefaults","defaultRoutes","routes","propertyParts","sourceName","sourceScope","routeDefaults","registerDefaults","unregister","Registry","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","reg","_getRegistryForType","_exec","itemReg","component","camelMethod","PluginService","_init","_createDescriptors","invalidate","_oldCache","_notifyStateChanges","localIds","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","pluginScopeKeys","getIndexAxis","datasetDefaults","idMatchesAxis","determineAxis","scaleOptions","getAxisFromDataset","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","boundDs","retrieveAxisFromDatasets","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","initOptions","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","_config","initConfig","_scopeCache","_resolverCache","clearCache","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","hasFunction","needContext","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","getCanvas","instances","getChart","moveNumericKeys","intKey","getSizeForArea","field","invalidatePlugins","userConfig","initialCanvas","existingChart","OffscreenCanvas","_detectPlatform","_options","_aspectRatio","_metasets","_lastEvent","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","_doResize","debounce","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","useClip","getDatasetArea","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","_stop","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","pluginId","replay","hoverOptions","deactivated","activated","inChartArea","_handleEvent","_getActiveElements","isClick","_isClickEvent","lastEvent","determineLastEvent","parseBorderRadius$1","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","pixelMargin","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","fullCircles","inner","lineJoin","angleMargin","clipArc","ArcElement","chartX","chartY","rAdjust","nonZeroBetween","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","drawArc","setStyle","lineCap","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","getLineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","_path","strokePathWithCache","segmentMethod","strokePathDirect","LineElement","_points","_segments","_pointsUpdated","findStartAndEnd","solidSegments","_computeSegments","_interpolate","_getInterpolationMethod","interpolated","inRange$1","hitRadius","PointElement","mouseX","mouseY","inXRange","inYRange","hoverRadius","getBarBounds","bar","half","skipOrLimit","boundingRects","maxW","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","outer","skipX","skipY","addNormalRectPath","inflateRect","amount","refRect","BarElement","addRectPath","BORDER_COLORS","BACKGROUND_COLORS","getBorderColor","getBackgroundColor","getColorizer","colorizeDoughnutDataset","colorizePolarAreaDataset","colorizeDefaultDataset","containsColorsDefinitions","plugin_colors","forceOverride","_args","chartOptions","containsColorDefenition","colorizer","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","xAxis","getStartAndCountOfVisiblePointsSimplified","decimated","samples","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","lttbDecimation","minIndex","maxIndex","xMin","intermediateIndex1","intermediateIndex2","minMaxDecimation","_getBounds","_findSegmentEnd","_getEdge","_createBoundaryLine","boundary","linePoints","_pointsFromSegments","_shouldApplyFill","_resolveTarget","propagate","visited","_decodeFill","fillOption","parseFillOption","firstCh","decodeTargetIndex","addPointsBelow","sourcePoint","linesBelow","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","getLineByIndex","sourcePoints","below","getLinesBelow","_buildStackLine","_getTargetValue","computeCircularBoundary","_getTargetPixel","computeLinearBoundary","computeBoundary","_drawfill","lineOpts","above","clipVertical","doFill","clipY","lineLoop","tpoints","targetSegments","tgt","subBounds","fillSources","fillSource","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","_itemHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","legendItemText","calculateItemWidth","fontLineHeight","calculateLegendItemHeight","calculateItemHeight","calculateItemSize","adjustHitBoxes","rtlHelper","hitbox","_draw","defaultColor","halfFontSize","cursor","textDirection","lineDash","drawOptions","SQRT2","yBoxTop","xBoxLeft","drawLegendBox","_textX","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","onLeave","isListened","hoveredItem","sameItem","itemsEqual","plugin_legend","afterEvent","ci","useBorderRadius","Title","_padding","textSize","_drawArgs","fontOpts","plugin_title","titleBlock","createTitle","plugin_subtitle","positioners","average","xSet","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","formattedValue","getTooltipSize","tooltip","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","defaultCallbacks","beforeTitle","tooltipItems","labelCount","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","Tooltip","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","getTitle","getBeforeBody","getBody","bodyItems","scoped","getAfterBody","getFooter","_createItems","itemSort","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","findOrAddLabel","addedLabels","addIfString","lastIndexOf","_getLabelForValue","CategoryScale","_startValue","_valueRange","_addedLabels","added","generateTicks$1","generationOptions","dataRange","precision","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","rounded","almostWhole","decimalPlaces","relativeLabelSize","LinearScaleBase","_endValue","handleTickRangeOptions","setMin","setMax","minSign","maxSign","getTickLimit","stepSize","computeTickLimit","LinearScale","log10Floor","changeExponent","isMajor","tickVal","steps","rangeExp","rangeStep","generateTicks","minExp","exp","startExp","lastTick","LogarithmicScale","_zero","getTickBackdropHeight","determineLimits","fitWithPointLabels","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","updateLimits","setCenterPoint","_pointLabelItems","itemOpts","createPointLabelItem","isNotOverlapped","buildPointLabelItems","hLimits","vLimits","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","drawPointLabelBox","backdropLeft","backdropTop","backdropWidth","backdropHeight","pathRadiusLine","RadialLinearScale","leftMovement","rightMovement","topMovement","bottomMovement","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","getBasePosition","getPointLabelPosition","drawPointLabels","gridLineOpts","drawRadiusLine","INTERVALS","millisecond","common","minute","hour","quarter","UNITS","adapter","_adapter","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","MAX_SAFE_INTEGER","addTick","timestamps","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","_unit","_majorUnit","_offsets","_normalized","displayFormats","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","offsetAfterAutoskip","getDecimalForValue","weekday","hasWeekday","getDataTimestamps","tooltipFormat","datetime","fmt","_tickFormatFunction","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","raise","errorConstructor","requestSubmit","submitter","HTMLElement","DOMException","validateSubmitter","HTMLFormElement","submittersByForm","clickCaptured","candidate","findSubmitterFromClickTarget","prototypeOfSubmitEvent","SubmitEvent","vendor","FrameLoadingStyle","eager","lazy","FrameElement","static","observedAttributes","delegateConstructor","connectedCallback","disconnectedCallback","sourceURLReloaded","attributeChangedCallback","loadingStyleChanged","sourceURLChanged","disabledChanged","shouldReloadWithMorph","frameLoadingStyleFromString","autoscroll","isLoading","isPreview","drive","progressBarDelay","unvisitableExtensions","activateScriptElement","createdScriptElement","cspNonce","getCspNonce","destinationElement","sourceElement","copyElementAttributes","cancelEvent","nextRepaint","nextEventLoopTick","nextAnimationFrame","parseHTMLDocument","unindent","strings","indent","uuid","markAsBusy","localName","clearBusyState","waitForLoad","timeoutInMilliseconds","getHistoryMethodForAction","history","replaceState","pushState","getVisitAction","isAction","getMetaElement","getMetaContent","findClosestRecursively","assignedSlot","elementIsFocusable","queryAutofocusableElement","elementOrDocumentFragment","doesNotTargetIFrame","HTMLIFrameElement","findLinkFromClickTarget","getLocationForLink","link","expandURL","beforeSubmit","afterSubmit","forms","locatable","URL","baseURI","getAnchor","anchorMatch","getAction$1","getExtension","pathname","getPathComponents","getLastPathComponent","isPrefixedBy","baseURL","origin","getPrefix","locationIsVisitable","rootLocation","getRequestURL","anchor","toCacheKey","FetchResponse","succeeded","failed","clientError","serverError","redirected","isHTML","responseHTML","LimitedSet","oldestValue","recentRequests","nativeFetch","fetchWithTurboHeaders","modifiedHeaders","Headers","requestUID","fetchMethodFromString","FetchMethod","post","patch","fetchEnctypeFromString","encoding","FetchEnctype","multipart","plain","urlEncoded","FetchRequest","abortController","AbortController","_value","requestBody","URLSearchParams","enctype","buildResourceAndBody","fetchOptions","credentials","redirect","defaultHeaders","signal","abortSignal","referrer","fetchBody","isSafe","searchParams","FormData","fetchMethod","prepareRequest","requestStarted","fetchRequest","receive","requestErrored","requestFinished","fetchResponse","requestPreventedHandlingResponse","requestSucceededWithResponse","requestFailedWithResponse","Accept","acceptResponseType","requestInterception","resume","resource","entriesExcludingFiles","mergeIntoURLSearchParams","AppearanceObserver","intersectionObserver","IntersectionObserver","unobserve","lastEntry","isIntersecting","elementAppearedInViewport","StreamMessage","streamElement","importNode","inertScriptElement","templateElement","importStreamElements","prefetchCache","expire","setLater","ttl","FormSubmissionState","requesting","receiving","stopping","FormSubmission","confirmMethod","confirm","formElement","mustRedirect","getMethod","formAction","getAction","formElementAction","getFormAction","formData","buildFormData","getEnctype","confirmationMessage","cookieName","cookie","decodeURIComponent","getCookieValue","requestAcceptsTurboStreamResponse","setSubmitsWith","formSubmission","formSubmissionStarted","formSubmissionFailedWithResponse","requestMustRedirect","responseSucceededWithoutRedirect","formSubmissionErrored","formSubmissionSucceededWithResponse","resetSubmitterText","formSubmissionFinished","submitsWith","originalSubmitText","Snapshot","hasAnchor","getElementForAnchor","firstAutofocusableElement","permanentElements","queryPermanentElementsAll","getPermanentElementById","getPermanentElementMapForSnapshot","snapshot","permanentElementMap","currentPermanentElement","newPermanentElement","FormSubmitObserver","submitCaptured","submitBubbled","submissionDoesNotDismissDialog","submissionDoesNotTargetIFrame","willSubmitForm","formSubmitted","View","scrollToAnchor","scrollToElement","focusElement","scrollToPosition","scrollToAnchorFromLocation","scrollIntoView","scrollRoot","scrollToTop","renderer","shouldRender","willRender","newSnapshot","shouldInvalidate","renderPromise","prepareToRenderSnapshot","renderInterception","renderElement","renderMethod","allowsImmediateRender","renderSnapshot","viewRenderedSnapshot","preloadOnLoadLinksForView","finishRenderingSnapshot","reloadReason","viewInvalidated","markAsPreview","prepareToRender","markVisitDirection","unmarkVisitDirection","finishRendering","FrameView","missing","LinkInterceptor","clickBubbled","linkClicked","willVisit","clickEventIsSignificant","clickEvent","shouldInterceptLinkClick","linkClickIntercepted","_event","LinkClickObserver","willFollowLinkToLocation","followedLinkToLocation","FormLinkClickObserver","linkInterceptor","canPrefetchRequestToLocation","prefetchAndCacheRequestToLocation","willSubmitFormLinkToLocation","turboFrame","turboAction","turboConfirm","submittedFormLinkToLocation","Bardo","preservingPermanentElements","bardo","leave","enteringBardo","replaceNewPermanentElementWithPlaceholder","replaceCurrentPermanentElementWithClone","replacePlaceholderWithPermanentElement","leavingBardo","permanentElement","createPlaceholderForPermanentElement","getPlaceholderById","placeholders","Renderer","currentElement","newElement","currentSnapshot","resolvingFunctions","shouldAutofocus","focusFirstAutofocusableElement","connectedSnapshot","FrameRenderer","destinationRange","createRange","selectNodeContents","deleteContents","frameElement","sourceRange","extractContents","loadFrameElement","scrollFrameIntoView","activateScriptElements","willRenderFrame","block","behavior","readScrollBehavior","newScriptElements","activatedScriptElement","Idiomorph","EMPTY_SET","morphStyle","beforeNodeAdded","noOp","afterNodeAdded","beforeNodeMorphed","afterNodeMorphed","beforeNodeRemoved","afterNodeRemoved","beforeAttributeUpdated","shouldPreserve","elt","shouldReAppend","shouldRemove","afterHeadMorphed","morphNormalizedContent","oldNode","normalizedNewContent","oldHead","newHead","handleHeadElement","morphChildren","bestMatch","newContent","bestElement","score","newScore","scoreElement","findBestNodeMatch","previousSibling","morphedNode","morphOldNodeTo","insertSiblings","ignoreValueOfActiveElement","possibleActiveElement","ignoreActiveValue","ignoreActive","isSoftMatch","HTMLHeadElement","fromAttributes","toAttributes","fromAttribute","ignoreAttribute","toAttribute","HTMLInputElement","fromValue","toValue","syncBooleanAttribute","HTMLOptionElement","HTMLTextAreaElement","syncInputValue","syncNodeFrom","newParent","oldParent","newChild","nextNewChild","insertionPoint","removeIdsFromConsideration","isIdSetMatch","idSetMatch","findIdSetMatch","removeNodesBetween","softMatch","findSoftMatch","tempNode","removeNode","updateType","ignoreUpdate","newHeadTag","currentHead","preserved","nodesToAppend","headMergeStyle","srcToNewHeadNodes","newHeadChild","outerHTML","currentHeadElt","inNewContent","isReAppended","isPreserved","newNode","newElt","createContextualFragment","removedElement","kept","node1","node2","getIdIntersectionCount","startInclusive","endExclusive","newChildPotentialIdCount","potentialMatch","otherMatchCount","potentialSoftMatch","siblingSoftMatchCount","isIdInConsideration","deadIds","idIsWithinNode","targetNode","idMap","idSet","sourceSet","matchCount","populateIdMapForNode","nodeParent","idElements","createIdMap","oldContent","morph","Document","contentWithSvgsRemoved","generatedByIdiomorph","htmlElement","parseContent","normalizedContent","dummyParent","normalizeContent","finalConfig","mergeDefaults","createMorphContext","morphElements","DefaultIdiomorphCallbacks","mutationType","MorphingFrameRenderer","ProgressBar","defaultCSS","animationDuration","hiding","stylesheetElement","createStylesheetElement","progressElement","createProgressElement","installStylesheetElement","setValue","installProgressElement","startTrickling","fadeProgressElement","uninstallProgressElement","stopTrickling","trickleInterval","trickle","HeadSnapshot","detailsByOuterHTML","elementIsNoscript","elementWithoutNonce","tracked","elementIsTracked","trackedElementSignature","getScriptElementsNotInSnapshot","getElementsMatchingTypeNotInSnapshot","getStylesheetElementsNotInSnapshot","matchedType","provisionalElements","findMetaElementByName","elementIsMetaElementWithName","elementIsScript","elementIsStylesheet","PageSnapshot","fromHTMLString","fromDocument","headSnapshot","clonedElement","selectElements","clonedSelectElements","selectedOptions","clonedPasswordInput","headElement","getSetting","cacheControlValue","isPreviewable","isCacheable","isVisitable","prefersViewTransitions","shouldMorphPage","shouldPreserveScrollPosition","ViewTransitioner","renderChange","useViewTransition","viewTransitionsAvailable","startViewTransition","finished","defaultOptions","historyChanged","visitCachedSnapshot","updateHistory","shouldCacheSnapshot","acceptsStreamResponse","TimingMetric","VisitState","SystemStatusCode","Direction","advance","Visit","timingMetrics","followedRedirect","scrolled","snapshotCached","viewTransitioner","restorationIdentifier","snapshotHTML","isSamePage","locationWithActionIsSamePage","isPageRefresh","restorationData","getRestorationDataForIdentifier","silent","recordTimingMetric","visitStarted","cancelRender","visitCompleted","followRedirect","visitFailed","changeHistory","issueRequest","hasPreloadedResponse","simulateRequest","shouldIssueRequest","startRequest","recordResponse","finishRequest","visitRequestStarted","isSuccessful","visitRequestCompleted","visitRequestFailedWithStatusCode","visitRequestFinished","loadResponse","cacheSnapshot","renderPageSnapshot","visitRendered","renderError","getCachedSnapshot","getCachedSnapshotForLocation","getPreloadedSnapshot","hasCachedSnapshot","loadCachedSnapshot","redirectedToLocation","visitProposedToLocation","goToSamePageAnchor","performScroll","_response","_error","forceReloaded","scrollToRestoredPosition","visitScrolledToSamePageLocation","lastRenderedLocation","scrollPosition","metric","getTimingMetrics","frame","shouldTransitionTo","renderPage","cancelAnimationFrame","BrowserAdapter","progressBar","session","startVisit","visit","showVisitProgressBarAfterDelay","showProgressBar","_visit","hideVisitProgressBar","pageInvalidated","_formSubmission","showFormProgressBarAfterDelay","hideFormProgressBar","visitProgressBarTimeout","formProgressBarTimeout","CacheObserver","deprecatedSelector","removeTemporaryElements","temporaryElements","temporaryElementsWithDeprecation","FrameRedirector","formSubmitObserver","_location","submissionIsNavigatable","elementIsNavigatable","History","pageLoaded","onPopState","onPageLoad","turbo","restorationIndex","updateRestorationData","additionalData","assumeControlOfScrollRestoration","previousScrollRestoration","scrollRestoration","relinquishControlOfScrollRestoration","shouldHandlePopState","historyPoppedToLocationWithRestorationIdentifierAndDirection","pageIsLoaded","LinkPrefetchObserver","turboFrameTarget","unfetchableLink","linkToTheSamePage","linkOptsOut","nonSafeLink","eventPrevented","turboPrefetchParent","turboMethod","isUJS","Navigator","proposeVisit","allowsVisitingLocationWithAction","currentVisit","clearSnapshotCache","visitOptions","currentAnchor","isRestorationToTop","oldURL","newURL","PageStage","PageObserver","stage","interpretReadyState","pageWillUnload","pageIsInteractive","pageIsComplete","pageBecameInteractive","ScrollObserver","onScroll","updatePosition","scrollPositionChanged","StreamMessageRenderer","permanentElementsInDocument","permanentElementInDocument","elementInStream","getPermanentElementMapForFragment","generatedID","turboStreams","elementWithAutofocus","nodeListOfStreamElements","firstAutofocusableElementInStreams","willAutofocusId","elementToAutofocus","withAutofocusFromFragment","activeElementBeforeRender","activeElementAfterRender","around","restoreFocusTo","elementToFocus","withPreservedFocus","StreamObserver","inspectFetchResponse","connectStreamSource","streamSourceIsConnected","receiveMessageEvent","disconnectStreamSource","fetchResponseFromEvent","fetchResponseIsStream","receiveMessageResponse","receiveMessageHTML","receivedMessageFromStream","ErrorRenderer","replaceHeadAndBody","replaceableElement","scriptElements","PageRenderer","HTMLBodyElement","trackedElementsAreIdentical","mergeHead","replaceBody","currentHeadSnapshot","newHeadSnapshot","mergedHeadElements","mergeProvisionalElements","newStylesheetElements","copyNewHeadStylesheetElements","copyNewHeadScriptElements","removeUnusedDynamicStylesheetElements","activateNewBody","assignNewBody","loadingElements","newHeadStylesheetElements","newHeadScriptElements","unusedDynamicStylesheetElements","newHeadElements","newHeadProvisionalElements","currentHeadProvisionalElements","isCurrentElementInElementList","elementList","isEqualNode","removeCurrentHeadProvisionalElements","copyNewHeadProvisionalElements","adoptNode","activateNewBodyScriptElements","newBodyScriptElements","oldHeadStylesheetElements","MorphingPageRenderer","canRefreshFrame","SnapshotCache","snapshots","PageView","snapshotCache","viewWillCacheSnapshot","cachedSnapshot","Preloader","shouldPreloadLink","preloadURL","Cache","resetCacheControl","exemptPageFromCache","exemptPageFromPreview","setMetaContent","extendURLWithDeprecatedProperties","deprecatedLocationPropertyDescriptors","absoluteURL","pageObserver","cacheObserver","linkPrefetchObserver","linkClickObserver","scrollObserver","streamObserver","formLinkClickObserver","frameRedirector","streamMessageRenderer","preloader","debouncedRefresh","pageRefreshDebouncePeriod","registerAdapter","proposeVisitIfNavigatedWithAction","requestId","renderStreamMessage","setProgressBarDelay","formMode","timeoutId","isUnsafe","isStream","frameTarget","applicationAllowsFollowingLinkToLocation","getActionForLink","applicationAllowsVisitingLocation","notifyApplicationAfterVisitingLocation","notifyApplicationAfterPageLoad","notifyApplicationAfterVisitingSamePageLocation","notifyApplicationBeforeCachingSnapshot","notifyApplicationBeforeRender","_snapshot","_isPreview","notifyApplicationAfterRender","frameLoaded","notifyApplicationAfterFrameLoad","frameRendered","notifyApplicationAfterFrameRender","notifyApplicationAfterClickingLinkToLocation","notifyApplicationBeforeVisitingLocation","newBody","timing","HashChangeEvent","submitterIsNavigatable","withinFrame","navigator$1","setConfirmMethod","setFormMode","Turbo","__proto__","TurboFrameMissingError","getFrameElementById","activateElement","currentURL","StreamActions","targetElements","templateContent","removeDuplicateTargetChildren","targetElement","StreamElement","performAction","beforeRenderEvent","duplicateChildren","existingChildren","flatMap","newChildrenIds","actionFunction","targetElementsById","targetElementsByQuery","HTMLTemplateElement","description","newStream","StreamSourceElement","streamSource","EventSource","getConsumer","setConsumer","newConsumer","walk","fetchResponseLoaded","_fetchResponse","appearanceObserver","loadingStyle","sourceURL","currentNavigationElement","newFrame","_renderMethod","_newElement","previousFrameElement","replaceChildren","newFrameElement","extractForeignFrameElement","rendererClass","pageSnapshot","Response","CSS","customElements","currentScript","TurboCableStreamSourceElement","subscribeTo","received","dispatchMessageEvent","connected","subscriptionConnected","subscriptionDisconnected","MessageEvent","signed_stream_name","isBodyInit","formMethod","HTMLButtonElement","determineFormMethod","overrideMethod","determineFetchMethod","cocoon_element_counter","create_new_id","newcontent_braced","newcontent_underscord","assoc","assocs","insertionMethod","insertionNode","insertionTraversal","regexp_braced","regexp_underscord","new_id","new_content","new_contents","insertionNodeElem","getInsertionNodeElem","contentNode","before_insert","wrapper_class","node_to_delete","trigger_node","before_remove","UTCDate","UTCToday","isUTCEquals","date1","date2","getUTCFullYear","getUTCMonth","getUTCDate","alias","deprecationMsg","deprecated","isValidDate","extras","DateArray","new_array","Datepicker","_secondaryEvents","_process_options","viewDate","defaultViewDate","focusDate","isInput","inputField","isInline","picker","DPGlobal","_check_template","templates","leftArrow","rightArrow","_buildEvents","_attachEvents","calendarWeeks","startDate","_o","endDate","daysOfWeekDisabled","daysOfWeekHighlighted","datesDisabled","_allow_update","setViewMode","startView","fillDow","fillMonths","_resolveViewName","viewModes","viewMode","_resolveDaysOfWeek","daysOfWeek","minViewMode","maxViewMode","multidate","multidateSeparator","weekEnd","parseFormat","_local_to_utc","_zero_time","parseDate","assumeNearbyYear","plc","orientation","_plc","_applyEvents","evs","_unapplyEvents","keyup","keydown","paste","showOnFocus","_focused_from","immediateUpdates","navArrowsClick","dayCellClick","place","_detachEvents","_attachSecondaryEvents","_detachSecondaryEvents","_trigger","altdate","local_date","_utc_to_local","ix","formatDate","enableOnReadonly","msMaxTouchPoints","disableTouchKeyboard","forceParse","dateString","clipboardData","setDate","_zero_utc_time","getDates","getUTCDates","selected_date","clearDates","autoclose","setDates","setUTCDates","setUTCDate","getFormattedDate","getStartDate","setStartDate","updateNavArrows","getEndDate","setEndDate","setDaysOfWeekDisabled","setDaysOfWeekHighlighted","setDatesDisabled","calendarWidth","calendarHeight","visualPadding","windowWidth","appendOffset","parentsZindex","itemZIndex","zIndexOffset","yorient","oldDates","fromArgs","dateWithinRange","updateViewDate","showWeekDays","dowCnt","localDate","setRange","getClassNames","cls","todayHighlight","dateIsDisabled","getUTCDay","_fill_yearsView","cssClass","startYear","endYear","beforeFn","startVal","endVal","focusedVal","currVal","startMonth","endMonth","todaytxt","cleartxt","titleFormat","todayDate","titleBtnVisible","todayBtn","weekOfDateIsDisabled","clearBtn","prevMonth","nextMonth","setUTCFullYear","weekDay","clsName","ws","yth","calWeek","beforeShowDay","monthsTitle","beforeShowMonth","moDate","beforeShowYear","beforeShowDecade","beforeShowCentury","prevIsDisabled","nextIsDisabled","_setDate","setUTCMonth","timestamp","navStep","moveMonth","_toggle_multidate","toggleActive","moveDay","newDate","moveWeek","new_month","new_date","mag","moveYear","moveAvailableDate","newViewDate","dateChanged","keyboardNavigation","DateRangePicker","keepEmptyValues","datepickerPlugin","dateUpdated","pickers","updateDates","opts_from_el","out","re_lower","opts_from_locale","locale_opts","updateRanges","updating","dp","keep_empty_values","internal_return","elopts","locopts","Constructor","validParts","nonpunctuation","toDisplay","assumeNearby","fn_map","dateAliases","yesterday","tomorrow","applyNearbyYear","filtered","setters_order","setters_map","yyyy","fparts","match_part","cnt","_date","seps","headTemplate","contTemplate","footTemplate"],"sourceRoot":""}